介紹
下面是scikit-learn中的幾種聚類算法。
聚類算法 | 參數 |
---|---|
K-Means | number of clusters |
Affinity propagation | damping, sample preference |
Mean-shift | bandwidth |
Spectral clustering | number of clusters |
Ward hierarchical clustering | number of clusters |
Agglomerative clustering | number of clusters, linkage type, distance |
可以發現,大部分聚類算法的輸入參數,都含有聚類類別數目K,K表示我們需要算法將樣本聚成幾類。
那么問題來了,在使用聚類算法時,我們該如何決定聚類類別數目K值的選取呢?
方法
關於聚類K值問題,有很多種求解的方法。
有暴力的均方根解法,也有直觀的圖解法,下面介紹幾種常用的方法。
均方根
假設我們有m個樣本,該方法認為K=m^(1/2)(即根號m)
Elbow法(手肘法)
首先給出聚類算法的一些符號表示
* 聚類算法的m個輸入樣本:
*
所屬的聚類中心:
聚類算法在聚類過程中,會尋找每個樣本到聚類中心距離最小的點作為聚類中心。所以聚類算法的優化目標為:
其中
- 表示最接近 的聚類中心下標
- 表示聚類中心
優化目標J的值就表示每個樣本到聚類中心的距離之和,所以J在某種程度上表示了誤差,J最小則聚類誤差最小。
當K取值不同,得到的J值也不同。
Elbow法認為,K值應該取拐點上的那個值,如下圖。
手肘法的核心思想是:隨着聚類數k的增大,樣本划分會更加精細,每個簇的聚合程度會逐漸提高,那么誤差平方和SSE自然會逐漸變小。並且,當k小於真實聚類數時,由於k的增大會大幅增加每個簇的聚合程度,故SSE的下降幅度會很大,而當k到達真實聚類數時,再增加k所得到的聚合程度回報會迅速變小,所以SSE的下降幅度會驟減,然后隨着k值的繼續增大而趨於平緩,也就是說SSE和k的關系圖是一個手肘的形狀,而這個肘部對應的k值就是數據的真實聚類數。當然,這也是該方法被稱為手肘法的原因。
當然,實際情況中,不一定能看到拐點,也就不一定能使用這種方法。
圖像法
把樣本的二維、三維特征圖畫出來,通過觀察,人為決定K值選取。
樣本特征維度大於三時,用降維或Visual Intelligence的方法來作圖觀察。
結論
聚類使用中,可以根據上面一些方法確定K值得選取。
但最終決定你聚類K值的,應該是根據你聚類后的后續目的來選取。可以嘗試不同的K,看聚類結果能為你后續目的提供多大幫助。