我在实现Python的机器学习库提供的互信息功能时遇到了一些问题,特别是: sklearn.metrics.mutual_info_score(labels_true,labels_pred,conventive=None)
(http://scikit-learn.org/stable/modules/generated/sklearn.metrics.mutual_info_score.html)
我正在尝试实现我在斯坦福大学NLP教程站点中找到的示例:
站点位于此处:http://nlp.stanford.edu/IR-book/html/htmledition/mutual-information-1.html#mifeatsel2
问题是我总是得到不同的结果,还不知道原因。
我得到了互信息和特性选择的概念,只是不明白它是如何在Python中实现的。我所做的是基于NLP站点示例为mutual_info_score方法提供两个数组,但是它输出不同的结果。另一个有趣的事实是,不管你怎么玩,改变数组中的数字,你很可能得到相同的结果。我应该使用Python特有的另一个数据结构吗?这背后的问题是什么?如果有人在过去成功地使用过这个功能,它将对我有很大的帮助,谢谢你的时间。
下面的代码应该提供一个结果:
0.00011053558610110256
我今天遇到了同样的问题。经过几次试验,我发现了真正的原因:如果严格遵循NLP教程,就要学习log2,但是sklearn.metrics.mutual_info_score使用自然对数(以e为基数,欧拉数)。我没有在sklearn文档中找到这个细节。。。
我的确认人是:
如果你把这个
np.log2
改成np.log
,我想它会给你和sklearn一样的答案。唯一的区别是,当这个方法返回0时,sklearn将返回一个非常接近0的数字。(当然,如果不关心日志库,可以使用sklearn,我的代码只是用于演示,性能很差…)仅供参考,1)
sklearn.metrics.mutual_info_score
接受列表和np.array;2)sklearn.metrics.cluster.entropy
也使用log,而不是log2编辑:至于“同一个结果”,我不知道你到底是什么意思。一般来说,向量中的值并不重要,重要的是值的“分布”。你关心的是P(X=X),P(Y=Y)和P(X=X,Y=Y),而不是X,Y的值
相关问题 更多 >
编程相关推荐