如何识别用于对每个类进行分类的最佳特征



我在二进制文本分类任务中使用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_属性,以查看对预测贡献最大的特征。

但这不是一个班级的全球贡献。

最新更新