调整后的Rand指数#

sklearn.metrics.adjusted_rand_score(labels_true, labels_pred)[source]#

考虑偶然性的Rand指数。

Rand指数通过考虑所有样本对并计算在预测和真实聚类中被分配到相同或不同聚类的样本对的数量来计算两个聚类之间的相似性度量。

然后使用以下方案将原始RI得分“考虑偶然性”调整为ARI得分

ARI = (RI - Expected_RI) / (max(RI) - Expected_RI)

因此,无论聚类和样本的数量如何,调整后的Rand指数的值都确保接近0.0,当聚类相同(最多一个排列)时,其值为1.0。对于特别不一致的聚类,调整后的Rand指数的下限为-0.5。

ARI是一个对称度量

adjusted_rand_score(a, b) == adjusted_rand_score(b, a)

用户指南中阅读更多信息。

参数:
labels_true形状为(n_samples,)的数组,dtype=int

用作参考的真实类标签。

labels_pred形状为 (n_samples,) 的类数组,dtype=int

用于评估的聚类标签。

返回值:
ARI浮点数

介于 -0.5 和 1.0 之间的相似度得分。随机标签的 ARI 接近 0.0。1.0 代表完美匹配。

另请参见

调整后的互信息得分

调整后的互信息。

参考文献

[Hubert1985]

L. Hubert 和 P. Arabie,比较划分,分类杂志 1985 https://link.springer.com/article/10.1007%2FBF01908075

[Steinley2004]

D. Steinley,Hubert-Arabie 调整 Rand 指数的属性,心理学方法 2004

示例

完美匹配的标签得分均为 1

>>> from sklearn.metrics.cluster import adjusted_rand_score
>>> adjusted_rand_score([0, 0, 1, 1], [0, 0, 1, 1])
1.0
>>> adjusted_rand_score([0, 0, 1, 1], [1, 1, 0, 0])
1.0

将所有类成员分配到同一聚类的标签是完整的,但可能并不总是纯净的,因此会受到惩罚

>>> adjusted_rand_score([0, 0, 1, 2], [0, 0, 1, 1])
0.57...

ARI 是对称的,因此具有来自相同类的成员但具有不必要分割的纯净聚类的标签会受到惩罚

>>> adjusted_rand_score([0, 0, 1, 1], [0, 0, 1, 2])
0.57...

如果类成员完全分布在不同的聚类中,则分配完全不完整,因此 ARI 非常低

>>> adjusted_rand_score([0, 0, 0, 0], [0, 1, 2, 3])
0.0

对于特别不一致的标签,ARI 可能取负值,这些标签比随机标签的预期值更差

>>> adjusted_rand_score([0, 0, 1, 1], [0, 1, 0, 1])
-0.5

请参阅 聚类性能评估中的偶然性调整,了解更多详细信息。