v_measure_score#

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

给定地面实况的 V-measure 聚类标签。

该分数等同于使用 'arithmetic'(算术平均)选项的 normalized_mutual_info_score

V-measure 是同质性(homogeneity)和完整性(completeness)之间的调和平均数。

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

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

该指标具有对称性:交换 label_truelabel_pred 将返回相同的分数。当不知道真实地面真值(ground truth)时,这对于衡量同一数据集上两种独立标签分配策略的一致性非常有用。

用户指南 中了解更多信息。

参数:
labels_true形状为 (n_samples,) 的类数组

用作参考的真实类别标签。

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

要评估的簇标签。

betafloat, default=1.0

分配给 homogeneity(同质性)与 completeness(完整性)权重的比例。如果 beta 大于 1,则 completeness 在计算中权重更大。如果 beta 小于 1,则 homogeneity 权重更大。

返回:
v_measurefloat

分数介于0.0和1.0之间。1.0表示完全完整的标签。

另请参阅

homogeneity_score

聚类标签的同质性指标。

completeness_score

聚类标记的完整性指标。

normalized_mutual_info_score

归一化互信息(Normalized Mutual Information)。

References

示例

完美的标签既是同质的又是完整的,因此分数为 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.67

具有纯净簇(成员来自相同类别)的标注是同质的,但不必要的拆分会损害完整性,因此也会降低 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.67

如果类成员被完全拆分到不同的簇中,则分配是完全不完整的,因此 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