在聚類分析中,K-均值聚類演算法(k-means algorithm)是無監督分類中的一種基本方法,其也稱為C-均值演算法,其基本思想是:透過迭代的方法,逐次更新各聚類中心的值,直至得到最好的聚類結果。 假設要把樣本集分為c個類別,演算法如下: (1)適當選擇c個類的初始中心; (2)在第k次迭代中,對任意一個樣本,求其到c箇中心的距離,將該樣本歸到距離最短的中心所在的類, (3)利用均值等方法更新該類的中心值; (4)對於所有的c個聚類中心,如果利用(2)(3)的迭代法更新後,值保持不變,則迭代結束,否則繼續迭代。 下面介紹作者編寫的一個分兩類的程式,可以把其作為函式呼叫。 %% function [samp1,samp2]=kmeans(samp); 作為呼叫函式時去掉註釋符 samp=[11.1506 6.7222 2.3139 5.9018 11.0827 5.7459 13.2174 13.8243 4.8005 0.9370 12.3576]; %樣本集 [l0 l]=size(samp); %%利用均值把樣本分為兩類,再將每類的均值作為聚類中心 th0=mean(samp);n1=0;n2=0;c1=0.0;c1=double(c1);c2=c1;for i=1:lif samp(i)<th0 c1=c1+samp(i);n1=n1+1;elsec2=c2+samp(i);n2=n2+1;endendc1=c1/n1;c2=c2/n2; %初始聚類中心t=0;cl1=c1;cl2=c2; c11=c1;c22=c2; %聚類中心while t==0samp1=zeros(1,l); samp2=samp1;n1=1;n2=1;for i=1:lif abs(samp(i)-c11)<abs(samp(i)-c22) samp1(n1)=samp(i); cl1=cl1+samp(i);n1=n1+1; c11=cl1/n1;elsesamp2(n2)=samp(i); cl2=cl2+samp(i);n2=n2+1; c22=cl2/n2;endendif c11==c1 && c22==c2t=1;endcl1=c11;cl2=c22; c1=c11;c2=c22; end %samp1,samp2為聚類的結果。 初始中心值這裡採用均值的辦法,也可以根據問題的性質,用經驗的方法來確定,或者將樣本集隨機分成c類,計算每類的均值。 k-均值演算法需要事先知道分類的數量,這是其不足之處。
在聚類分析中,K-均值聚類演算法(k-means algorithm)是無監督分類中的一種基本方法,其也稱為C-均值演算法,其基本思想是:透過迭代的方法,逐次更新各聚類中心的值,直至得到最好的聚類結果。 假設要把樣本集分為c個類別,演算法如下: (1)適當選擇c個類的初始中心; (2)在第k次迭代中,對任意一個樣本,求其到c箇中心的距離,將該樣本歸到距離最短的中心所在的類, (3)利用均值等方法更新該類的中心值; (4)對於所有的c個聚類中心,如果利用(2)(3)的迭代法更新後,值保持不變,則迭代結束,否則繼續迭代。 下面介紹作者編寫的一個分兩類的程式,可以把其作為函式呼叫。 %% function [samp1,samp2]=kmeans(samp); 作為呼叫函式時去掉註釋符 samp=[11.1506 6.7222 2.3139 5.9018 11.0827 5.7459 13.2174 13.8243 4.8005 0.9370 12.3576]; %樣本集 [l0 l]=size(samp); %%利用均值把樣本分為兩類,再將每類的均值作為聚類中心 th0=mean(samp);n1=0;n2=0;c1=0.0;c1=double(c1);c2=c1;for i=1:lif samp(i)<th0 c1=c1+samp(i);n1=n1+1;elsec2=c2+samp(i);n2=n2+1;endendc1=c1/n1;c2=c2/n2; %初始聚類中心t=0;cl1=c1;cl2=c2; c11=c1;c22=c2; %聚類中心while t==0samp1=zeros(1,l); samp2=samp1;n1=1;n2=1;for i=1:lif abs(samp(i)-c11)<abs(samp(i)-c22) samp1(n1)=samp(i); cl1=cl1+samp(i);n1=n1+1; c11=cl1/n1;elsesamp2(n2)=samp(i); cl2=cl2+samp(i);n2=n2+1; c22=cl2/n2;endendif c11==c1 && c22==c2t=1;endcl1=c11;cl2=c22; c1=c11;c2=c22; end %samp1,samp2為聚類的結果。 初始中心值這裡採用均值的辦法,也可以根據問題的性質,用經驗的方法來確定,或者將樣本集隨機分成c類,計算每類的均值。 k-均值演算法需要事先知道分類的數量,這是其不足之處。