K-means聚類演算法中K值如何選擇?

筆者整理的一些解答如下:

1. 數據的先驗知識,或者數據進行簡單分析能得到

2. 基於變化的演算法:即定義一個函數,隨著K的改變,認為在正確的K時會產生極值。如Gap

Statistic Jump Statistic 。可以這麼理解,給定一個合理的類簇指標,比如平均半徑或直徑,只要我們假設的類簇的數目等於或者高於真實的類簇的數目時,該指標上升會很緩慢,而一旦試圖得到少於真實數目的類簇時,該指標會急劇上升

3. 基於結構的演算法:即比較類內距離、類間距離以確定K。這個也是最常用的辦法,如使用平均輪廓係數,越趨近1聚類效果越好;如計算類內距離/類間距離,值越小越好;等。其中輪廓係數(silhouette coefficient)。結合了凝聚度和分離度。計算公式如下

[S(i) = frac{{b(i) - a(i)}}{{max (a(i),b(i))}}]

其中 [{a(i) = i}] 向量到所有它屬於的簇中其它點的距離的平均, [{b(i) = i}] 向量到所有非本身所在簇中其它點的距離的平均距離

4. 基於一致性矩陣的演算法:即認為在正確的K時,不同次聚類的結果會更加相似,以此確定K

5. 基於層次聚類:即基於合併或分裂的思想,在一定情況下停止從而獲得K

6. 基於採樣的演算法:即對樣本採樣,分別做聚類;根據這些結果的相似性確定K。如,將樣本分為訓練與測試樣本;對訓練樣本訓練分類器,用於預測測試樣本類別,並與聚類的類別比較

7. 使用Canopy Method演算法進行初始劃分

8. 使用BIC演算法進行初始劃分

k-means的k值該如何確定?

KMeans演算法的K值以及初始類簇中心點的選取 - CSDN博客

機器學習-KMeans聚類 K值以及初始類簇中心點的選取

筆者只是一些問題的搬運工,具體需要對問題進行深入的小夥伴還望自己閱讀相關文獻,這裡只是提出一些問題,以便於面試時問到,如果內容有一些錯誤,還望批評指正!

推薦閱讀:

TAG:机器学习 | 深度学习DeepLearning | 推荐系统 |