NLTK包提供了一个方法show_most_informative_features()
来查找这两个类的最重要特性,输出如下:
contains(outstanding) = True pos : neg = 11.1 : 1.0
contains(seagal) = True neg : pos = 7.7 : 1.0
contains(wonderfully) = True pos : neg = 6.8 : 1.0
contains(damon) = True pos : neg = 5.9 : 1.0
contains(wasted) = True neg : pos = 5.8 : 1.0
正如在这个问题How to get most informative features for scikit-learn classifiers?中所回答的,这也可以在scikit learn中工作。然而,对于二进制分类器,这个问题的答案只输出最好的特征本身。
所以我的问题是,我如何识别特征的相关类,就像上面的例子一样(杰出的在pos类中信息量最大,而seagal在否定类中信息量最大)?
编辑:事实上,我想要的是每节课最具信息性的单词列表。我该怎么做?谢谢!
基本上你需要:
classifier.classes_
访问分类器中的类标签的索引vectorizer.get_feature_names()
是不言而喻的sorted(zip(classifier.coef_[labelid], feature_names))[-n:]
检索给定类标签的分类器系数,然后按升序对其排序。我将使用https://github.com/alvations/bayesline中的一个简单示例
输入文件
train.txt
:代码:
[出局]:
左右两边的两个类可以得到相同的结果:
在二值分类的情况下,系数数组似乎已经变平。
让我们尝试用两个标签重新标记数据:
[出局]:
所以让我们做一些诊断:
[出局]:
似乎这些特征都被计算在内,然后当矢量化时,为了节省内存,它被展平,所以让我们尝试:
[出局]:
现在我们看到一些模式。。。似乎较高的系数有利于一个类,而另一个尾部有利于另一个类,所以您可以简单地执行以下操作:
[出局]:
实际上,如果您仔细阅读了@larsmans注释,他在How to get most informative features for scikit-learn classifiers?中给出了关于二进制类系数的提示
相关问题 更多 >
编程相关推荐