聚类算法评估指标及代码

外部指标(有真实标签)

兰德指数(RI)

取值为 [ 0 − 1 ] [0-1] [01] 越大越表明聚类结果与真实结果吻合
R I = a + b c n 2 RI=\frac{a+b}{c_n^2} RI=cn2a+b

  • a:在预测结果和真实标签中都属于同一簇的样本对的数量
  • b:在预测结果和真实标签中都不属于同一簇的样本对的数量
  • c n 2 c_n^2 cn2:组合数
def RI(Y_pred, Gt):
	a=0
	b=0
	n = len(Gt)
	for i in range(n):
		for j in range(n):
			if Y_pred[i]==Y_pred[j] and Gt[i]==Gt[j] :
				a += 1
			elif Y_pred[i]!=Y_pred[j] and Gt[i]!=Gt[j]:
				b += 1
	return (a+b)*2/(n*(n-1))

调整兰德指数(ARI)

由于当两个划分是随机的时候RI的值并不为0,所以对其进行调整。
A R I = ∑ i j C n i j 2 − [ ∑ i C a i 2 ∑ j C b j 2 ] / C n 2 1 2 [ ∑ i C a i 2 + ∑ j C b j 2 ] − [ ∑ i C a i 2 ∑ j C b j 2 ] / C n 2 ARI=\frac{\sum_{ij}{C^2_{n_{ij}}}-[\sum_iC^2_{a_i}\sum_jC^2_{b_j}]/C^2_n}{\frac{1}{2}[\sum_iC^2_{a_i}+\sum_jC^2_{b_j}]-[\sum_iC^2_{a_i}\sum_jC^2_{b_j}]/C^2_n} ARI=21[iCai2+jCbj2][iCai2jCbj2]/Cn2ijCnij2[iCai2jCbj2]/Cn2
取值范围为 [ − 1 , 1 ] [-1,1] [1,1],当两个划分是随机的时候,ARI的值为0。

  • 首先要得到列联表
    在这里插入图片描述

  • c n 2 c_n^2 cn2:组合数

可直接调用sklean中的代码

ARI = metrics.adjusted_rand_score(X, Y)

标准互信息(NMI)

通过互信息来度量两个划分之间的相似度,取值在 [ 0 − 1 ] [0-1] [01]之间。
N I M = 2 ∗ I ( X , Y ) H ( X ) + H ( Y ) NIM = \frac{2*I(X,Y)}{H(X)+H(Y)} NIM=H(X)+H(Y)2I(X,Y)

  • H ( X ) H(X) H(X):代表X的熵 H ( X ) = ∑ p ( x ) ∗ l o g p ( x ) H(X)=\sum{p(x)*logp(x)} H(X)=p(x)logp(x)
  • I ( X , Y ) I(X,Y) I(X,Y):代表X和Y之间的互信息 I ( X , Y ) = ∑ x ∑ y p ( x , y ) ∗ l o g p ( x , y ) p ( x ) p ( y ) I(X,Y)=\sum_x\sum_y{p(x,y)*log\frac{p(x,y)}{p(x)p(y)}} I(X,Y)=xyp(x,y)logp(x)p(y)p(x,y)
    可直接调用sklean
NMI = metrics.normalized_mutual_info_score(X,Y)

同质性和完整性

同质:簇内是否只包含同一类别的样本。
完整:同一类别的样本点是否被划分到同一簇内。

K = 1 − H ( Y ∣ X ) H ( Y ) K = 1-\frac{H(Y|X)}{H(Y)} K=1H(Y)H(YX)
C = 1 − H ( X ∣ Y ) H ( X ) C = 1-\frac{H(X|Y)}{H(X)} C=1H(X)H(XY)

  • X为预测结果,Y为标签
  • H ( X ) H(X) H(X):代表X的熵 H ( X ) = ∑ p ( x ) ∗ l o g p ( x ) H(X)=\sum{p(x)*logp(x)} H(X)=p(x)logp(x)
K = metrics.homogeneity_score(Y,X)
C = metrics.completeness_score(Y, X)

V-Measure

同时考虑到同质性和完整性
V − M e a s u r e = ( 1 + β ) ∗ K ∗ C β ∗ K + C V-Measure = \frac{(1+\beta)*K*C}{\beta*K+C} VMeasure=βK+C(1+β)KC

V-Measure = metrics.v_measure_score(Y, X)

内部指标(无真实标签)

轮廓分数(Silhouette Score)

轮廓分数主要基于样本点与簇内和相邻簇内的相似度,距离来计算的,数值越高越好
S c o r e = a + b m a x ( a , b ) Score = \frac{a+b}{max(a,b)} Score=max(a,b)a+b

  • a:样本点距离簇内样本点的平均距离
  • b:样本点距离最近簇中样本的平均距离
Silhouette_Score = metrics.silhouette_score(X, km_labels, metric='euclidean')

∣ ∣ [ E ∗ ] : , i ∣ ∣ 2 − m i n m a x − m i n \frac{||[E^*]_{:,i}||_2-min}{max-min} maxmin∣∣[E]:,i2min

∣ ∣ [ E ∗ ] : , i ∣ ∣ 2 − ∣ ∣ [ W ] : , i ∣ ∣ 2 − m i n m a x − m i n   s . t .   W i , i = 0 \frac{||[E^*]_{:,i}||_2-||[W]_{:,i}||_2-min}{max-min} \space s.t.\space W_{i,i}=0 maxmin∣∣[E]:,i2∣∣[W]:,i2min s.t. Wi,i=0

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

真的卷

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

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

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

打赏作者

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

抵扣说明:

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

余额充值