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是最有用的信息)?
编辑:实际上我想要的是每个 class 最具信息性的单词列表 . 我怎样才能做到这一点?谢谢!
3 回答
基本上你需要:
classifier.classes_ 访问分类器中的类标签的索引
vectorizer.get_feature_names() 不言自明
sorted(zip(classifier.coef_[labelid], feature_names))[-n:] 检索给定类标签的分类器系数,然后按升序对其进行排序 .
我将使用https://github.com/alvations/bayesline中的一个简单示例
输入文件
train.txt
:码:
[OUT]:
您可以在左侧和右侧使用两个类来获得相同的内容:
在二进制分类的情况下,似乎系数数组已经变平 .
让我们尝试仅使用两个标签重新标记我们的数据:
[OUT]:
那么让我们做一些诊断:
[OUT]:
看起来像功能被计算,然后当矢量化它被展平以节省内存,所以让我们尝试:
[OUT]:
现在我们看到一些模式......似乎较高的系数有利于一个类而另一个有利于另一个,所以你可以简单地这样做:
[OUT]:
实际上如果How to get most informative features for scikit-learn classifiers?系数How to get most informative features for scikit-learn classifiers?