概述
隨機選擇K個聚類中心,在每一次迭代中,先爲每個點確定其最近的聚類中心,這一步稱爲集羣分配(cluster assignment),然後計算每個類中所有點的中心點,將該類的聚類中心移動到中心點,這一步稱爲中心移動(move centroid),得到這k個聚類中心的新位置,進行下一次迭代,直到每個聚類中心點正確分佈在每個類的中心。
算法的輸入有兩個參數:聚類中心的數量K和一系列訓練集,聚類過程如圖所示:
僞代碼如下:
- 隨機初始化K個聚類中心
- 重複此過程直到不再改變 或者 到達最大迭代次數:
- for i=1:m //對訓練集中的每個數據
- =K個聚類中心中離i最近的一箇中心
- for k=1:K
- =所有劃分到的點的均值(對進行更新)
- for i=1:m //對訓練集中的每個數據
K近鄰聚類與K近鄰分類
- KNN聚類是非監督學習,KNN分類是監督學習
- KNN聚類是迭代的過程,KNN分類不需要迭代
關於隨機初始化
一個推薦的隨機初始化的方法:
隨機選擇K個訓練集中的點,令他們爲初始聚類中心.
隨機初始化的點會很大程度上影響到最終聚類的結果,如果初始化的不好,最終可能會陷入局部最優結果(local optima),避免這種的方式是進行多次隨機初始化和聚類(一般取50到1000次),分別計算distortion,取distortion最小的一次
對於K比較小(2到10),進行多次隨機初始化可能會很有用,但是對於K很大(如100),也許一次K聚類就能達到較好的效果。
關於選擇聚類個數K
-
根據肘部法則(elbow method),將K/distortion函數畫出來,圖像會看上去像人的胳膊肘,選擇肘部的地方所表示的K值會是很好的選擇。
-
根據業務需要,這是很多情況下的方法,在運行KNN聚類之前心裏就有了想要分成多少類的需求。