MATLAB進(jìn)行聚類時確定簇數(shù)k的四種內(nèi)部評估方法

?聚類評估方法分為內(nèi)部評估法和外部評估法。
內(nèi)部評估法是指在沒有外部標(biāo)準(zhǔn)的情況下,通過聚類結(jié)果本身的特征來評價聚類的質(zhì)量。常見的內(nèi)部評估方法有輪廓系數(shù)、DB指數(shù)等。
而外部評估法是指通過與已知的外部標(biāo)準(zhǔn)進(jìn)行比較來評價聚類的質(zhì)量,常用的方法有調(diào)整蘭德指數(shù)(adjustedRand index,ARI)、標(biāo)準(zhǔn)化互信息法(Normalized Mutual Information,NMI)等。
在實際應(yīng)用中,內(nèi)部評估法比外部評估法要更加實用。因為內(nèi)部評估法不需要外部標(biāo)準(zhǔn),只需要根據(jù)聚類結(jié)果本身的特征來評價聚類的質(zhì)量,而外部評估法需要已知的外部標(biāo)準(zhǔn)進(jìn)行比較,有點類似于計算分類問題中的正確率、召回率等,但是需要有已知的標(biāo)簽,而這樣的數(shù)據(jù)在聚類中非常少見。
下面我們介紹MATLAB支持的四種內(nèi)部評估法,這四種方法可以幫助我們在聚類前確定聚類的克類別數(shù)K(有多少簇)的大小。
?這四種方法的整體思想都大同小異,大家可以思考:一個好的聚類結(jié)果是什么樣子?
一個好的聚類結(jié)果應(yīng)該是不同類之間的差異盡量大,而同一類的樣本盡可能的聚集。不過,不同的內(nèi)部評估方法在計算聚類結(jié)果的質(zhì)量時,會考慮到不同的因素,因此,不同的內(nèi)部評估方法可以從不同角度評價聚類結(jié)果的質(zhì)量。

下面我們介紹MATLAB中的四種內(nèi)部評估法,這也是學(xué)界用的較多的幾種方法:
https://ww2.mathworks.cn/help/stats/evalclusters.html
每個方法下方都有其被提出的參考文獻(xiàn)。

(1)輪廓系數(shù)? Silhouette criterion?
Rouseeuw, P. J. “Silhouettes: a graphical aid to the interpretation and validation of cluster analysis.”?Journal of Computational and Applied Mathematics. Vol. 20, No. 1, 1987, pp. 53–65.
輪廓系數(shù)是一種聚類評估方法,它可以用來衡量聚類的質(zhì)量。它的計算方式是計算樣本與其所在簇中其他樣本的距離和與其所在簇外其他簇中樣本的距離和之差,然后將這個差值除以兩者中的較大值。這個值越接近1,說明聚類效果越好;這個值越接近-1,說明聚類效果越差;這個值接近0,則說明聚類效果不明顯。
MATLAB官網(wǎng)上有輪廓系數(shù)的介紹,但是不是很詳細(xì):
https://ww2.mathworks.cn/help/stats/clustering.evaluation.silhouetteevaluation.html

算法介紹來自MATLAB官網(wǎng)
注意最后一段話:ClusterPriors是輪廓系數(shù)計算時的一個參數(shù),用于確定輪廓系數(shù)的計算方式。如果ClusterPriors的值為’empirical’,則軟件通過對所有點的輪廓系數(shù)取平均值來計算聚類解的輪廓系數(shù)值。每個簇根據(jù)其大小成比例地貢獻(xiàn)到準(zhǔn)則值中。如果ClusterPriors的值為’equal’,則軟件通過對每個簇內(nèi)所有點的輪廓系數(shù)取平均值,然后在所有簇之間取平均值來計算聚類解的輪廓系數(shù)值。無論其大小如何,每個簇都對準(zhǔn)則值做出相等的貢獻(xiàn)。最優(yōu)聚類數(shù)對應(yīng)于具有最高輪廓準(zhǔn)則值的解。在MATLAB中,ClusterPriors默認(rèn)為’empirical’,和Python中sklearn包的計算方法是一致的。我們在使用時使用默認(rèn)的選項即可。
下面是wiki上對于輪廓系數(shù)公式的推導(dǎo),這里介紹的非常詳細(xì)!

