網(wǎng)站性能檢測評分
注:本網(wǎng)站頁面html檢測工具掃描網(wǎng)站中存在的基本問題,僅供參考。
學習技巧
機器學習之確定最佳聚類數(shù)目的10種方法 - iDoNews 推廣視頻課程
原標題:機器學習之確定最佳聚類數(shù)目的10種方法雷鋒網(wǎng)AI科技評論按,本文作者貝爾塔,原文載于知乎專欄數(shù)據(jù)分析與可視化,雷鋒網(wǎng)AI科技評論獲其授權發(fā)布。在聚類分析的時候確定最佳聚類數(shù)目是一個很重要的問題,比如kmeans函數(shù)就要你提供聚類數(shù)目這個參數(shù),總不能兩眼一抹黑亂填一個吧。之前也被這個問題困擾過,看了很多博客,大多泛泛帶過。今天把看到的這么多方法進行匯總以及代碼實現(xiàn)并盡量弄清每個方法的原理。數(shù)據(jù)集選用比較出名的wine數(shù)據(jù)集進行分析因為我們要找一個數(shù)據(jù)集進行聚類分析,所以不需要第一列的種類標簽信息,因此去掉第一列。同時注意到每一列的值差別很大,從1到100多都有,這樣會造成誤差,所以需要歸一化,用scale函數(shù)去掉標簽之后就可以開始對數(shù)據(jù)集進行聚類分析了,下面就一一介紹各種確定最佳聚類數(shù)目的方法判定方法1.mclust包mclust包是聚類分析非常強大的一個包,也是上課時老師給我們介紹的一個包,每次導入時有一種科技感:)幫助文檔非常詳盡,可以進行聚類、分類、密度分析Mclust包方法有點“暴力”,聚類數(shù)目自定義,比如我選取的從1到20,然后一共14種模型,每一種模型都計算聚類數(shù)目從1到20的BIC值,最終確定最佳聚類數(shù)目,這種方法的思想很直接了當,但是弊端也就顯然易見了——時間復雜度太高,效率低。635164可見該函數(shù)已經把數(shù)據(jù)集聚類為3種類型了。數(shù)目分別為63、51、64。再畫出14個指標隨著聚類數(shù)目變化的走勢圖下表是這些模型的意義它們應該分別代表著相關性(完全正負相關——對角線、稍強正負相關——橢圓、無關——圓)等參數(shù)的改變對應的模型,研究清楚這些又是非常復雜的問題了,先按下表,知道BIC值越大則說明所選取的變量集合擬合效果越好。上圖中除了兩個模型一直遞增,其他的12模型數(shù)基本上都是在聚類數(shù)目為3的時候達到峰值,所以該算法由此得出最佳聚類數(shù)目為3的結論。mclust包還可以用于分類、密度估計等,這個包值得好好把玩。注意:此BIC并不是貝葉斯信息準則?。?!最近上課老師講金融模型時提到了BIC值,說BIC值越小模型效果越好,頓時想起這里是在圖中BIC極大值為最佳聚類數(shù)目,然后和老師探討了這個問題,之前這里誤導大家了,Mclust包里面的BIC并不是貝葉斯信息準則。1.維基上的貝葉斯信息準則定義與log(likelihood)成反比,極大似然估計是值越大越好,那么BIC值確實是越小模型效果越好2.Mclust包中的BIC定義[3]這是Mclust包里面作者定義的“BIC值”,此BIC非彼BIC,這里是作者自己定義的BIC,可以看到,這里的BIC與極大似然估計是成正比的,所以這里是BIC值越大越好,與貝葉斯信息準則值越小模型越好的結論并不沖突2.Nbclust包Nbclust包是我在《R語言實戰(zhàn)》上看到的一個包,思想和mclust包比較相近,也是定義了幾十個評估指標,然后聚類數(shù)目從2遍歷到15(自己設定),然后通過這些指標看分別在聚類數(shù)為多少時達到最優(yōu),最后選擇指標支持數(shù)最多的聚類數(shù)目就是最佳聚類數(shù)目。可以看到有16個指標支持最佳聚類數(shù)目為3,5個指標支持聚類數(shù)為2,所以該方法推薦的最佳聚類數(shù)目為3.3.組內平方誤差和——拐點圖想必之前動輒幾十個指標,這里就用一個最簡單的指標——sumofsquarederror(SSE)組內平方誤差和來確定最佳聚類數(shù)目。這個方法也是出于《R語言實戰(zhàn)》,自定義的一個求組內誤差平方和的函數(shù)。隨著聚類數(shù)目增多,每一個類別中數(shù)量越來越少,距離越來越近,因此WSS值肯定是隨著聚類數(shù)目增多而減少的,所以關注的是斜率的變化,但WWS減少得很緩慢時,就認為進一步增大聚類數(shù)效果也并不能增強,存在得這個“肘點”就是最佳聚類數(shù)目,從一類到三類下降得很快,之后下降得很慢,所以最佳聚類個數(shù)選為三另外也有現(xiàn)成的包(factoextra)可以調用選定為3類為最佳聚類數(shù)目用該包下的fviz_cluster函數(shù)可視化一下聚類結果4.PAM(PartitioningAroundMedoids)圍繞中心點的分割算法k-means算法取得是均值,那么對于異常點其實對其的影響非常大,很可能這種孤立的點就聚為一類,一個改進的方法就是PAM算法,也叫k-medoidsclustering首先通過fpc包中的pamk函數(shù)得到最佳聚類數(shù)目3pamk函數(shù)不需要提供聚類數(shù)目,也會直接自動計算出最佳聚類數(shù),這里也得到為3得到聚類數(shù)提供給cluster包下的pam函數(shù)并進行可視化5.Calinskycriterion這個評估標準定義[5]如下:其中,k是聚類數(shù),N是樣本數(shù),SSw是我們之前提到過的組內平方和誤差,SSb是組與組之間的平方和誤差,SSw越小,SSb越大聚類效果越好,所以Calinskycriterion值一般來說是越大,聚類效果越好可以看到該函數(shù)把組內平方和誤差和Calinsky都計算出來了,可以看到calinski在聚類數(shù)為3時達到最大值。3畫圖出來觀察一下注意到那個紅點就是對應的最大值,自帶的繪圖橫軸縱軸取的可能不符合我們的直覺,把數(shù)據(jù)取出來自己單獨畫一下這個看上去直觀多了。這就很清晰的可以看到在聚類數(shù)目為3時,calinski指標達到了最大值,所以最佳數(shù)目為36.Affinitypropagation(AP)clustering這個本質上是類似kmeans或者層次聚類一樣,是一種聚類方法,因為不需要像kmeans一樣提供聚類數(shù),會自動算出最佳聚類數(shù),因此也放到這里作為一種計算最佳聚類數(shù)目的方法。AP算法的基本思想是將全部樣本看作網(wǎng)絡的節(jié)點,然后通過網(wǎng)絡中各條邊的消息傳遞計算出各樣本的聚類中心。聚類過程中,共有兩種消息在各節(jié)點間傳遞,分別是吸引度(responsibility)和歸屬度(availability)。AP算法通過迭代過程不斷更新每一個點的吸引度和歸屬度值,直到產生m個高質量的Exemplar(類似于質心),同時將其余的數(shù)據(jù)點分配到相應的聚類中[7]15該聚類方法推薦的最佳聚類數(shù)目為15,再用熱力圖可視化一下選x或者y方向看(對稱),可以數(shù)出來“葉子節(jié)點”一共15個7.輪廓系數(shù)Averagesilhouettemethod輪廓系數(shù)是類的密集與分散程度的評價指標。a(i)是測量組內的相似度,b(i)是測量組間的相似度,s(i)范圍從-1到1,值越大說明組內吻合越高,組間距離越遠——也就是說,輪廓系數(shù)值越大,聚類效果越好[9]可以看到也是在聚類數(shù)為3時輪廓系數(shù)達到了峰值,所以最佳聚類數(shù)為38.GapStatistic之前我們提到了WSSE組內平方和誤差,該種方法是通過找“肘點”來找到最佳聚類數(shù),肘點的選擇并不是那么清晰,因此斯坦福大學的Robert等教授提出了GapStatistic方法,定義的Gap值為[9]取對數(shù)的原因是因為Wk的值可能很大通過這個式子來找出Wk跌落最快的點,Gap最大值對應的k值就是最佳聚類數(shù)可以看到也是在聚類數(shù)為3的時候gap值取到了最大值,所以最佳聚類數(shù)為39.層次聚類層次聚類是通過可視化然后人為去判斷大致聚為幾類,很明顯在共同父節(jié)點的一顆子樹可以被聚類為一個類10.clustergram最后一種算法是TalGalili[10]大牛自己定義的一種聚類可視化的展示,繪制隨著聚類數(shù)目的增加,所有成員是如何分配到各個類別的。該代碼沒有被制作成R包,可以去Galili介紹頁面)里面的github地址找到源代碼跑一遍然后就可以用這個函數(shù)了,因為源代碼有點長我就不放博客里面了,直接放出運行代碼的截圖。隨著K的增加,從最開始的兩類到最后的八類,圖肯定是越到后面越密集。通過這個圖判斷最佳聚類數(shù)目的方法應該是看隨著K每增加1,分出來的線越少說明在該k值下越穩(wěn)定。比如k=7到k=8,假設k=7是很好的聚類數(shù),那分成8類時應該可能只是某一類分成了兩類,其他6類都每怎么變。反應到圖中應該是有6簇平行線,有一簇分成了兩股,而現(xiàn)在可以看到從7到8,線完全亂了,說明k=7時效果并不好。按照這個分析,k=3到k=4時,第一股和第三股幾本沒變,就第二股拆成了2類,所以k=3是最佳聚類數(shù)目方法匯總與比較wine數(shù)據(jù)集我們知道其實是分為3類的,以上10種判定方法中:可見上述方法中有的因為數(shù)據(jù)太大不能運行,有的結果很明顯不對,一個可能是數(shù)據(jù)集的本身的原因(缺失值太多等),但是也告訴了我們在確定最佳聚類數(shù)目的時候需要多嘗試幾種方法,并沒有固定的套路,然后選擇一種可信度較高的聚類數(shù)目。最后再把這10種方法總結一下: