sklearn中的normalized_mutual_info_score给出负值或大于1的值

时间:2019-01-16 20:44:13

标签: python scikit-learn

我正在尝试计算两个256 * 256图像标签之间的标准化互信息,这些标签被展平为一个数组。

在sklearn的文档中,很明显,函数normalized_mutual_info_score只能输出0到1之间的值。

但是我意识到,当比较具有很多元素的列表时,有时会给我负值或大于1的值。

这是一个上溢/下溢问题吗? (我意识到,如果将average_method更改为“ arithmetic”,“ min”或“ max”,但不确定哪种情况最适合我的情况,则会得到一个更现实的答案。)

使用sklearn 0.20.0,我将提供一个综合示例来重现该问题:

metrics.normalized_mutual_info_score([0]*100001, [0]*100000 + [1])
metrics.normalized_mutual_info_score([0]*110001, [0]*110000 + [1])

我希望下面的答案为0,但我分别得到7.999和-7.999。

1 个答案:

答案 0 :(得分:1)

正如您提到的,设置average_method会给出合理的值。

normalized_mutual_info_score([0]*100001, [0]*100000 + [1],average_method='arithmetic')
#3.166757680223739e-14

我建议使用arithmetic,因为它将成为下一版本0.22 reference中的默认值。