我正在尝试计算两个 256*256 图像标签之间的规范化互信息,扁平化成一个数组。
在 sklearn 的文档中,很明显函数normalized_mutual_info_score应该只输出 0 到 1 之间的值。
但是,我意识到,在比较具有大量元素的列表时,有时会给我负值或大于 1 的值。
是溢出/下溢问题吗?(我意识到,如果我average_method更改为"算术"、"最小"或"最大值",我得到了一个更现实的答案,但不确定在我的情况下使用哪一个最合适。
使用 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。
正如您提到的,设置average_method会给出合理的值。
normalized_mutual_info_score([0]*100001, [0]*100000 + [1],average_method='arithmetic')
#3.166757680223739e-14
我建议使用 arithmetic
,因为它将成为下一个版本 0.22 中的默认值,参考。