评估聚类算法的性能并不像计算错误数量或监督分类算法的精度和召回率那么简单。特别是任何评价指标不应考虑集群的绝对值的标签,而是如果这个集群定义分离的数据类似于一些地标准数据类或满足一些假设,根据某种相似性度量,这样成员属于同一类相似度大于不同的类的成员
标准化互信息
存在一个样本的真实标签,还有这个样本的预测标签,Adjusted Rand index是一个函数,它是度量两个赋值的相似性,忽略排列顺序,并归一化。有两种不同的标准化版本,标准化互信息(NMI)和调整互信息(AMI)。NMI经常在文献中使用,而AMI是最近才提出的,并且是随机的:
名词 Normalized Mutual Information (NMI) and Adjusted Mutual Information (AMI).
>>> from sklearn import metrics
>>> labels_true = [0, 0, 0, 1, 1, 1]
>>> labels_pred = [0, 0, 1, 1, 2, 2]
>>> metrics.adjusted_mutual_info_score(labels_true, labels_pred)
0.22504...
可以在预测标签中排列0和1,将2重命名为3,并得到相同的分数:
>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.adjusted_mutual_info_score(labels_true, labels_pred)
0.22504...
值为1 和为0 的情况
>>> labels_pred = labels_true[:]
>>> metrics.adjusted_mutual_info_score(labels_true, labels_pred) #AMI
1.0
>>> metrics.normalized_mutual_info_score(labels_true, labels_pred) #NMI
1.0
>>> metrics.mutual_info_score(labels_true, labels_pred) #MI
0.69...
>>> labels_true = [0, 1, 2, 0, 3, 4, 5, 1]
>>> labels_pred = [1, 1, 0, 0, 2, 2, 2, 2]
>>> metrics.adjusted_mutual_info_score(labels_true, labels_pred)
-0.10526..
注意
1:接近于零的值表示两个标签分配在很大程度上是独立的,接近于一的值表示显著一致。此外,如果AMI恰好为1,则表示这两个标签分配是相等的(有或没有排列)。
2: 基于MI的测量需要基础真理类的知识,而在实践中几乎从来没有使用过,或者需要人工注释器进行手工分配(在监督学习环境中)。然而,在完全无监督的情况下,基于mi的度量方法也可以作为可用于聚类模型选择的一致索引的构建块
来源:sklearn官网
地址:https://scikit-learn.org/stable/modules/clustering.html#clustering-evaluation