K-Means聚類算法

原理簡介

對于給定的樣本集,按照樣本之間的距離大小,將樣本集劃分為K個簇。讓簇內(nèi)的點盡量緊密的連在一起,而讓簇間的距離盡量的大。

如果用數(shù)據(jù)表達式表示,假設簇劃分為(C1,C2,...Ck),則我們的目標是最小化平方誤差E:

其中μi是簇Ci的均值向量,有時也稱為質心,表達式為:

算法描述

1)針對圖a所示的無標簽點集,想要把他分為兩類(即k=2);

2)隨機分配兩個點作為每個簇的質心,如圖b中的紅色和藍色的‘x’;

3)然后判斷全部點到這兩個質心的距離,與質心距離較近的標志為同種顏色;

4)根據(jù)新劃分的簇,重新計算質心,直到達到一定的要求(比如均方誤差最小等);

5)重復c和d的過程,即將所有點的類別標記為距離最近的質心的類別并求新的質心。

算法流程

輸入是樣本集D={x1,x2,...xm},聚類的簇樹k,最大迭代次數(shù)N;

輸出是簇劃分C={C1,C2,...Ck}。

1)從數(shù)據(jù)集D中隨機選擇k個樣本作為初始的k個質心向量:{μ1,μ2,...,μk}

2)對于n=1,2,...,N

?? a. 將簇劃分C初始化為Ct=?(t=1,2...k)

?? b. 對于i=1,2...m,計算樣本xi和各個質心向量μj(j=1,2,...k)的距離dij,將xi標記最小的為dij所對應的類別λi。此時更新Cλi=Cλi∪{xi}

? c.對于j=1,2,...,k,對Cj中所有的樣本點重新計算新的質心:

? d. 如果所有的k個質心向量都沒有發(fā)生變化,則轉到步驟3)

3)輸出簇劃分C={C1,C2,...Ck}

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容