normalized_mutual_info_score#

sklearn.metrics.normalized_mutual_info_score(labels_true, labels_pred, *, average_method='arithmetic')#

标准化两个聚类之间的互信息。

标准化互信息(NMI)是对互信息(MI)分数的归一化,以将结果缩放到0(无互信息)和1(完全相关)之间。在此函数中,互信息通过某种广义均值进行归一化,该均值由 average_method 定义,涉及 H(labels_true)H(labels_pred)

此度量未针对偶然性进行调整。因此,可能更倾向于使用:func:adjusted_mutual_info_score

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

此度量 furthermore 对称:切换 label_truelabel_pred 将返回相同的分数值。当真实的基础真相未知时,这可以用于测量同一数据集上两种独立标签分配策略的一致性。

更多信息请参阅 用户指南

Parameters:
labels_trueint 类数组,形状为 (n_samples,)

数据的分区到不相交的子集。

labels_predint 类数组,形状为 (n_samples,)

数据的分区到不相交的子集。

average_method{‘min’, ‘geometric’, ‘arithmetic’, ‘max’}, 默认=’arithmetic’

如何计算分母中的归一化因子。

Added in version 0.20.

Changed in version 0.22: average_method 的默认值从’geometric’改为’arithmetic’。

Returns:
nmifloat

基于自然对数的归一化纳特(nats)之间的分数,范围为0.0到1.0。1.0表示完全完整的标签。

See also

v_measure_score

V-Measure(带有算术平均选项的NMI)。

adjusted_rand_score

调整兰德指数。

adjusted_mutual_info_score

调整互信息(针对偶然性调整)。

Examples

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

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

如果类成员完全分散在不同的聚类中,分配是完全不完整的,因此NMI为空:

>>> normalized_mutual_info_score([0, 0, 0, 0], [0, 1, 2, 3])
... 
0.0