v_measure_score#
- sklearn.metrics.v_measure_score(labels_true, labels_pred, *, beta=1.0)[源代码]#
给定真实标签的 V-measure 聚类评分。
该评分与
normalized_mutual_info_score
在平均选项设置为'arithmetic'
时完全相同。V-measure 是同质性(homogeneity)和完整性(completeness)之间的调和平均值。
v = (1 + beta) * homogeneity * completeness / (beta * homogeneity + completeness)
此指标与标签的绝对值无关:类别或聚类标签值的任何排列都不会改变评分值。
此外,该指标是对称的:将
label_true
与label_pred
互换将返回相同的评分值。当真实的基础事实(ground truth)未知时,这对于衡量同一数据集上两种独立标签分配策略的一致性非常有用。更多信息请参阅用户指南。
- 参数:
- labels_true形状为 (n_samples,) 的类数组对象
用作参考的真实类别标签。
- labels_pred形状为 (n_samples,) 的类数组对象
要评估的聚类标签。
- beta浮点数,默认值=1.0
赋予
同质性(homogeneity)
和完整性(completeness)
的权重比。如果beta
大于1,则计算中完整性
的权重更大。如果beta
小于1,则同质性
的权重更大。
- 返回值:
- 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]) 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