聚類效果評估指標總結

前言

實際工作中經常會用到一些聚類算法對一些數據進行聚類處理,如何評估每次聚類效果的好壞?可選的方法有1、根據一些聚類效果的指標來評估;2、直接打點。今天就主要總結下這段時間了解的聚類效果評估指標。廢話少說,直接上干貨。

針對數據有類別標簽的情況

Adjusted Rand index (ARI)

優點:
1.1 對任意數量的聚類中心和樣本數,隨機聚類的ARI都非常接近于0;
1.2 取值在[-1,1]之間,負數代表結果不好,越接近于1越好;
1.3 可用于聚類算法之間的比較
缺點:
1.4 ARI需要真實標簽

Mutual Information based scores (MI) 互信息

優點:除取值范圍在[0,1]之間,其他同ARI;可用于聚類模型選擇
缺點:需要先驗知識

針對數據無類別標簽的情況

對于無類標的情況,沒有唯一的評價指標。對于數據凸分布的情況我們只能通過類內聚合度、類間低耦合的原則來作為指導思想。

輪廓系數(Silhouette Coefficient)

定義
輪廓系數(Silhouette Coefficient),是聚類效果好壞的一種評價方式。最早由 Peter J. Rousseeuw 在 1986 提出。它結合內聚度和分離度兩種因素。可以用來在相同原始數據的基礎上用來評價不同算法、或者算法不同運行方式對聚類結果所產生的影響。

原理

(1)計算樣本i到同簇其他樣本的平均距離ai。ai 越小,說明樣本i越應該被聚類到該簇。將ai 稱為樣本i的簇內不相似度。某一個簇C中所有樣本的a i 均值稱為簇C的簇不相似度

(2)計算樣本i到其他某簇Cj 的所有樣本的平均距離bij,稱為樣本i與簇Cj 的不相似度。定義為樣本i的簇間不相似度:bi =min{bi1, bi2, …, bik},即某一個樣本的簇間不相似度為該樣本到所有其他簇的所有樣本的平均距離中最小的那一個。
bi越大,說明樣本i越不屬于其他簇。

(3)根據樣本i的簇內不相似度a i 和簇間不相似度b i ,定義某一個樣本樣本i的輪廓系數:在這里插入圖片描述
樣例圖:
在這里插入圖片描述
如上圖所示,最終整個數據的輪廓系數=每個樣本輪廓系數之和/n(即所有樣本輪廓系數的平均值)

(4)判斷:
si接近1,則說明樣本i聚類合理;
si接近-1,則說明樣本i更應該分類到另外的簇;
若si 近似為0,則說明樣本i在兩個簇的邊界上。

(5) 所有樣本的輪廓系數S

所有樣本的s i 的均值稱為聚類結果的輪廓系數,定義為S,是該聚類是否合理、有效的度量。聚類結果的輪廓系數的取值在【-1,1】之間,值越大,說明同類樣本相距約近,不同樣本相距越遠,則聚類效果越好

優缺點總結
優點:
對于不正確的 clustering (聚類),分數為 -1 , highly dense clustering (高密度聚類)為 +1 。零點附近的分數表示 overlapping clusters (重疊的聚類)。
當 clusters (簇)密集且分離較好時,分數更高,這與 cluster (簇)的標準概念有關。
缺點:
convex clusters(凸的簇)的 Silhouette Coefficient 通常比其他類型的 cluster (簇)更高,例如通過 DBSCAN 獲得的基于密度的 cluster(簇)。不適用與基于密度的算法

使用:
sklearn中的接口

輪廓系數以及其他的評價函數都定義在sklearn.metrics模塊中,

在sklearn中函數silhouette_score()計算所有點的平均輪廓系數,而silhouette_samples()返回每個點的輪廓系數。后面會給出具體的例子的。它的定義如下:


def silhouette_score(X, labels, metric='euclidean', sample_size=None,
random_state=None, **kwds):
'''
X:表示要聚類的樣本數據,一般形如(samples,features)的格式
labels:即聚類之后得到的label標簽,形如(samples,)的格式
metric:默認是歐氏距離
'''

CH分數(Calinski Harabasz Score )

