聚类结果的评价指标


在这里插入图片描述

外部指标

Jaccard系数

JC=

FM指数

在这里插入图片描述

举例子

在这里插入图片描述

MI 互信息

信息熵

衡量信息的平均不确定性,非负性
H ( y ) = − ∑ i = 1 k ∑ _{i = 1} ^k i=1k p i p _i pi log ⁡ p i p _i pi
i为当前的簇
k为总的簇数
p i p_i pi为任意一个样本被分到第i簇的概率

比如:
对于真实标记y_true=np.array([0,0,1,1,2,2])
k=3
p 0 p_0 p0=2/6=1/3
p 1 p_1 p1=2/6=1/3
p 2 p_2 p2=2/6=1/3
则y_true的熵
H(y_true)=-1/3log(1/3)-1/3log(1/3)-1/3log(1/3)=log3
这里的对数底常取 2或者e

列联表

真实标签向量 y_true=np.array([0,0,1,1,2,2])
预测标签向量 y_pred=np.array([0,0,0,1,1,1])

列联表(contingency table),满足
m i j m _{i j} mij = ∣ y t r u e i y_{true_i} ytruei y p r e d j y_{pred_j} ypredj
y t r u e i y_{true_i} ytruei,真实标签中第i簇的样本集合
y p r e d j y_{pred_j} ypredj,聚类簇中第j簇的样本集合
m i j m _{i j} mij,真实标签中第 i 簇的样本集合与聚类簇中第 j 簇的样本集合 交集的样本数

则有
y t r u e 0 y_{true_0} ytrue0={0,1}
y t r u e 1 y_{true_1} ytrue1={2,3}
y t r u e 2 y_{true_2} ytrue2={4,5}
y p r e d 0 y_{pred_0} ypred0={0,1,2}
y p r e d 1 y_{pred_1} ypred1={3,4,5}
y p r e d 2 y_{pred_2} ypred2={}

列联表为
M=
[ m 00 m 01 m 02 m 10 m 11 m 12 m 20 m 21 m 22 ] \begin{gathered} \begin{bmatrix} m _{0 0} & m _{0 1} & m _{0 2} \\m _{1 0} & m _{1 1} & m _{1 2} \\ m _{2 0} & m _{2 1} & m _{2 2} \end{bmatrix} \end{gathered} m00m10m20m01m11m21m02m12m22

M=
[ 2 0 0 1 1 0 0 2 0 ] \begin{gathered} \begin{bmatrix} 2 & 0 & 0 \\1 & 1 & 0 \\ 0 & 2 & 0 \end{bmatrix} \end{gathered} 210012000

互信息的计算公式如下:

MI( y t r u e y_{true} ytrue, y p r e d y_{pred} ypred) = ∑ i = 1 k ∑_{i = 1} ^k i=1k ∑ j = 1 k ∑_{j= 1} ^k j=1k p i , j p_{i , j} pi,jlog ⁡( p i , j p_{i , j} pi,j / p i p_i pi × p j p_j pj )

其中
p i , j p_{i , j} pi,j = m i , j m_{i,j} mi,j/m m为总样本数
p i p_i pi=| y t r u e i y_{true_i} ytruei|/m
p j p_j pj=| y p r e d j y_{pred_j} ypredj|/m
则根据y_true,y_pred标记值可以得到:
p i , j p_{i , j} pi,j矩阵
[ 1 / 3 0 0 1 / 6 1 / 6 0 0 1 / 3 0 ] \begin{gathered} \begin{bmatrix} 1/3 & 0 & 0 \\1/6 & 1/6 & 0 \\ 0 & 1/3 & 0 \end{bmatrix} \end{gathered} 1/31/6001/61/3000
p i p_i pi=[1/3 1/3 1/3]
p j p_j pj=[1/2 1/2 0]
则MI( y t r u e y_{true} ytrue, y p r e d y_{pred} ypred)=1/3log2+1/6log1+1/6log1+1/3log2=2/3log2=0.4621
这里取e为底
使用sklearn.metrics.mutual_info_score可以得到同样的结果

NMI标准化互信息

标准化互信息的计算方法如下:

