聚类性能评价指标

好的聚类算法一般要求类簇具有高的类内(intra-cluster)相似度和低的(inter-cluster)相似度。

聚类算法有外部(External)评价指标和内部(Internal)评价指标两种,外部评价指标需要借助数据真实情况进行对比分析,内部评价指标不需要其他数据就可以进行指标的评估。

设有 N N N p p p维数据 X = [ x 1 , x 2 , ⋯   , x N ] T ∈ R N × p X=[x_1,x_2,\cdots,x_N]^T\in\mathbb{R}^{N\times p} X=[x1,x2,,xN]TRN×p,真实数据共有 R R R { U 1 , U 2 , ⋯   , U R } \{U_1,U_2,\cdots,U_R\} {U1,U2,,UR},聚类算法将数据划分为 J J J { V 1 , V 2 , ⋯   , V J } \{V_1,V_2,\cdots,V_J\} {V1,V2,,VJ}

Purity

P u r i t y ( U , V ) = 1 N ∑ k max ⁡ j ∣ u k ∩ v j ∣ Purity(U,V) = \frac{1}{N}\sum_{k}\max_{j}|u_k\cap v_j| Purity(U,V)=N1kjmaxukvj

P u r i t y Purity Purity按照以下思路计算,对聚类算法得到的每一个簇,将其中样本数目最多的真实簇作为该簇的类别,并使用最大的样本数为该簇记分,最后将所有簇之和归一化。

举例来说,x, o , ◊ \Diamond 是数据真实的三个类别,聚类算法将这些数据点划分为 c l u s t e r 1 cluster1 cluster1 c l u s t e r 2 cluster2 cluster2 c l u s t e r 3 cluster3 cluster3三类,在 c l u s t e r 1 cluster 1 cluster1 中 class x 数目最多为 5,在 c l u s t e r 2 cluster 2 cluster2中class o 数目最多为 4,在 c l u s t e r 3 cluster 3 cluster3中 class ◊ \Diamond 数目最多为 3。因此:
P u r i t y = 1 17 × ( 5 + 4 + 3 ) ≈ 0.7059 Purity=\frac{1}{17}\times(5+4+3)\approx0.7059 Purity=171×(5+4+3)0.7059

在这里插入图片描述

  • P u r i t y ∈ [ 0 , 1 ] Purity\in[0,1] Purity[0,1],越接近1表示聚类结果越好。
  • 该值无法用于权衡聚类质量与簇个数之间的关系。

互信息、标准化互信息、调整互信息

信息熵与列联表

对于标签向量 U U U,其信息熵为
H ( U ) = − ∑ i = 1 R p i ln ⁡ p i = − ∑ i = 1 R ∣ U i ∣ N ln ⁡ ∣ U i ∣ N H(U)=-\sum_{i=1}^Rp_i\ln p_i=-\sum_{i=1}^R\frac{|U_i|}{N}\ln \frac{|U_i|}{N} H(U)=i=1Rpilnpi=i=1RNUilnNUi

其中 p i = ∣ U i ∣ N p_i=\frac{|U_i|}{N} pi=NUi表示第 i i i 簇的数据个数占比。

取矩阵 M ∈ R R × J M\in\mathbb{R}^{R\times J} MRR×J为真实标签向量 U U U与预测标签向量的列联表,
M i j = ∣ U i ∩ V j ∣ M_{ij}=|U_i\cap V_j| Mij=UiVj

举例来说,对于 U = [ 1 , 1 , 2 , 2 ] , V = [ 1 , 1 , 1 , 2 ] U=[1,1,2,2],V=[1,1,1,2] U=[1,1,2,2],V=[1,1,1,2],有
U 1 = { 1 , 2 } , U 2 = { 3 , 4 } , V 1 = { 1 , 2 , 3 } , V 2 = { 4 } U_1=\{1,2\},\quad U_2=\{3,4\},\quad V_1=\{1,2,3\},\quad V_2=\{4\} U1={1,2},U2={3,4},V1={1,2,3},V2={4}


m 11 = ∣ { 1 , 2 } ∣ = 2 , m 12 = ∣ ∅ ∣ = 0 , m 21 = ∣ { 3 } ∣ = 1 , m 22 = ∣ { 4 } ∣ = 1 m_{11}=|\{1,2\}|=2,\quad m_{12}=|\emptyset|=0,\quad m_{21}=|\{3\}|=1,\quad m_{22}=|\{4\}|=1 m11={1,2}=2,m12==0,m21={3}=1,m22={4}=1

