作者:xiaoyi
來源:小一的學習筆記
模型評估前面已經介紹了兩種,分別對應分類問題:分類問題的 8 種評估方法 和回歸問題:回歸問題的3個評估深坑。
今天介紹最後一種:聚類模型。「人以類聚,物以群分」,想必大家對於聚類模型都不陌生吧。
舉個簡單的例子:在中國的鄉村有這樣一個現象,一個村子的姓氏大多相同,不同村子有不同的姓氏。
那如果現在把王家村、李家村、趙家村的所有人都聚集在一起,前提是不知道他們是哪個村子的,如何對他們進行分類?
特性①:姓名,通過姓氏進行聚類,最終成三類:王+李+趙+其它特性②:性別,通過性別進行聚類,最終成兩類:男+女特性③:年齡,通過年齡進行聚類,最終成三類:兒童+青年+老年特性④:價值,通過價值進行聚類,最終成三類:高收入+中收入+低收入特性⑤:屬性,通過屬性進行聚類,最終成三類:村領導+村幹部+村民上面的姓氏、性別、年齡、價值和屬性等都是村民的內在性質(人物特徵),這樣的內在性質有很多,也就決定了聚類的標準並不唯一。
在聚類算法中,有這樣一個經常問的問題:
問:如何衡量聚類算法的效果?
答:聚類模型的標準不是某種標籤輸出,根據特徵選取的不同聚類的結果也會發生變化,並沒有一個永遠標準的的答案。
上面我們提到,無法評估聚類效果是因為沒有可供參考的真實結果,那如果有呢?
如果有的話,其實完全可以當作分類問題去看待,因為你有樣本數據,有樣本標籤,更適合做分類
如果我偏要用這個數據做聚類呢?怎麼評估聚類效果?
當我們 有樣本真實聚類情況的數據,我們可以對於聚類算法的結果和真實結果來衡量聚類的效果。一般有以下三種方法:
以下了解即可,不常用
▶1 . 調整蘭德指數調整蘭德指數:Adjusted Rand Index 簡稱 ARI,是蘭德係數 RI 的優化,解決了 RI 不能很好的描述隨機分配簇類標記向量的相似度問題,而 RI 反映兩種劃分的重疊程度。
ARI 的取值在 (-1,1) 之間,負值象徵著簇內的點差異巨大,正值則表示預測值和真實值差別較小。
即,ARI 越接近 1 越好。
在 sklearn 中,可以通過調用 metrics 模塊下的方法計算 ARI,代碼如下:
from sklearn.metrics import adjusted_rand_score
# 計算 ARI
adjusted_rand_score([0,0,0,1,1,1], [0,0,1,1,2,2])
# 輸出
0.24242424242424246
▶2. 調整互信息分調整互信息分:Adjusted mutual info score 簡稱 AMI,是互信息分 MI 的優化,MI 隨著分配簇的個數增加而增加。
AMI 是基於預測簇向量與真實簇向量的互信息分數來衡量其相似度的,AMI 越大相似度越高,AMI 接近於0 表示簇向量是隨機分配的。
即,AMI 越接近 1 越好。
同樣,在 sklearn 中,可以通過調用 metrics 模塊下的方法計算,代碼如下:
from sklearn.metrics import adjusted_mutual_info_score
# 計算 AMI
adjusted_mutual_info_score([0,0,0,1,1,1], [0,0,1,1,2,2])
# 輸出
0.29879245817089006
▶3. 同質性、完整性和 V-measure同質性和完整性是 基於條件熵 的互信息分數來衡量簇向量間的相似度,V-meansure 是同質性和完整性的調和平均。
同質性:homogeneity,指的是每個簇只包含單個類成員。其實也可以認為就是正確率,表示每個聚類簇中正確分類的樣本數佔該聚類簇總樣本數的比例和;
完整性:completeness,給定類的所有成員分配給同一類簇,也就是每個聚類簇中正確分類的樣本數佔類型的總樣本數比例的和。
V-measure 是結合同質性和完整性兩個因素來評價簇向量間的相似度,V-measure 越接近 1 越好。
同樣的,給代碼:
from sklearn.metrics import homogeneity_score
# 計算 V-measure
homogeneity_score([0,0,0,1,1,1], [0,0,1,1,2,2])
# 輸出
0.6666666666666669
無樣本聚類標籤的評估上面說的三種評估方法對應的都是真實標籤已知的情況,實際項目中需要聚類的樣本數據 99% 都是沒有真實標籤的。
那麼,對於真實標籤未知的情況,應該怎麼去評估預測的性能呢?
▶1. 輪廓係數輪廓係數是最常用的聚類算法的評價指標,它可以通過計算:
其中,樣本與同一簇中所有其他點之間的平均距離=a,樣本與下一個最近的簇中的所有點之間的平均距離=b
通過以下公式計算輪廓係數:
我們知道,聚類的標準是:簇內差異小,簇間差異大。而輪廓係數 s 越接近 1,表示樣本與自己所在簇中的樣本很相似,並且與其他簇中的樣本不相似,即聚類效果越好;負數則表示聚類效果非常差。
需要注意,輪廓係數範圍是(-1,1)
在 sklearn 中,通過使用模塊 metrics 中的 silhouette_score 來計算輪廓係數,代碼如下:
from sklearn.metrics import silhouette_score
# 計算輪廓係數
silhouette_score(X, y_pred)代碼中的 X 表示樣本數據,pre_labels 表示聚類之後的預測。最終返回的是一個數據集中,所有樣本的輪廓係數的均值。
▶2. CHICHI 全稱 Calinski-Harabaz Index,譯為卡林斯基-哈拉巴斯指數,最終的得分定義為 組間分散度與組內分散度的比值。
CHI 的計算公式如下:
其中 m 為訓練集樣本數,k為聚簇個數。Bk 為簇間的協方差矩陣,Wk 為簇內的協方差矩陣,tr 為矩陣的跡。
綜上,當簇間差異越大,簇內差異越小,即聚類效果越好的時候,輪廓係數越大。
即:輪廓係數越高表示聚類效果越好。
使用代碼如下:
from sklearn.metrics import calinski_harabaz_score
# 計算 CHI
calinski_harabaz_score(X, y_pred)因為計算方式的原因,CHI 的計算比輪廓係數快了一倍多,所以在選擇評價標準的時候可以優先選擇 CHI。
總結一下常見的模型評估方法就算是介紹完了,總算鬆了一口氣,趕緊總結一下:
在分類模型中,有直接結果的輸出,而且對於結果我們有明確的定義:是or否,所以我們可以使用預測的 準確度、召回率、混淆矩陣、roc 曲線 等指標來進行評估。
在回歸模型中,同樣也有直接結果的輸出,對於預測結果和真實結果的誤差可以用 平均均方誤差、平均絕對誤差、r2 score 等指標進行評估。
在聚類模型中,當有樣本真實標籤時可通過 蘭德係數、互信息分 等指標評估,但大多數情況下聚類樣本是沒有標籤的,此時可以通過 輪廓係數、CHI 等指標進行評估。
另外,分類模型評估比較常見,而且在金融風控領域對於 ROC 使用的比較多,後面抽空再分享一下 ROC 的評估過程。
數據森麟公眾號的交流群已經建立,許多小夥伴已經加入其中,感謝大家的支持。大家可以在群裡交流關於數據分析&數據挖掘的相關內容,還沒有加入的小夥伴可以掃描下方管理員二維碼,進群前一定要關注公眾號奧,關注後讓管理員幫忙拉進群,期待大家的加入。
管理員二維碼: