聚類問題的 5 種評估手段,總有一種你不知道的!附代碼實現

2021-02-13 數據森麟


作者: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. CHI

CHI 全稱 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 的評估過程。


數據森麟公眾號的交流群已經建立,許多小夥伴已經加入其中,感謝大家的支持。大家可以在群裡交流關於數據分析&數據挖掘的相關內容,還沒有加入的小夥伴可以掃描下方管理員二維碼,進群前一定要關注公眾號奧,關注後讓管理員幫忙拉進群,期待大家的加入。

管理員二維碼:

相關焦點

  • K-means 聚類算法及其代碼實現
    K-means聚類算法的思想,同時給出在matlab環境中實現K-means算法的代碼。這個問題有一些難點,在於我們並不知道<script type="math/tex" id="MathJax-Element-1937">K</script>選擇多大時分類是合適的,另外由於這個問題對初始點的選擇是敏感的,我們也不好判斷怎麼樣的初始點是好的。
  • K-Means聚類講解:算法和Sklearn的實現(附代碼)
    而向客戶提出錯誤的業務策略可能意味著失去該客戶,因此,重要的一點是我們必須實現良好的市場集群。什麼是無監督機器學習無監督機器學習是一種機器學習算法,試圖在沒有任何先驗知識的情況下推斷數據中的模式。與之相反的是有監督的機器學習,這裡我們有一個訓練集,該算法將嘗試通過將輸入與預定義的輸出進行匹配來查找數據中的模式。
  • 數據科學家們必須知道的5種聚類算法
    翻譯 | 姜波    整理 |  凡江  吳璇聚類是一種關於數據點分組的機器學習技術。給出一組數據點,我們可以使用聚類算法將每個數據點分類到特定的組中。理論上,同一組中的數據點應具有相似的屬性或特徵,而不同組中的數據點應具有相當不同的屬性或特徵(即類內差異小,類間差異大)。聚
  • 不足 20 行 Python 代碼,高效實現 k-means 均值聚類算法!
    k-means均值算法雖然是聚類算法中比較簡單的一種,卻包含了豐富的思想內容,非常適合作為初學者的入門習題。關於 k-means 均值聚類算法的原理介紹、實現代碼,網上有很多,但運行效率似乎都有點問題。今天稍微有點空閒,寫了一個不足20行的 k-means 均值聚類算法,1萬個樣本平均耗時20毫秒(10次均值)。同樣的數據樣本,網上流行的算法平均耗時3000毫秒(10次均值)。
  • 如何使用 Keras 實現無監督聚類
    聚類分析,或者稱作聚類是一種無監督的機器學習技術。它不需要有標籤的數據集。它可以根據數據成員的相似性對它們進行分組。你為什麼需要關注它呢?讓我來講講幾個理由。它可以幫助你找到志趣相投的用戶,以及相關商品。在生物學上,序列聚類算法試圖將相關的生物序列進行分組。它根據胺基酸含量對蛋白進行聚類。圖像和視頻聚類分析根據相似性對它們進行分組。在醫療資料庫中,對每個病人來說,真正有價值的測試(比如葡萄糖,膽固醇)都是不同的。
  • 三種聚類方法的介紹及其R語言實現
    聚類分析法是研究「物以類聚」的一種現代統計分析方法,在眾多的領域中,都需要採用聚類分析作分類研究。聚類分析的類型包括兩種Q型聚類(對樣品聚類)、R型聚類(對變量聚類)。以R語言中rattle程序包裡的wine數據集為例,根據178種義大利葡萄酒中的13種化學成分對葡萄酒進行聚類分析,然後與真實值進行比較。在系統聚類中選擇最長距離法,聚類為3類,根據該聚類個數畫出最終的聚類結果為:並且在聚類結果中顯示有68瓶葡萄酒歸為了第一類,58瓶葡萄酒歸為第二類,51瓶葡萄酒歸為第三類。
  • ...分類與聚類:三大方向剖解機器學習算法的優缺點(附Python和R實現)
    雖然類似的總結有很多,但是它們都沒有真正解釋清楚每個算法在實踐中的好壞,而這正是本篇梳理希望完成的。因此本文力圖基於實踐中的經驗,討論每個算法的優缺點。而機器之心也在文末給出了這些算法的具體實現細節。對機器學習算法進行分類不是一件容易的事情,總的來看,有如下幾種方式:生成與判別、參數與非參數、監督與非監督等等。
  • 獨家 | 使用高斯混合模型,讓聚類更好更精確(附數據&代碼&學習資源)
    但問題是,聚類有很多種,不只局限於我們之前學過的基本算法。它是一種我們可以在現實世界中準確無誤地使用的強大的無監督學習技術。「高斯混合模型是我在本文中即將要討論的一種聚類算法。」想要預測你最喜歡的產品銷售量嗎?或者你想要通過不同客戶群體的視角來剖析客戶流失。不管是什麼應用場景,你都會發現高斯混合模型是非常有用的。本文將採用自下而上的方法。
  • k均值聚類算法原理和(TensorFlow)實現(無師自通)
    我們知道,在機器學習中,有三種不同的學習模式:監督學習、無監督學習和強化學習:監督學習,也稱為有導師學習,網絡輸入包括數據和相應的輸出標籤信息。例如,在 MNIST 數據集中,手寫數字的每個圖像都有一個標籤,代表圖片中的數字值。
  • 你需要的最全面的K-means聚類指南
    在形式上,我們可以說:聚類是基於數據中的模式將整個數據劃分為組(也稱為簇)的過程。你能猜出聚類是哪種類型的學習問題嗎?這是一個有監督還是無監督的學習問題嗎?考慮一下,並利用我們剛才看到的例子。是的,聚類是一種無監督的學習問題!
  • 機器學習模型評估指標Python代碼示例
    在本文中,我試圖製作機器學習模型評估指標的總結。交叉驗證用於模型比較我們拆分數據的原因和方式的起點是泛化。因為我們構建機器學習模型的目標是使用未來未知數據的真實實現。因此,我們不需要過度擬合過去數據的無用模型。
  • 5 分鐘帶你弄懂 K-means 聚類
    今天為大家帶來一種常用的聚類算法——k-means 聚類,本著專業問題通俗化的原則,小飛力求5分鐘帶你弄懂 k-means 聚類。分類:類別是已知的,通過對已知類別的數據進行訓練和學習,找到這些不同類的特徵,再對未知類別的數據進行分類。屬於監督學習。聚類:事先不知道數據會分為幾類,通過聚類分析將數據聚合成幾個群體。聚類不需要對數據進行訓練和學習。屬於無監督學習。
  • R語言實現常用的5種分析方法(主成分+因子+多維標度+判別+聚類)
    進行EFA需要大量的樣本,一般經驗認為如何估計因子的數目為N,則需要有5N到10N的樣本數目。雖然EFA和PCA有本質上的區別,但在分析流程上有相似之處。下面我們用ability.cov這個心理測量數據舉例,其變量是對人的六種能力,例如閱讀和拼寫能力進行了測驗,其數據是一個協方差矩陣而非原始數據。
  • 數據科學中必須熟知的5種聚類算法
    在給定的數據集中,我們可以通過聚類算法將其分成一些不同的組。在理論上,相同的組的數據之間有相同的屬性或者是特徵,不同組數據之間的屬性或者特徵相差就會比較大。聚類算法是一種非監督學習算法,並且作為一種常用的數據分析算法在很多領域上得到應用。在數據科學領域,我們利用聚類分析,通過將數據分組可以比較清晰的獲取到數據信息。
  • 【他山之石】DBSCAN密度聚類算法(理論+圖解+python代碼)
    作者:風弦鶴CSDN博客地址:https://blog.csdn.net/huacha__/article/details/81094891本文主要內容:1、前言2、DBSCAN聚類算法3、參數選擇4、DBSCAN算法迭代可視化展示5、常用評估方法:輪廓係數
  • R語言實現常用的5種分析方法(主成分+因子+多維標度+判別+聚類
    進行EFA需要大量的樣本,一般經驗認為如何估計因子的數目為N,則需要有5N到10N的樣本數目。 雖然EFA和PCA有本質上的區別,但在分析流程上有相似之處。下面我們用ability.cov這個心理測量數據舉例,其變量是對人的六種能力,例如閱讀和拼寫能力進行了測驗,其數據是一個協方差矩陣而非原始數據。
  • K-Means聚類算法詳解
    學習算法的過程,獲得的不應該只有算法理論,還應該有樂趣和解決實際問題的能力!今天是白話機器學習算法理論+實戰的第八篇 之KMeans聚類算法, 聽到這個名字,你可別和第七篇K近鄰算法搞混了,K-Means 是一種非監督學習,解決的是聚類問題,這裡的K表示的是聚成K類。而之前的K近鄰算法是監督學習算法,解決的是分類問題,這裡的K表示的是K個鄰居。相差十萬八千裡吧, 一條取經路呢。一定要區分開。
  • 一文詳解聚類和降維(附實例、代碼)
    我們可以怎樣最有用地對其進行歸納和分組?我們可以怎樣以一種壓縮格式有效地表徵數據?這都是無監督學習的目標,之所以稱之為「無監督」,是因為這是從無標籤的數據開始學習的。工具中回答幾個簡單問題,你就能知道你個人屬於哪個聚類,體驗地址:https://isapps.acxiom.com/personicx/personicx.aspx讓我們了解幾種聚類方法,看看這樣的任務是如何完成的。1. K 均值聚類「重心之賽有 k 個魔戒,在那之上,是希望的力量。」
  • K均值聚類算法-Matlab代碼
    一、K均值聚類算法算法步驟如下:1、初始化已知數據集合X,及事先指定聚類的總類數N,在X中隨機選取N個對象作為初始的聚類中心。5、重複步驟3~4,滿足步驟2中的迭代終止條件時,停止Matlab代碼見下圖:K均值聚類算法-Matlab代碼二、K均值聚類算法應用舉例1、隨機生成三組數據隨機生成的三組數據
  • 深度剖析:數據科學家需懂的5種聚類算法
    【IT168 資訊】聚類是一種涉及數據點分組的機器學習技術。給定一組數據點,我們可以使用聚類算法將每個數據點分類到一個特定的組中。理論上,屬於同一組的數據點應具有相似的屬性和特徵,而不同組中的數據點應具有高度不同的屬性和特徵。聚類是無監督學習的一種方法,是在許多領域使用統計數據分析的常用技術。