v_measure_score#

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

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

此分数与normalized_mutual_info_score使用平均值的'arithmetic'选项相同。

V-measure是同质性和完整性的调和平均数。

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

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

此外,此度量是对称的:交换label_truelabel_pred将返回相同的分数值。当不知道真实的真实情况时,这对于测量两种独立的标签分配策略在同一数据集上的 agreement 非常有用。

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

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

用作参考的真实类标签。

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

要评估的聚类标签。

beta浮点数,默认为 1.0

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

返回:
v_measure浮点数

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

另请参见

homogeneity_score

聚类标签的同质性度量。

completeness_score

聚类标签的完整性度量。

normalized_mutual_info_score

归一化互信息。

参考文献

示例

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

>>> from sklearn.metrics.cluster import v_measure_score
>>> v_measure_score([0, 0, 1, 1], [0, 0, 1, 1])
np.float64(1.0)
>>> v_measure_score([0, 0, 1, 1], [1, 1, 0, 0])
np.float64(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...