NMI( y t r u e y_{true} ytrue , y p r e d y_{pred} ypred) = MI( y t r u e y_{true} ytrue , y p r e d y_{pred} ypred) / F(H ( y t r u e y_{true} ytrue),H( y p r e d y_{pred} ypred))
通常F(H ( y t r u e y_{true} ytrue),H( y p r e d y_{pred} ypred))采用算数平均值
F(H ( y t r u e y_{true} ytrue),H( y p r e d y_{pred} ypred))=(H ( y t r u e y_{true} ytrue)+H( y p r e d y_{pred} ypred)/2

则NMI( y t r u e y_{true} ytrue , y p r e d y_{pred} ypred) =MI( y t r u e y_{true} ytrue , y p r e d y_{pred} ypred) / 1/2(H ( y t r u e y_{true} ytrue)+H( y p r e d y_{pred} ypred))

据y_true,y_pred的标记值可得:
MI( y t r u e y_{true} ytrue , y p r e d y_{pred} ypred) =2/3log2
H ( y t r u e y_{true} ytrue)=log3
H( y p r e d y_{pred} ypred)=log2
则NMI( y t r u e y_{true} ytrue , y p r e d y_{pred} ypred)=(2/3log2) / 1/2(log3+log2)=0.5158
以e为底
sklearn.metrics.normalized_mutual_info_score同样可以算得0.5295
只不过sklearn里实现的F(H ( y t r u e y_{true} ytrue),H( y p r e d y_{pred} ypred))采用几何平均值
F(H ( y t r u e y_{true} ytrue),H( y p r e d y_{pred} ypred))=np.sqrt( H( y t r u e y_{true} ytrue)*H( y p r e d y_{pred} ypred) )
sklearn计算熵:from sklearn.metrics.cluster import entropy

AMI调整互信息

调整互信息的计算要复杂一些,其计算方法如下:

AMI( y t r u e y_{true} ytrue , y p r e d y_{pred} ypred) = M I ( y t r u e , y p r e d ) − E { MI ( y t r u e , y p r e d ) } F ( H ( y t r u e ) , H ( y p r e d ) ) − E { MI ( y t r u e , y p r e d ) } \frac {MI( y_{true} , y_{pred}) - \mathbb E\left\{ \text{MI}( y_{true} , y_{pred})\right\} } {F (H (y_{true}) ,H(y_{pred})) − \mathbb E\left\{ \text{MI}( y_{true} , y_{pred})\right\} } F(H(ytrue),H(ypred))E{MI(ytrue,ypred)}MI(ytrue,ypred)E{MI(ytrue,ypred)}

其中, E { MI ( y t r u e , y p r e d ) } \mathbb E\left\{ \text{MI}(y_{true}, y_{pred}) \right\} E{MI(ytrue,ypred)}为互信息 MI ( y t r u e , y p r e d ) \text{MI}(y_{true}, y_{pred}) MI(ytrue,ypred) 的期望,计算方法为

E { MI ( y t r u e , y p r e d ) } = ∑ i = 1 k ∑ j = 1 k ∑ z = ( a i + b j − m ) + m i n ⁡ ( a i , b j ) z m l o g ⁡ ( m × z a i × b j ) a i ! b j ! ( m − a i ) ! ( m − b j ) ! m ! z ! ( a i − z ) ! ( b j − z ) ! ( m − a i − b j + z ) ! \mathbb E\left\{ \text{MI}(y_{true}, y_{pred}) \right\} = ∑_{i = 1} ^k ∑_{j = 1} ^k ∑_{z = ( a_i + b_j − m )^+} ^{min ⁡ ( a_i , b_j )} \frac {z} {m} log ⁡ ( \frac{m × z} {a_i × b_j} ) \frac{a_i ! b_j ! ( m − a_i ) ! ( m − b_j ) !} {m ! z ! ( a_i − z ) ! ( b_j − z ) ! ( m − a_i − b_j + z ) ! } E{MI(ytrue,ypred)}=i=1kj=1kz=(ai+bjm)+min(ai,bj)mzlog(ai×bjm×z)m!z!(aiz)!(bjz)!(maibj+z)!ai!bj!(mai)!(mbj)!

其中 ( a i + b j − m ) + ( a_i + b_j − m)^+ (ai+bjm)+ m a x ⁡ ( 1 , a i + b j − m ) max ⁡ ( 1 , a_i + b_j − m) max(1,ai+bjm)
a i a_i ai为列联表M中的第 i i i 行的和
b j b_j bj为列联表M中的第 j j j 列的和

针对y_true,y_pred的标记值,可以计算得
MI( y t r u e y_{true} ytrue , y p r e d y_{pred} ypred) =2/3log2
H ( y t r u e y_{true} ytrue)=log3
H( y p r e d y_{pred} ypred)=log2
a 0 a_0 a0=2+0+0=2
a 1 a_1 a1=1+1+0=2
a 2 a_2 a2=0+2+0=2
b 0 b_0 b0=2+1+0=3
b 1 b_1 b1=0+1+2=3
b 2 b_2 b2=0+0+0=0

E { M I ( y t r u e , y p r e d ) } \mathbb E\left\{MI(y_{true}, y_{pred}) \right\} E{MI(ytrue,ypred)}=2/5log2
计算过程:
i=0 j=0 z=[1,2] sum=0+1/15log2
i=0,j=1,z=[1,2] sum=0+1/15log2
i=0,j=2,z=[] sum=0
.
.
.

AMI( y t r u e y_{true} ytrue , y p r e d y_{pred} ypred)= 2 / 3 l o g 2 − 2 / 5 l o g 2 m a x ( l o g 3 , l o g 2 ) − 2 / 5 l o g 2 \frac{2/3log2-2/5log2} {max(log3,log2)-2/5log2} max(log3,log2)2/5log22/3log22/5log2=0.22504

这里计算F(H ( y t r u e y_{true} ytrue),H( y p r e d y_{pred} ypred)) 采用了max函数
也可以采用min函数min(log3,log2),几何平均 l o g 3 ∗ l o g 2 \sqrt {log3*log2} log3log2 ,算数平均 l o g 3 + l o g 2 2 \frac {log3+log2} {2} 2log3+log2

使用sklearn.metrics.adjusted_mutual_info_score计算结果0.22504
sklearn就是使用的max函数计算F(H ( y t r u e y_{true} ytrue),H( y p r e d y_{pred} ypred))

对于MI,NMI,AMI三者,通常采用NMI和AMI来作为衡量聚类效果的指标

内部指标

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

轮廓系数

单一样本的轮廓系数
s ( x i ) = b ( x i ) − a ( x i ) m a x [ a ( x i ) , b ( x i ) ] s(x_i) =\frac {b(x_i)-a(x_i)} {max[a(x_i),b(x_i)]} s(xi)=max[a(xi),b(xi)]b(xi)a(xi)
样本集S的轮廓系数 ----所有样本轮廓系数的平均值
轮廓系数SC越大,簇内越紧凑,簇间越分散

sklearn的实现:
sklearn.metrics.silhouette_score
X: 样本集数组
labels:聚类标签y_pred
metric:距离度量

DB指数

在这里插入图片描述
在这里插入图片描述
DB指数越小,簇内越紧凑,簇间越分散
sklearn实现:
sklearn.metrics.davies_bouldin_score
X:样本集数组
labels:聚类标签y_pred

new add in sklearn 0.20.0

Dunn指数

在这里插入图片描述
d m i n ( C i , C j ) d_{min}(C_i,C_j) dmin(Ci,Cj):两个簇中最近样本之间的距离
d i a m ( C l ) diam(C_l) diam(Cl):簇中最远的两个样本之间的距离
对于一个已完成的聚类,分母是最分散的那个簇中最远的两个样本之间的距离,是一个固定值,记为D
则对k=3时:
i=0, 取 m i n ( [ d m i n ( C 0 , C 1 ) D , d m i n ( C 0 , C 2 ) D ] ) = i 0 min([\frac{d_{min}(C_0,C_1)} {D} ,\frac{d_{min}(C_0,C_2)} {D}])=i_0 min([Ddmin(C0,C1),Ddmin(C0,C2)])=i0
i=1,取 m i n ( [ d m i n ( C 1 , C 0 ) D , d m i n ( C 1 , C 2 ) D ] ) = i 1 min([\frac{d_{min}(C_1,C_0)} {D} ,\frac{d_{min}(C_1,C_2)} {D}])=i_1 min([Ddmin(C1,C0),Ddmin(C1,C2)])=i1
i=2,取 m i n ( [ d m i n ( C 2 , C 0 ) D , d m i n ( C 2 , C 1 ) D ] ) = i 2 min([\frac{d_{min}(C_2,C_0)} {D} ,\frac{d_{min}(C_2,C_1)} {D}])=i_2 min([Ddmin(C2,C0),Ddmin(C2,C1)])=i2

D I = m i n ( [ i 0 , i 1 , i 2 ] ) DI=min([i_0,i_1,i_2]) DI=min([i0,i1,i2])

sklearn实现:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

laufing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值