k均值聚類(k-means clustering)算法思想起源於1957年Hugo Steinhaus[1],1967年由J.MacQueen在[2]第一次使用的,標准算法是由Stuart Lloyd在1957年第一次實現的,並在1982年發布[3]。簡單講,k-means clustering是一個根據數據的特征將數據分類為k組的算法。k是一個正整數。分組是根據原始數據與聚類中心(cluster centroid)的距離的平方最小來分配到對應的組中。
例子:假設我們有4個對象作為訓練集,每個對象都有兩個屬性見下。可根據x,y坐標將數據表示 在二維坐標系中。
object | Atrribute 1 (x): weight index |
Attribute 2 (Y): pH |
Medicine A | 1 | 1 |
Medicine B | 2 | 1 |
Medicine C | 4 | 3 |
Medicine D | 5 | 4 |
表一 原始數據
並且我們知道這些對象可依屬性被分為兩組(cluster 1和cluster 2)。問題在於如何確定哪些葯屬於cluster 1,哪些葯屬於cluster 2。
k-means clustering實現步驟很簡單。剛開始我們需要為各個聚類中心設置初始位置。我們可以從原始數據中隨機取出幾個對象作為聚類中心。然后k means算法執行以下三步直至收斂(即每個對象所屬的組都不改變)。
1.確定中心的坐標
2.確定每個對象與每個中心的位置
3.根據與中心位置的距離,每個對象選擇距離最近的中心歸為此組。
圖1 k means流程圖
對於表1中的數據,我們可以得到坐標系中的四個點。
1.初始化中心值:我們假設medicine A和medicine B作為聚類中心的初值。用c1和c2表示中心的坐標,c1=(1,1),c2=(2,1)。
2對象-中心距離:利用歐式距離(d = sqrt((x1-x2)^2+(y1-y2)^2))計算每個對象到每個中心的距離。第0次迭代的距離矩陣為
其中行表示聚類中心,列表示對象。
D距離矩陣中第一行表示每一個對象與第一個聚類中心的距離,第二行表示每一個對象與第二個聚類中心的距離
3.對象聚類:根據每個對象與聚類的距離的最小值將對象分為兩組。因此,medicine A屬於第一組,其余的對象屬於第二組。
4.迭代-1,確定中心:從3中我們得到了每組的成員,我們現在根據第組成員利用平均值計算新的聚類中心。c1=(1,1),c2=((2+4+5)/3,(1+3+4)/3)=(11/3,8/3)。此時各數據坐標位置如下。
5.迭代-1,對象-中心距離:此步計算所有對象與新的中心之間的距離。同第2步一樣,迭代-1中的距離矩陣如下所示。
6.迭代-1,對象聚類:同第3步一樣,將每一對象根據最小距離分組。此時得到的組距離如下所示。
7.迭代-2,確定中心:如第4步,得到c1=(3/2,1),c2=(9/2,7/2)
8.迭代-2,對象中心距離:如第2步。得距離矩陣如下。
9.迭代-2,對象聚類:得組矩陣如下。
此時,我們發現第一次迭代和第二迭代所得的分組情況是一樣的,即收斂,k means算法結束。得到如下所示的分組結果。
[1]Steinhaus, H., "Sur la division des corps matériels en parties" (in French).Bull. Acad. Polon. Sci. 4 (12): 801–804. MR0090073. Zbl 0079.16403,1957.
[2]MCQUEEN, J., "Some methods for classification and analysis of multivariate observations." In Proceedings of the Fifth Berkeley Symposium on Mathematical Statistics and Probability, 281-297,1967.
[3]Lloyd, S. P., "Least square quantization in PCM, " Bell Telephone Laboratories Paper, 1957, Published in journal much later: Lloyd., S. P. (1982).