评估聚类算法的性能并不像计算错误数量或监督分类算法的精度和召回率那么简单。特别是任何评价指标不应考虑集群的绝对值的标签,而是如果这个集群定义分离的数据类似于一些地标准数据类或满足一些假设,根据某种相似性度量,这样成员属于同一类相似度大于不同的类的成员
Homogeneity, completeness and V-measure
这些指标都是使用条件熵分析来定义一些直观的度量.
在 Rosenberg and Hirschberg (2007)为任何集群分配定义以下两个理想的目标
Homogeneity:每个集群只包含单个类的成员
completeness:给定类的所有成员都被分配到同一个集群

image.png
实例
>>> from sklearn import metrics
>>> labels_true = [0, 0, 0, 1, 1, 1]
>>> labels_pred = [0, 0, 1, 1, 2, 2]
>>> metrics.homogeneity_score(labels_true, labels_pred)
0.66...
>>> metrics.completeness_score(labels_true, labels_pred)
0.42...
>>> metrics.v_measure_score(labels_true, labels_pred)
0.51...
#beta默认值为1.0,但如果beta值小于1:
>>> metrics.v_measure_score(labels_true, labels_pred, beta=0.6)
0.54...
>>> metrics.v_measure_score(labels_true, labels_pred, beta=1.8)
0.48...
#这三个值可以一起计算
>>> metrics.homogeneity_completeness_v_measure(labels_true, labels_pred)
(0.66..., 0.42..., 0.51...)
>>> labels_pred = [0, 0, 0, 1, 2, 2]
>>> metrics.homogeneity_completeness_v_measure(labels_true, labels_pred)
(1.0, 0.68..., 0.81...)
note
v_measure_score是对称的:它可以用来评估同一个数据集上两个独立赋值的一致性。
注意
1 界限分数:0.0是最糟糕的,1.0是一个完美的分数。
2 直观的解释:v值不好的聚类可以从同质性和完整性方面进行定性分析,以便更好地了解作业中出现的“类型”错误。
3 可用于比较k-means等假设各向同性斑点形状的聚类算法与谱聚类算法的结果,谱聚类算法可以找到具有“折叠”形状的聚类。
4前面介绍的度量标准没有对随机标记进行规范化:这意味着,根据样本数量、集群和ground truth类,完全随机标记并不总是产生相同的同质性、完整性和v-measure值。特别地,随机标记不会产生零分,尤其是当集群的数量很大时。
来源:sklearn官网
地址:https://scikit-learn.org/stable/modules/clustering.html#clustering-evaluation