我在二进制文本分类任务中使用scikit-learn,我想确定"每个"类的最佳特征,因此,根据它们,我的分类器可以识别正确的类。
任何指示我该怎么做? 现在我正在使用 CountVectorizer,我可以看到两个类最常见的功能,但它没有向我显示哪个功能属于哪个类。 此外,最常见的可能并不总是最好的,因为它对于两个类来说都是通用的,这意味着它将样本识别为 A 类或 B 类并不那么好。
这是我正在做的事情:
vec=CountVectorizer( tokenizer=tokens2,max_features=2000)
x=vec.fit_transform(X_train).toarray()
print x
print len(x[0]) # this should print the no. of feature which is 2000 in my case
print len(x) # this should print the no. of samples which is 980
我知道max_features将词汇量限制为仅针对两个类的前 K 个功能,我希望它适用于"每个"类。我也在这里查看了 alvas 的答案,但似乎他的代码仅在分类器为"多项式NB"时才有效。我已经用这个分类器成功地使用了它,但是,当将分类器更改为决策树分类器时,它会出现以下错误:
AttributeError: 'DecisionTreeClassifier' object has no attribute 'coef_'
当将分类器更改为 SVC"线性"时,它会打印我无法理解的不同结果。
0 (0, 22699) 2.2089966234e-05
(0, 17115) 0.00011044983117
(0, 17106) 2.2089966234e-05
(0, 17096) 2.2089966234e-05
(0, 17094) 2.2089966234e-05
(0, 17079) 2.2089966234e-05
(0, 17077) 2.2089966234e-05
(0, 17064) 2.2089966234e-05
(0, 17047) 2.2089966234e-05
(0, 10872) 0.00011044983117
(0, 10871) 8.83598649358e-05
.
.
1 (0, 22699) 2.2089966234e-05
(0, 17115) 0.00011044983117
(0, 17106) 2.2089966234e-05
(0, 17096) 2.2089966234e-05
(0, 17094) 2.2089966234e-05
(0, 17079) 2.2089966234e-05
(0, 17077) 2.2089966234e-05
(0, 17064) 2.2089966234e-05
(0, 17047) 2.2089966234e-05
(0, 10872) 0.00011044983117
(0, 10871) 8.83598649358e-05
(0, 10870) 0.000198809696106
(0, 10516) 0.00011044983117
- 还想提一下,我拥有的功能总数是 16908,当然,根据矢量化器参数,它可以获得更多功能。 这会是一个问题吗? 我什么时候应该考虑应用随机投影?
如果选择决策树或随机森林,则可以访问feature_importances_属性,以查看对预测贡献最大的特征。
但这不是一个班级的全球贡献。