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

时间:2016-02-12 16:21:13

标签: python scikit-learn

我在二进制文本分类任务中使用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个功能,而我希望将其用于“每个'类。 我还在here中查看了 alvas 的答案,但似乎他的代码仅在分类器为“多项式”时才有效。 ..我已成功使用此分类器,但是,在将分类器更改为DecisionTreeClassifier时,会出现以下错误:

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,它可以获得更多,当然取决于矢量化器参数..这会是一个问题吗?什么时候应该考虑应用随机投影?

1 个答案:

答案 0 :(得分:0)

如果您选择DecisionTree或RandomForest,则可以访问feature_importances_属性,以查看最有助于预测的功能。

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