熱線電話:13121318867

登錄
首頁精彩閱讀python實現六大分群質量評估指標(蘭德系數、互信息、輪廓系數)
python實現六大分群質量評估指標(蘭德系數、互信息、輪廓系數)
2017-05-19
收藏

python實現六大分群質量評估指標(蘭德系數、互信息、輪廓系數)

1 R語言中的分群質量——輪廓系數
因為先前慣用R語言,那么來看看R語言中的分群質量評估,節選自筆記︱多種常見聚類模型以及分群質量評估(聚類注意事項、使用技巧):
沒有固定標準,一般會3-10分群?;蛘哂靡恍┲笜嗽u價,然后交叉驗證不同群的分群指標。
一般的指標:輪廓系數silhouette(-1,1之間,值越大,聚類效果越好)(fpc包),蘭德指數rand;R語言中有一個包用30種方法來評價不同類的方法(NbClust),但是速度較慢
商業上的指標:分群結果的覆蓋率;分群結果的穩定性;分群結果是否從商業上易于理解和執行
輪廓系數旨在將某個對象與自己的簇的相似程度和與其他簇的相似程度進行比較。輪廓系數最高的簇的數量表示簇的數量的最佳選擇。

一般來說,平均輪廓系數越高,聚類的質量也相對較好。在這,對于研究區域的網格單元,最優聚類數應該是2,這時平均輪廓系數的值最高。但是,聚類結果(k=2)的 SSE 值太大了。當 k=6 時,SEE 的值會低很多,但此時平均輪廓系數的值非常高,僅僅比 k=2 時的值低一點。因此,k=6 是最佳的選擇。
2 python中的分群質量
主要參考來自官方文檔:Clustering
部分內容來源于:機器學習評價指標大匯總
個人比較偏好的三個指標有:Calinski-Harabaz Index(未知真實index的模型評估)、Homogeneity, completeness and V-measure(聚類數量情況)、輪廓系數
1.1 Adjusted Rand index 調整蘭德系數

>>> from sklearn import metrics
>>> labels_true = [0, 0, 0, 1, 1, 1]
>>> labels_pred = [0, 0, 1, 1, 2, 2]

>>> metrics.adjusted_rand_score(labels_true, labels_pred)  
0.24
1.2 Mutual Information based scores 互信息

Two different normalized versions of this measure are available, Normalized Mutual Information(NMI) and Adjusted Mutual Information(AMI). NMI is often used in the literature while AMI was proposed more recently and is normalized against chance:

>>> from sklearn import metrics
>>> labels_true = [0, 0, 0, 1, 1, 1]
>>> labels_pred = [0, 0, 1, 1, 2, 2]

>>> metrics.adjusted_mutual_info_score(labels_true, labels_pred)  
0.22504
  
1.3 Homogeneity, completeness and V-measure
同質性homogeneity:每個群集只包含單個類的成員。
完整性completeness:給定類的所有成員都分配給同一個群集。
>>> from sklearn import metrics
>>> labels_true = [0, 0, 0, 1, 1, 1]
>>> labels_pred = [0, 0, 1, 1, 2, 2]

>>> metrics.homogeneity_score(labels_true, labels_pred)  
0.66...

>>> metrics.completeness_score(labels_true, labels_pred)
0.42...
兩者的調和平均V-measure:
>>> metrics.v_measure_score(labels_true, labels_pred)    
0.51...
1.4 Fowlkes-Mallows scores
The Fowlkes-Mallows score FMI is defined as the geometric mean of the pairwise precision and recall:

>>> from sklearn import metrics
>>> labels_true = [0, 0, 0, 1, 1, 1]
>>> labels_pred = [0, 0, 1, 1, 2, 2]
>>>
>>> metrics.fowlkes_mallows_score(labels_true, labels_pred)  
0.47140...
1.5 Silhouette Coefficient 輪廓系數

>>> import numpy as np
>>> from sklearn.cluster import KMeans
>>> kmeans_model = KMeans(n_clusters=3, random_state=1).fit(X)
>>> labels = kmeans_model.labels_
>>> metrics.silhouette_score(X, labels, metric='euclidean')
...                                                      
0.55...
1.6 Calinski-Harabaz Index
這個計算簡單直接,得到的Calinski-Harabasz分數值ss越大則聚類效果越好。Calinski-Harabasz分數值ss的數學計算公式是:

 也就是說,類別內部數據的協方差越小越好,類別之間的協方差越大越好,這樣的Calinski-Harabasz分數會高。
 在scikit-learn中, Calinski-Harabasz Index對應的方法是metrics.calinski_harabaz_score.
在真實的分群label不知道的情況下,可以作為評估模型的一個指標。
同時,數值越小可以理解為:組間協方差很小,組與組之間界限不明顯。
與輪廓系數的對比,筆者覺得最大的優勢:快!相差幾百倍!毫秒級
>>> import numpy as np
>>> from sklearn.cluster import KMeans
>>> kmeans_model = KMeans(n_clusters=3, random_state=1).fit(X)
>>> labels = kmeans_model.labels_
>>> metrics.calinski_harabaz_score(X, labels)  
560.39...

數據分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數據分析師資訊
更多

OK
客服在線
立即咨詢
日韩人妻系列无码专区视频,先锋高清无码,无码免费视欧非,国精产品一区一区三区无码
客服在線
立即咨詢