列联表为
M = [ 2 0 1 1 ] M=\left[\begin{matrix} 2&0\\ 1&1\\ \end{matrix}\right] M=[2101]

互信息(Mutual information, MI)

互信息用来衡量两个数据分布的吻合程度。
M I ( U , V ) = H ( V ) − H ( V ∣ U ) = ∑ i = 1 R ∑ j = 1 J p i j ln ⁡ p i j p i p j MI(U,V)=H(V)-H(V|U)=\sum_{i=1}^R\sum_{j=1}^Jp_{ij}\ln\frac{p_{ij}}{p_ip_j} MI(U,V)=H(V)H(VU)=i=1Rj=1Jpijlnpipjpij
其中 p i = ∣ U i ∣ N p_i=\frac{|U_i|}{N} pi=NUi p j = ∣ V j ∣ N p_j=\frac{|V_j|}{N} pj=NVj p i j = ∣ m i j ∣ N p_{ij}=\frac{|m_{ij}|}{N} pij=Nmij

  • M I ∈ [ 0 , 1 ] MI\in[0,1] MI[0,1],取值越大,表明聚类结果与真实情况越吻合。

标准化互信息(Normalized Mutual Information, NMI)

N M I ( U , V ) = M I ( U , V ) F ( H ( U ) , H ( V ) ) NMI(U,V)=\frac{MI(U,V)}{F(H(U),H(V))} NMI(U,V)=F(H(U),H(V))MI(U,V)

其中 F ( x 1 , x 2 ) F(x_1,x_2) F(x1,x2)可以是min函数、max函数,也可以是几何平均 F ( x 1 , x 2 ) = x 1 x 2 F(x_1,x_2)=\sqrt{x_1x_2} F(x1,x2)=x1x2 ,也可以是算术平均 F ( x 1 , x 2 ) = 1 2 ( x 1 + x 2 ) F(x_1,x_2)=\frac{1}{2}(x_1+x_2) F(x1,x2)=21(x1+x2)

  • N M I ∈ [ 0 , 1 ] NMI\in[0,1] NMI[0,1],取值越大,表明聚类结果与真实情况越吻合。

调整互信息(Adjusted Mutual Information, AMI)

MI(互信息指数)和NMI(标准化的互信息指数)不符合簇向量随机分配的理论,即随着分配簇的个数增加,MI和NMI亦会趋向于增加。
N M I ( U , V ) = M I ( U , V ) − E [ M I ( U , V ) ] F ( H ( U ) , H ( V ) ) − E [ M I ( U , V ) ] NMI(U,V)=\frac{MI(U,V)-E[MI(U,V)]}{F(H(U),H(V))-E[MI(U,V)]} NMI(U,V)=F(H(U),H(V))E[MI(U,V)]MI(U,V)E[MI(U,V)]

其中 E [ M I ( U , V ) ] E[MI(U,V)] E[MI(U,V)]为互信息 M I ( U , V ) MI(U,V) MI(U,V)的期望,
E [ M I ( U , V ) ] = ∑ i = 1 R ∑ j = 1 J ∑ k = ( a i + b j − N ) + m i n ( a i , b j ) k N ln ⁡ ( N k a i b j ) a i ! b j ! ( N − a i ) ! ( N − b j ) ! N ! k ! ( a i − k ) ! ( b j − k ) ! ( N − a i − b j + k ) ! E[MI(U,V)]=\sum_{i=1}^R\sum_{j=1}^J\sum_{k=(a_i+b_j-N)^+}^{min(a_i,b_j)}\frac{k}{N}\ln(\frac{Nk}{a_ib_j})\frac{a_i!b_j!(N-a_i)!(N-b_j)!}{N!k!(a_i-k)!(b_j-k)!(N-a_i-b_j+k)!} E[MI(U,V)]=i=1Rj=1Jk=(ai+bjN)+min(ai,bj)Nkln(aibjNk)N!k!(aik)!(bjk)!(Naibj+k)!ai!bj!(Nai)!(Nbj)!

