1.聚类问题指标评价的意义
聚类算法是非监督学习最常用的一种方法,性能度量是衡量学习模型优劣的指标,
也可作为优化学习模型的目标函数。聚类性能度量根据训练数据是否包含标记数据
分为两类,一类是将聚类结果与标记数据进行比较,称为“外部指标”;另一类是直
接分析聚类结果,称为内部指标。本文对这两类的性能度量以及相似度方法作一个
详细总结。
本文将总结的指标如下所示:
外部指标:
1.兰德系数(ri)
2.调整兰德系数(ari)
3.同质性(homogeneity)度量
4.完整性(completeness)度量
5.v-measure值(h和c的调和平均值)度量
内部指标
1.轮廓系数(silhouette coefficient)
2.caliniski-harabaz指数
2.外部评价指标计算
2.1.兰德系数(ri)计算方法
首先我们定义两两配对变量a和b:
a:数据集的样本对既属于相同簇c也属于相同簇k的个数
b:数据集的样本对不属于相同簇c也不属于相同簇k的个数
比如对于如下的真实簇和预测簇向量:
真实簇向量:[ 0, 0, 0, 1, 1, 1 ]
预测簇向量:[ 0, 0, 1, 1, 1, 1 ]
根据a的定义,a表示在c,k两簇都是相同簇的样本对数,由上我们知道为a=2([0,0]和[1,1]满足题意)
根据b的定义,b表示在c和k中都是不同簇的样本的个数,由上我们知道b=1([0,1]->[1,1]符合条件)
ri是衡量两个簇类的相似度,假设样本个数是n,定义:
r
i
=
a
+
b
c
n
2
ri=\frac{a+b}{c_{n}^{2} }
ri=cn2a+b
基于上述样本,n=6,cluters=3,所以ri的计算结果如下所示:
r
i
=
a
+
b
c
6
3
=
2
+
1
15
=
1
5
ri=\frac{a+b}{c_{6}^{3} } =\frac{2+1}{15} =\frac{1}{5}
ri=c63a+b=152+1=51
2.2.调整兰德系数(ari)计算方法
ri系数的缺点是随着聚类数的增加,随机分配簇类向量的ri也逐渐增加,这是不符合理论的,随机分配簇类标记向量的ri应为0。
对于随机结果,ri并不能保证分数接近零。为了实现“在聚类结果随机产生的情况下,指标应该接近零”,调整兰德系数( adjusted randindex)被提出,它具有更高的区分度,其计算公式如下所示:
a
r
i
=
r
i
−
e
[
r
i
]
m
a
x
(
r
i
)
−
e
[
r
i
]
ari=\frac{ri-e[ri]}{max(ri)-e[ri]}
ari=max(ri)−e[ri]ri−e[ri]
相关python代码如下所示:
from sklearn.metrics import adjusted_rand_score
true_labels = [ 0, 0, 0, 1, 1, 1 ]# 真实的标签
predicted_labels = [ 0, 0, 1, 1, 2, 2 ]# 聚类结果的标签
ari_score = adjusted_rand_score(true_labels, predicted_labels)
print("调整兰德系数:",ari_score )
2.3.同质性度量的计算方法
我们给出同质性度量的计算公式如下所示:
h
=
1
−
h
(
c
∣
k
)
h
(
c
)
h=1-\frac{h(c|k)}{h(c)}
h=1−h(c)h(c∣k)
h
(
c
∣
k
)
是给定簇划分条件下类别划分的条件熵
,
h
(
c
∣
k
)
=
−
∑
c
=
1
∣
c
∣
∑
k
=
1
∣
k
∣
n
c
,
k
n
log
(
n
c
,
k
n
k
)
,
h
(
c
)
是类别划分熵
,
h
(
c
)
=
−
∑
c
=
1
∣
c
∣
n
c
n
log
(
n
c
n
)
,
n
表示实例总数。
h(c \mid k) 是给定簇划分条件下类别划分的条件熵, \\ h(c \mid k)= -\sum_{c=1}^{|c|} \sum_{k=1}^{|k|} \frac{n_{c, k}}{n} \log \left(\frac{n_{c, k}}{n_{k}}\right), h(c) 是类别划分熵, \\ h(c)=-\sum_{c=1}^{|c|} \frac{n_{c}}{n} \log \left(\frac{n_{c}}{n}\right), n 表示实例总 数。
h(c∣k)是给定簇划分条件下类别划分的条件熵,h(c∣k)=−c=1∑∣c∣k=1∑∣k∣nnc,klog(nknc,k),h(c)是类别划分熵,h(c)=−c=1∑∣c∣nnclog(nnc),n表示实例总数。
相关python代码如下所示:
from sklearn.metrics import homogeneity_score
true_labels = [ 0, 0, 0, 1, 1, 1 ]# 真实的标签
predicted_labels = [ 0, 0, 1, 1, 2, 2 ]# 聚类结果的标签
homogeneity = homogeneity_score(true_labels, predicted_labels)
print("同质性:", homogeneity)
2.4.完整性度量的计算方法
完整性度量的各个参数的都类似于同质性度量,其是计算公式如下所示:
h
=
1
−
h
(
k
∣
c
)
h
(
k
)
h=1-\frac{h(k|c)}{h(k)}
h=1−h(k)h(k∣c)
相关python代码如下所示:
from sklearn.metrics import completeness_score
true_labels = [ 0, 0, 0, 1, 1, 1 ]# 真实的标签
predicted_labels = [ 0, 0, 1, 1, 2, 2 ]# 聚类结果的标签
completeness = completeness_score(true_labels, predicted_labels)
print("完整性:", completeness)
2.5.v-measure值的计算方法
v-measure的计算方法是h和c的调和平均数,其计算公式如下所示:
v
=
2
h
c
h
+
c
v=\frac{2hc}{h+c}
v=h+c2hc
相关python代码如下所示:
#%%
from sklearn.metrics import v_measure_score
true_labels = [ 0, 0, 0, 1, 1, 1 ]# 真实的标签
predicted_labels = [ 0, 0, 1, 1, 2, 2 ]# 聚类结果的标签
v_measure = v_measure_score(true_labels, predicted_labels)
print("v度量:", v_measure)
3.内部评价指标计算
3.1.轮廓系数的计算方法
轮廓系数(silhouette coeffcient ) 适用于实际类别信息未知的情况。对于单个样本,设a 是与它同类别中其他样本的平均距离,b是与它距离最近不同类别中样本的平均距离,轮廓系数为:
s
=
b
−
a
m
a
x
(
a
,
b
)
s=\frac{b-a}{max(a,b)}
s=max(a,b)b−a
相关python代码如下所示:
#%%
from sklearn.cluster import kmeans
from sklearn.metrics import silhouette_score
x=[[0,1,2,6],[1,0,2,6],[2,1,0,6],[6,6,6,0]]
y=[0,0,0,1]
kmeans = kmeans(n_clusters=3)
# 根据数据data进行聚类,结果存放于result_list中
result_list = kmeans.fit_predict(x)
# 将原始的数据data和聚类结果result_list
score = silhouette_score(x, result_list)
print(score)
3.2.calinski-harabaz的计算方法
这种计算方法简单直接并且得到的数据越大越好,下面给出calinski-harabaz因子的计算方式:
也就是说,类别内部数据的协方差越小越好,类别之间的协方差越大越好,这样的calinski-harabasz分数会高。
相关python代码如下所示:
#%%
#%%
import numpy as np
from sklearn import metrics
from sklearn.cluster import kmeans
x=[[0,1,2,6],[1,0,2,6],[2,1,0,6],[6,6,6,0]]
y=[0,0,0,1]
kmeans = kmeans(n_clusters=3)
result_list = kmeans.fit_predict(x)
calinski_harabasz_score= metrics.calinski_harabasz_score(x, result_list)
print(calinski_harabasz_score)
4.致谢
本章内容的完成离不开以下大佬文章的启发和帮助,在这里列出名单,如果对于内容还有不懂的,可以移步对应的文章进行进一步的理解分析。
1.聚类评价指标的外部指标评价:https://blog.csdn.net/fengdu78/article/details/103951665
2.聚类评价指标的外部指标评价:https://zhuanlan.zhihu.com/p/145989213
3.聚类评价指标的内部指标评价:https://blog.csdn.net/sinat_26917383/article/details/70577710
在文章的最后再次表达由衷的感谢!!
发表评论