Kmeans是一種簡單的聚類方法,一般在數據分析前期使用,選取適當的k,將數據分類后,然后分類研究不同聚類下數據的特點。
算法原理
kmeans的計算方法如下:
1 隨機選取k個中心點;
2 遍歷所有數據,將每個數據划分到最近的中心點,作為一個簇;
3 計算每個聚類的平均值,並作為新的中心點;
4 重復2-3,直到這k個中心點不再變化(收斂),或執行了足夠多的迭代。
輪廓系數
輪廓系數(Silhouette Coefficient)結合了聚類的凝聚度(Cohesion)和分離度(Separation),用於評估聚類的效果。該值處於-1~1之間,值越大,表示聚類效果越好。具體計算方法如下:
1 對於第i個元素x_i,計算x_i與其同一個簇內的所有其他元素距離的平均值,記作a_i,用於量化簇內的凝聚度。
2 選取x_i外的一個簇b,計算x_i與b中所有點的平均距離,遍歷所有其他簇,找到最近的這個平均距離,記作b_i,用於量化簇之間分離度。
3 對於元素x_i,輪廓系數s_i = (b_i – a_i)/max(a_i,b_i) 計算所有x的輪廓系數,求出平均值即為當前聚類的整體輪廓系數
從上面的公式,不難發現若s_i小於0,說明x_i與其簇內元素的平均距離小於最近的其他簇,表示聚類效果不好。如果a_i趨於0,或者b_i足夠大,那么s_i趨近與1,說明聚類效果比較好。
注意點
1 隨機初始化的中心點可能會影響聚類結果,可以多次聚類選擇較優的聚類結果。
2 K值的選取直接影響聚類簇數。
如何選取合適的K值
1 最常用最簡單的方法可視化數據,然后觀察出聚類聚成幾類比較合適,高維數據可視化困難。
2 令k從2到一個固定值如10,在每個k值上重復運行數次kmeans(避免局部最優解),並計算當前k的平均輪廓系數,最后選取輪廓系數最大的值對應的k作為最終的集群數目。
Kmeans算法優缺點
優點:1 對於類似球形簇的數據集,聚類效果明顯;2 收斂速度較快,時間復雜度O(tkn) t為迭代次數 k中心點個數 n數據量;
缺點:1 K值難以確定;2 初始點不合適,可能陷入局部最優的聚類結果;3 對噪點敏感(更新中心點使用均值,均值對噪聲敏感);4 對於不規則的簇,kmeans聚類結果差。
參考:https://www.cnblogs.com/bourneli/p/3645049.html
2020-05-30 11:22