其中 ( a i + b j − N ) + = max ⁡ ( 1 , a i + b j − N ) (a_i+b_j-N)^+=\max(1,a_i+b_j-N) (ai+bjN)+=max(1,ai+bjN) a i , b j a_i,b_j ai,bj分别表示列联表 M M M的第 i i i 行和第 j j j 列之和,
a i = ∑ j = 1 J m i j , b j = ∑ i = 1 R m i j a_i=\sum_{j=1}^Jm_{ij},\quad b_j=\sum_{i=1}^Rm_{ij} ai=j=1Jmij,bj=i=1Rmij

  • A M I ∈ [ − 1 , 1 ] AMI\in[-1,1] AMI[1,1],取值越大,表明聚类结果与真实情况越吻合。

Python代码

from sklearn.metrics.cluster import entropy, mutual_info_score, normalized_mutual_info_score
MI = lambda x, y: mutual_info_score(x, y)
NMI = lambda x, y: normalized_mutual_info_score(x, y, average_method='arithmetic')
AMI = lambda x, y: adjusted_mutual_info_score(x, y, average_method='arithmetic')

兰德指数与调整兰德指数

兰德指数(Rand Index, RI)

兰德指数将聚类看成是一系列的决策过程,即对文档集上所有 C N 2 = N ( N − 1 ) / 2 C_N^2=N(N-1)/2 CN2=N(N1)/2 个文档对进行决策。当且仅当两篇文档相似时,我们将它们归入同一簇中。

正确决策:

  • TP 将两篇相似文档归入一个簇 (同 - 同);
  • TN 将两篇不相似的文档归入不同的簇 (不同 - 不同)。

错误决策:

  • FP 将两篇不相似的文档归入同一簇 (不同 - 同);
  • FN 将两篇相似的文档归入不同簇 (同- 不同) (worse)。

RI 则是计算正确决策的比率
R I = T P + T N T P + F P + T N + F N = T P + T N C N 2 RI=\frac{TP+TN}{TP+FP+TN+FN}=\frac{TP+TN}{C_N^2} RI=TP+FP+TN+FNTP+TN=CN2TP+TN

  • R I ∈ [ 0 , 1 ] RI\in[0,1] RI[0,1],取值越大,表明聚类结果与真实情况越吻合。

调整兰德指数(Adjusted Rand Index, ARI)

RI 的问题在于对两个随机的划分, 其 RI 值不是一个接近于 0 的常数。ARI解决了RI不能很好的描述随机分配簇类标记向量的相似度问题。
A R I = R I − E [ R I ] max ⁡ ( R I ) − E [ R I ] ARI=\frac{RI-E[RI]}{\max(RI)-E[RI]} ARI=max(RI)E[RI]RIE[RI]
在这里插入图片描述

  • A R I ∈ [ − 1 , 1 ] ARI\in[-1,1] ARI[1,1],取值越大,表明聚类结果与真实情况越吻合。

Python代码

from sklearn.metrics.cluster import adjusted_mutual_info_score
ARI = lambda x, y: adjusted_mutual_info_score(x, y)

聚类精确度(Accuracy, AC)

A C = ∑ i = 1 N δ ( s i , m a p ( r i ) ) N AC=\frac{\sum_{i=1}^N\delta(s_i,map(r_i))}{N} AC=Ni=1Nδ(si,map(ri))
其中 r i , s i r_i,s_i ri,si分别表示数据 x i x_i xi所对应的获得的标签和真实标签, δ ( ⋅ ) \delta(\cdot) δ()为指示函数
δ ( x , y ) = { 1 x = y 0 o t h e r w i s e \delta(x,y)=\begin{cases} 1&x=y\\ 0&otherwise \end{cases} δ(x,y)={10x=yotherwise
而式中的 map 则表示最佳类标的重现分配,以才能保证统计的正确。一般的该最佳重分配可以通过匈牙利算法 (Kuhn-Munkres or Hungarian Algorithm) 实现,从而在多项式时间内求解该任务(标签)分配问题。


[ML] 聚类评价指标
聚类效果评价指标:MI, NMI, AMI(互信息,标准化互信息,调整互信息)
聚类算法的评价指标
聚类︱python实现 六大 分群质量评估指标(兰德系数、互信息、轮廓系数)

  • 3
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值