1. 程式人生 > >吳恩達老師機器學習筆記K-means聚類演算法(一)

吳恩達老師機器學習筆記K-means聚類演算法(一)

今天接著學習聚類演算法

以後堅決要八點之前起床學習!不要浪費每一個早晨。

K-means聚類演算法聚類過程如下:

在這裡插入圖片描述
原理基本就是先從樣本中隨機選擇聚類中心,計算樣本到聚類中心的距離,選擇樣本最近的中心作為該樣本的類別。最後某一類樣本的座標平均值作為新聚類中心的座標,如此往復。
原始資料如下:
在這裡插入圖片描述
程式碼如下:

load('ex7data2');
[m n]=size(X);
x=zeros(m,n+1);
x(1:m,1:n)=X;
Z_min=9999999; 
y=zeros(m,1); % 最優類別結果
for iter=1:100 % 選擇最優的聚類的結果
    start=round(rand(3,1)*(m-1)+1); % 隨機化聚類中心
    start_centre=X(start,:);
    Z_sum=0;
    for j=1:200 % 判斷樣本距離最近的中心
        for i=1:m
            Z=sum((x(i,1:n)-start_centre(:,1:n)).^2,2);
            [min_value,min_index]=min(Z);
            x(i,n+1)=min_index;
        end
        for i=1:3 % 聚類數量選擇3類
            start_centre(i,:)=mean(X(x(:,n+1)==i,:)); % 生成新的聚類中心
        end
    end
    for i=1:m % 計算成本函式
        Z_sum=sum((x(i,1:n)-start_centre(x(i,n+1),1:n)).^2,2)+Z_sum;
    end
    if Z_min>Z_sum % 選取成本最小的結果作為最優結果
       Z_min=Z_sum;
       y=x(:,n+1);      
    end       
end
scatter(X(:,1),X(:,2),8,y,'filled');

最後聚類結果如下:
在這裡插入圖片描述
這次程式碼非常的簡單了。。。。