原理:
也稱之為 Calinski-Harabaz Index
分數S被定義為簇間離散與簇內離散的比率,是通過評估類之間方差和類內方差來計算得分。該分值越大說明聚類效果越好
在這里插入圖片描述
其中k代表聚類類別數,N代表全部數據數目。
n是樣本點數,cq是在聚類q中的樣本點,Cq是在聚類q中的中心點,nq是聚類q中的樣本點數量,c是E的中心(E是所有的數據集)

trace只考慮了矩陣對角上的元素,即類q中所有數據點到類q中心點的歐幾里得距離。

類別內部數據的協方差越小越好,類別之間的協方差越大越好,這樣的Calinski-Harabasz分數會高。 總結起來一句話:CH index的數值越大越好。

在真實的分群label不知道的情況下,可以作為評估模型的一個指標。 同時,數值越小可以理解為:組間協方差很小,組與組之間界限不明顯。
與輪廓系數的對比,最大的優勢:快!相差幾百倍!毫秒級(原因:可能是計算簇間,簇內不相似度對應的數據量和計算復雜度不同。CH有中心點,只需要計算簇內點到中心點的距離即可,簇間有整個樣本的中點,只需要計算各簇中心點到整個樣本的中心點即可;而輪廓系數則需要在簇內計算樣本i到同簇其他所有樣本的平均距離等。一個是固定中心點計算,一個是沒有中心點,計算所有的樣本點距離。)

優缺點總結
優點
當 cluster (簇)密集且分離較好時,分數更高,這與一個標準的 cluster(簇)有關。
得分計算很快。

缺點
凸的簇的 Calinski-Harabaz index(Calinski-Harabaz 指數)通常高于其他類型的 cluster(簇),例如通過 DBSCAN 獲得的基于密度的 cluster(簇)。

使用
在sklearn中的接口

在scikit-learn中, Calinski-Harabasz Index對應的方法是metrics.calinski_harabaz_score. 它的定義如下:

def calinski_harabasz_score(X, labels):
'''
X:表示要聚類的樣本數據,一般形如(samples,features)的格式
labels:即聚類之后得到的label標簽,形如(samples,)的格式

戴維森堡丁指數(DBI)——davies_bouldin_score

定義
戴維森堡丁指數(DBI),又稱為分類適確性指標,是由大衛L·戴維斯和唐納德·Bouldin提出的一種評估聚類算法優劣的指標

原理
DB計算任意兩類別的類內距離平均距離(CP)之和除以兩聚類中心距離求最大值。DB越小意味著類內距離越小同時類間距離越大
缺點:因使用歐式距離 所以對于環狀分布 聚類評測很差在這里插入圖片描述
分子:簇內所有點到該簇質心點的平均距離之和
分母d(ci,cj):兩類別質心間的距離
max()最大值部分:選取每組比例中的最大值(即選取最糟糕的一組)
1/n求和部分:將所選比例加和除以類別數
結果意義:DB值越小表示聚類結果同簇內部緊密,不同簇分離較遠。即類內距離越小,類間距離越大

實例
在這里插入圖片描述
具體過程:
step1:計算每個聚類d(A),d(B),d?的平均內部距離。
step2:計算任意質心間的距離d(A,B),d(A,C)和d(B,C)。
step3:返回最大比例(任意內部聚類之和與其質心間距之比)

注意:DBI的值最小是0,值越小,代表聚類效果越好。

使用
DBI的sklearn中的定義:

def davies_bouldin_score(X, labels):
'''
X:表示要聚類的樣本數據,一般形如(samples,features)的格式
labels:即聚類之后得到的label標簽,形如(samples,)的格式

Compactness(緊密性)(CP)

在這里插入圖片描述在這里插入圖片描述
CP計算每一個類各點到聚類中心的平均距離CP越低意味著類內聚類距離越近。著名的 K-Means 聚類算法就是基于此思想提出的。
缺點:沒有考慮類間效果

Separation(間隔性)(SP)

在這里插入圖片描述
SP計算 各聚類中心兩兩之間平均距離,SP越高意味類間聚類距離越遠
缺點:沒有考慮類內效果

Dunn Validity Index (鄧恩指數)(DVI)

