是一篇比較綜合來講聚類演算法的文件。
根據上述的分析來看**的實現:
%分類器,聚類演算法(k-means)
%入參:k,隨機點k的個數,k=2,表示將所有的點分成兩個簇cluster;
%入參:x,表示欲分類的記錄集(x1,x2,x3...,xj)表示j個維度或者特徵
%出參:k,表示每次分類選擇的k點,形式如下:[k01,k02,..k0k;k11,k12,...kik],k表示族數,i表示迴圈選點的次數
function k = cluseringkmeans(k,x)
%icount代表樣本數;
%jcount代表特徵數;
icount=size(x)(1);
jcount=size(x)(2);
%隨機取點
randlist = getrandom(icount,k)
k(:,:)=x(randlist,:)
lastkean=mean(mean(k));
kmeanerr = lastkean - 0;
while abs(kmeanerr)>0,
lastkean=mean(mean(k));
%求所有x的點到l點的距離,然後選擇最小的,放到c中去
for iindex = 1 : icount,
%用來記錄最小的點
minmixvalue=0;
%需要對每個點的到每個k值點的距離進行求解
for kindex = 1 : k,
%如果k(i)與當前取值點是相同的,則距離等於0,這種情況下,不需要對計算
if iindex == randlist(kindex,1),
c(iindex,1)=kindex;
break;
elseif,
tmpmix=x(iindex,:)-k(kindex,:);
mixerr=tmpmix'*tmpmix;
%如果minmixvalue=0代表還沒有賦值,直接使用當前點
if minmixvalue==0,
minmixvalue=mixerr;
endif
if mixerr<=minmixvalue,
c(iindex,1)=kindex;
endif
endif
endfor
endfor
%重新計算k點的均值
for kindex =1 :k,
k(kindex,:) = mean(x(find(c==kindex),:),1);
endfor
%如果兩點的k點已經固定,則退出迴圈
kmeanerr=mean(mean(k))-lastkean;
endwhile;
endfunction
%返回隨機數列表,列表中的隨機數不重複
%入參:itop,表示隨機數從1到itop之間;
%入參:inumbercount表示要生成多少個隨機數
function randlist = getrandom(itop,inumbercount)
randlist = zeros(inumbercount,1);
icernlen = 1 / itop;
for iindex = 1 : inumbercount,
%在itop範圍內,找乙個不重複的index
brepeat=false;
while brepeat == false,
itmpnum = floor(rand(1)/icernlen);
if itmpnum==0,
break;
endif
brepeat=true;
for rindex = 1 : size(randlist)(1),
if itmpnum == randlist(rindex,1),
brepeat = false;
break;
endif
endfor
endwhile
randlist(iindex,1)=itmpnum;
endfor
endfunction
對上述**進行驗證:
x=[0.5,0.4;0.6,0.2;1.2,1.8;1.9,2.0;2.5,2.2;2.8,2.9;2.8,3.2;3.2,4.0;0.8,1.2;1.0,1.1;0.8,1.2;1.8,2.0;1.9,2.2;2.0,2.1]
plot(x(:,1),x(:,2),'o')
hold on
k=cluseringkmeans(1,3,x)
plot(k(:,1),k(:,2),'x')
得到的結果如下圖所示:
從上圖來看,憑我們的直覺也會認為這並不是乙個小的分類。
那麼我們需要多次執行,綜合去尋找乙個比較好的結果。再多試幾次試一下:
看淡橙的點,這個結果就比較符合我們的期望了。聚類演算法的結果,目前還是需要多次執行來尋找乙個最優解。
K mean聚類演算法
k mean演算法屬於非監督類演算法,模型相對簡單。目標函式 j sum dj i 演算法 1 初始化k個點 2 樣本xi,到k個點的距離為 dk xi uk j argmin j dk xi屬於cj 3 更新引數 uk sum xi i sum i 重複2和3,終止條件j的變化很小或者uk變化很小...
聚類及K mean演算法
首先什麼是聚類,和分類有什麼區別,這裡講乙個例子,比如有一群學生考完期末考試,現在要根據他們的成績把他們劃分成幾個小組,讓老師分別進行輔導,這時候,你不知道要劃分幾個小組比較好,但你可以根據他們的成績,比較成績接近的歸到乙個小組,這個過程就是聚類,另一種情況是直接給出了90分段的乙個小組,80分段的...
基本k mean聚類的文字聚類演算法原理和例子
基於質心的劃分方法是研究最多的演算法,包括k mean聚類演算法及其各種變體,這些變體依據初始簇的選擇,物件的劃分 相識度的計算方法 簇中心的計算方法不同而不同。基於質心的劃分方法將簇中所有物件的平均值看做簇的質心,根據乙個資料物件與簇質心的距離,將該物件賦予最近的簇。在這類方法中,需要給定劃分的簇...