如果要使用輪廓系數(shù)確定聚類的類數(shù)k,只需要在不同的聚類數(shù)k分別計算輪廓系數(shù)即可。然后選擇輪廓系數(shù)最大的那個k值。

(2)Calinski-Harabasz指數(shù)
Calinski-Harabasz指數(shù),由Calinski和Harabasz在1974年提出:
我們希望SSB(簇間方差)盡量大,即不同的類之間的差異盡量大;
SSW(簇內(nèi)方差)盡量小,即同一類的樣本盡可能的聚集!
Calinski, T., and J. Harabasz. “A dendrite method for cluster analysis.”?Communications in Statistics. Vol. 3, No. 1, 1974, pp. 1–27.

https://ww2.mathworks.cn/help/stats/clustering.evaluation.calinskiharabaszevaluation.html
英文水平不好的同學(xué)可以看下面這篇文章:

因此,從公式可以看出,Calinski-Harabasz指數(shù)越大、說明聚類效果越好。
(注意,在SSB和SSW一定的情況下,聚類的數(shù)目k和Calinski-Harabasz呈反比關(guān)系,而在實際聚類過程中,隨著k的增大,SSB會變大、SSW會變小,因此這里面有一種權(quán)衡取舍關(guān)系!這也是為什么要添加k-1和N-k的原因)
如果要使用Calinski-Harabasz指數(shù)確定聚類的類數(shù)k,只需要在不同的聚類數(shù)k分別計算Calinski-Harabasz指數(shù)即可。然后選擇Calinski-Harabasz指數(shù)最大的那個k值。

(3)Davies-Bouldin指數(shù)
Davies-Bouldin指數(shù),由Davies和Bouldin在1979年提出:
Davies, D. L., and D. W. Bouldin. “A Cluster Separation Measure.”?IEEE Transactions on Pattern Analysis and Machine Intelligence. Vol. PAMI-1, No. 2, 1979, pp. 224–227.
Davies-Bouldin指數(shù)的核心思想是計算每個簇與它的最相似簇之間的相似度,然后再通過求得所有的相似度的平均值來衡量整個聚類結(jié)果的優(yōu)劣,而這個相似度是基于簇之間的距離刻畫的!
如果簇與簇之間的相似度越高(此時Davies-Bouldin指數(shù)偏高),也就說明簇與簇之間的距離越小(直觀上理解只有相距越近的事物才會越相似),那么此時聚類結(jié)果就越差,反之亦然。
因此,Davies-Bouldin指數(shù)越低,說明聚類效果越好。
相關(guān)的計算公式可參考MATLAB官網(wǎng):

算法介紹來自MATLAB官網(wǎng)
https://ww2.mathworks.cn/help/stats/clustering.evaluation.daviesbouldinevaluation.html
知乎上有篇文章寫的也很好:
https://zhuanlan.zhihu.com/p/530944459
以下截圖來自這篇文章:


如果要使用Davies-Bouldin指數(shù)確定聚類的類數(shù)k,只需要在不同的聚類數(shù)k分別計算Davies-Bouldin指數(shù)即可。然后選擇Davies-Bouldin指數(shù)最低的那個k值。