在這里插入圖片描述
DVI計算任意兩個簇元素的最短距離(類間)除以任意簇中的最大距離(類內)。 DVI越大意味著類間距離越大同時類內距離越小
缺點:對離散點的聚類測評很高、對環狀分布測評效果差

其他

其他的一些指標如:均一性(一個簇中只包含一個類別)和完整性(同類別被分到同簇中)就類似于之前半監督中的準確率和召回率。
V-measure:均一性和完整性的加權平均

兩個指標用來衡量分類效果:即ARI就相當于之前的F1,Fβ

總結

常用的聚類指標可能就是輪廓系數,CH分數,DBI等。針對不同的數據量,這些指標的計算效率會有差距。若數據量小都可以嘗試使用,但要注意各個指標的使用場景。若數據量大則建議使用CH分數,實測該指標的計算效率的確很高,至于原因就如前文所描述的那樣。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/456320.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/456320.shtml
英文地址,請注明出處:http://en.pswp.cn/news/456320.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

{%extends bootstrap/base.html%}的添加,使得其他block無法繼承

仙說{%extends "bootstrap/base.html"%}用法: 在base.html中調用一次即可,并且 {%extends "bootstrap/base.html"%} 要放在 最后頭!!最后頭!最后頭! base中不用再添加 {% block cont…

Vue.directive自定義指令

Vue除了內部指令&#xff0c;我們也可以定義一些屬于自己的指令&#xff0c;比如我們要定義一個v-diy的指令&#xff0c;作用就是讓文字變成紅色。 寫好了這個功能&#xff0c;我們現在就自己定義一個全局的指令。我們這里使用Vue.directive( ); html <div v-diy"color…

HTML5 SVG

SVG介紹1.什么是svgsvg指可伸縮矢量圖形&#xff08;Scalable Vector Graphics &#xff09;svg用來定義用于網絡的基于矢量圖形svg使用XML格式定義圖形svg圖像在放大或改變尺寸的情況下其圖形質量不會有損失svg是網為王聯盟的標準2.svg的優勢svg圖像可通過文本編輯器來創建和修…

運用Nginx代理和UWSGI將Flask項目部署在Linux中 詳細步驟

nginx: 安裝可以參照的路徑: http://nginx.org/en/linux_packages.html#Ubuntu 啟動Nginx nginx [ -c configpath] 默認配置目錄&#xff1a;/etc/nginx/nginx.conf 查看進程&#xff1a; ps -ef |grep nginx 控制Nginx nginx -s xxxstop 快速關閉quit …

機器學習算法之KNN

前言 KNN一般用于有監督的分類場景&#xff0c;除此之外&#xff0c;KNN在異常檢測場景中也有應用&#xff0c;下面主要介紹下KNN在這兩面的應用原理。 KNN做分類的原理 計算步驟如下&#xff1a; 1&#xff09;算距離&#xff1a;給定測試對象&#xff0c;計算它與訓練集中…

Supermap 組合單值專題圖與標簽專題圖演示樣例

效果圖例如以下&#xff1a;單值專題圖并顯示每一個區域的相關文字信息 代碼&#xff1a; <!DOCTYPE> <html> <head> <meta http-equiv"Content-Type" content"text/html; charsetutf-8" /> <title>單值專題圖</title>…

[劍指Offer] 25.復雜鏈表的復制

1 /*2 struct RandomListNode {3 int label;4 struct RandomListNode *next, *random;5 RandomListNode(int x) :6 label(x), next(NULL), random(NULL) {7 }8 };9 */ 10 class Solution 11 { 12 public: 13 //在舊鏈表中創建新鏈表&#xff0…

Flask項目中應用七牛云存儲

七牛云存儲&#xff1a; https://developer.qiniu.com/kodo/sdk/1242/python 點擊注冊開通七牛開發者帳號 如果已有賬號&#xff0c;直接登錄七牛開發者后臺&#xff0c;點擊這里查看 Access Key 和 Secret Key pip install qiniu q Auth(Access Key,Secret Key) b…

異常檢測算法之IForest

前言 IForest即孤立森林&#xff0c;可以用于做異常檢測。一句話總結IForest做異常檢測的原理&#xff1a;異常點密度小&#xff0c;基于樹模型容易被一下切割出來&#xff0c;正常值密度大&#xff0c;需要切割多次才能得到目標值。 原理 iForest算法得益于隨機森林的思想&…

JavaScript - 動態數據

1、使用ajax進行數據的請求 function getData(params){$.ajax({type: "POST", //提交方式data: "{params}", //請求參數url:, //請求接口contentType: "application/text;charsetutf-8",async: false, //是否同步dataType: &quo…

用c#編寫爬蟲在marinetraffic下載船僅僅圖片

近期在做船僅僅識別方面的事情&#xff0c;須要大量的正樣本來訓練adaboost分類器。于是到marinetraffic這個站點上下載船僅僅圖片。寫個爬蟲來自己主動下載顯然非常方便。 站點特點 在介紹爬蟲之前首先了解一下marinetraffic這個站點的一些特點&#xff1a; 1. 會定期檢測爬蟲…

發送手機驗證碼通過調用第三方網易云信API(flask項目)

一、 獲取驗證碼&#xff1a; 1. 輸入手機號碼 2. 通過ajax發送請求 3. 后端&#xff1a; 獲取手機號碼 使用requests向第三方的服務端&#xff08;網易云信&#xff09;發送請求 官方文檔 https://dev.yunxin.163.com/docs/product/%E7%9F%AD%E4%BF%A1/%E7%9F…

異常檢測算法之LOF

前言&#xff1a; LOF&#xff1a;Local outlier factor&#xff0c;即局部異常因子。LOF主要是通過比較每個點p和其鄰域點的密度來判斷該點是否為異常點&#xff0c;如果點p的密度越低&#xff0c;越可能被認定是異常點。至于密度&#xff0c;是通過點之間的距離來計算的&…

Android屬性動畫進階用法

2019獨角獸企業重金招聘Python工程師標準>>> 在上周二文章中介紹補間動畫缺點的時候有提到過&#xff0c;補間動畫是只能對View對象進行動畫操作的。而屬性動畫就不再受這個限制&#xff0c;它可以對任意對象進行動畫操作。那么大家應該還記得之前我舉的一個例子&am…

5.3linux下C語言socket網絡編程簡例

原創文章&#xff0c;轉載請注明轉載字樣和出處&#xff0c;謝謝&#xff01; 這里給出在Linux下的簡單socket網絡編程的實例&#xff0c;使用tcp協議進行通信&#xff0c;服務端進行監聽&#xff0c;在收到客戶端的連接后&#xff0c;發送數據給客戶端&#xff1b;客戶端在接受…

parser.add_argument驗證格式

article_bp Blueprint(article, __name__, url_prefix/api) api Api(article_bp) parser reqparse.RequestParser() parser.add_argument(name, typestr, help必須填寫名稱, requiredTrue) channel_fields { id: fields.Integer, cname: fields.String } clas…

異常檢測算法之HBOS

前言 HBOS&#xff08;Histogram-based Outlier Score&#xff09;核心思想&#xff1a;將樣本按照特征分成多個區間&#xff0c;樣本數少的區間是異常值的概率大。 原理 該方法為每一個樣本進行異常評分&#xff0c;評分越高越可能是異常點。評分模型為&#xff1a; 假設樣…

字典和json 的區別 和轉換

前言&#xff1a;字典和json非常像。接下來比較一下兩者的異同 先看一下字典的寫法&#xff1a; a {a:1,b:2,c:3} 再看一下json的寫法&#xff1a; {"studentInfo":{"id":123456,"stu_name":"Dorra"} } 從形式上看&#xff0c;都是…

Struts2的工作原理及工作流程

眾所周知&#xff0c;Struts2是個非常優秀的開源框架&#xff0c;我們能用Struts2框架進行開發&#xff0c;同時能 快速搭建好一個Struts2框架&#xff0c;但我們是否能把Struts2框架的工作原理用語言表達清楚&#xff0c;你表達的原理不需要說出底層是怎么實現的&#xff0c;我…

正則表達式采坑

[a-zA-Z]匹配大小寫字符 \w 匹配字母、數字、下劃線 {5,7} 表示前面的字符&#xff08;即&#xff1a;\w&#xff09;必須至少出現 5 次最多出現 7 次. 合起來就是 >6 少于8個的字符 [a-zA-Z]\w{6,12} --------------》》 就是要輸入七位數到十三位&#x…