v_measure_score#

sklearn.metrics.v_measure_score(labels_true, labels_pred, *, beta=1.0)#

V-measure 聚类标签给定一个真实标签。

这个分数与 normalized_mutual_info_score 使用 'arithmetic' 选项进行平均的结果相同。

V-measure 是同质性和完整性之间的调和平均数:

v = (1 + beta) * homogeneity * completeness
     / (beta * homogeneity + completeness)

这个度量独立于标签的绝对值:类或聚类标签值的排列不会以任何方式改变分数值。

这个度量还是对称的:交换 label_truelabel_pred 将返回相同的分数值。这在真实标签未知时,测量两种独立的标签分配策略在同一数据集上的协议时非常有用。

更多信息请参阅 用户指南

Parameters:
labels_truearray-like of shape (n_samples,)

用作参考的真实类标签。

labels_predarray-like of shape (n_samples,)

要评估的聚类标签。

betafloat, default=1.0

权重分配给 homogeneitycompleteness 的比例。如果 beta 大于 1,计算中 completeness 的权重更大。如果 beta 小于 1, homogeneity 的权重更大。

Returns:
v_measurefloat

0.0 到 1.0 之间的分数。1.0 表示完全完整的标签。

See also

homogeneity_score

聚类标签的同质性度量。

completeness_score

聚类标签的完整性度量。

normalized_mutual_info_score

标准化互信息。

References

Examples

完美的标签既同质又完整,因此得分为 1.0:

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

将所有类成员分配到相同聚类的标签是完整的但不同质,因此会被惩罚:

>>> print("%.6f" % v_measure_score([0, 0, 1, 2], [0, 0, 1, 1]))
0.8...
>>> print("%.6f" % v_measure_score([0, 1, 2, 3], [0, 0, 1, 1]))
0.66...

具有来自相同类的成员的纯聚类是同质的,但不必要的分裂会损害完整性,因此也会惩罚 V-measure:

>>> print("%.6f" % v_measure_score([0, 0, 1, 1], [0, 0, 1, 2]))
0.8...
>>> print("%.6f" % v_measure_score([0, 0, 1, 1], [0, 1, 2, 3]))
0.66...

如果类成员完全分散在不同的聚类中,分配是完全不完整的,因此 V-Measure 为零:

>>> print("%.6f" % v_measure_score([0, 0, 0, 0], [0, 1, 2, 3]))
0.0...

包含来自完全不同类的样本的聚类完全破坏了标签的同质性,因此:

>>> print("%.6f" % v_measure_score([0, 0, 1, 1], [0, 0, 0, 0]))
0.0...