(4)間隙統(tǒng)計量(Gap criterion clustering evaluation)
這個方法在2001年由斯坦福大學(xué)的三位學(xué)者提出,發(fā)表在統(tǒng)計學(xué)領(lǐng)域理論推導(dǎo)類級別最高的期刊上。根據(jù)Google Scholar數(shù)據(jù)顯示,截至2023年3月,該論文已經(jīng)被引用了超過6300次,引用次數(shù)非常多。這表明該論文對聚類分析領(lǐng)域產(chǎn)生了重要的影響,并且被廣泛應(yīng)用于實際問題中。
?算法的原理和前面三個方法相比是最難的,感興趣的同學(xué)可以搜索下面的論文:
Tibshirani, R., G. Walther, and T. Hastie. “Estimating the number of clusters in a data set via the gap statistic.”?Journal of the Royal Statistical Society: Series B. Vol. 63, Part 2, 2001, pp. 411–423.
該方法提出了一個新的統(tǒng)計量,名為:Gap statistic(間隙統(tǒng)計量)。
通過計算不同聚類數(shù)K對應(yīng)的Gap statistic,來確定最佳聚類數(shù)。
Gap statistic可以衡量當(dāng)前聚類數(shù)的聚類效果與原始數(shù)據(jù)集具有相同的分布特征的隨機數(shù)據(jù)集的聚類效果之間的差距。具體來說,Gap statistic是由ExpectedLogW和LogW兩個值的差異得出的,其中ExpectedLogW是由Monte Carlo方法得到的期望值,而LogW是當(dāng)前聚類數(shù)下的對數(shù)似然值。
計算過程如下:

公式里面的W_k是原始數(shù)據(jù)集中k個聚類簇的簇內(nèi)距離之和(求和之前分別除以了兩倍的簇內(nèi)樣本量)。

有兩種方法生成與原始數(shù)據(jù)集具有相同的分布特征的隨機數(shù)據(jù)集:

第一種方法基于均勻分布生成,計算簡單但可能不能很好的刻畫原始分布的特征;第二種方法基于主成分分析的思想,能考慮到數(shù)據(jù)分布的形狀,是一種自適應(yīng)的分布,這種自適應(yīng)分布計算更加復(fù)雜但能更準(zhǔn)確地反映原始數(shù)據(jù)集的特征,因此更推薦使用。
注意,該指標(biāo)不是越大越好,也不是越小越好,如果要使用Davies-Bouldin指數(shù)確定聚類的類數(shù)k,最佳的簇是滿足下面的規(guī)則的最小的k:

上式中,B就是隨機數(shù)據(jù)集的樣本個數(shù),論文中的例子將B設(shè)置為100。然而,在實際應(yīng)用中,B的具體取值可能會因數(shù)據(jù)集大小、聚類數(shù)目、計算資源等因素而有所不同。一般來說,如果計算資源允許,可以將B設(shè)置得更大以提高估計的準(zhǔn)確性。但是需要注意的是,當(dāng)B過大時可能會導(dǎo)致計算時間過長。 因此,在實際應(yīng)用中,我們可以根據(jù)具體情況來選擇合適的B值。如果數(shù)據(jù)集較小,則可以將B設(shè)置為100是足夠的;如果數(shù)據(jù)集較大或者需要更高的估計精度,則可以將B設(shè)置得更大。
在我自己寫的聚類工具箱中,我將B設(shè)置成一個和樣本量有關(guān)的數(shù)值,當(dāng)樣本量小于200時,B等于100,當(dāng)樣本量大于等于200時,B等于樣本量的一半。
?MATLAB官網(wǎng)也有該方法的介紹,具體可參考:
https://ww2.mathworks.cn/help/stats/clustering.evaluation.gapevaluation.html

MATLAB官網(wǎng)的這段介紹將k的選取和肘部法則聯(lián)系了起來,事實上使用間隙統(tǒng)計量選擇k的過程和使用肘部圖確定k的方法有點像(肘部圖隨著k的變大是單調(diào)遞減的,間隙統(tǒng)計量隨著k的變大通常會先上升),只不過肘部圖中的k是我們?nèi)庋塾^看確定的,而間隙統(tǒng)計量的最佳的k是可以通過計算確定的。
下圖來自MATLAB官網(wǎng):使用鳶尾花數(shù)據(jù)集確定最佳聚類數(shù),得到的結(jié)果是分成5類。

附上正課第十講上肘部法則的介紹:

