adjusted_rand_score#

sklearn.metrics.adjusted_rand_score(labels_true, labels_pred)#

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)

用户指南 中阅读更多内容。

Parameters:
labels_truearray-like of shape (n_samples,), dtype=int

用作参考的真实类标签。

labels_predarray-like of shape (n_samples,), dtype=int

要评估的聚类标签。

Returns:
ARIfloat

相似性分数在-0.5到1.0之间。随机标记的ARI接近0.0。1.0表示完全匹配。

See also

adjusted_mutual_info_score

调整后的互信息。

References

[Hubert1985]

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

[Steinley2004]

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

Examples

完全匹配的标签具有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