【发布时间】:2016-05-23 21:14:21
【问题描述】:
我在二进制文本分类任务中使用 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 答案,但似乎他的代码仅在分类器为“MultinomialNB”时才有效。我已经成功地将它与这个分类器一起使用,但是,在更改时分类器到 DecisionTreeClassifier 它会出现以下错误:
AttributeError: 'DecisionTreeClassifier' object has no attribute 'coef_'
当将分类器更改为 SVC 'linear' 时,它会打印出我无法理解的不同结果。
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,当然,它可以根据矢量化器参数获得更多。这会是一个问题吗?我什么时候应该考虑应用随机投影?
【问题讨论】:
-
你能告诉我们你的步骤吗?
-
我已经编辑了我的问题并添加了它们。
标签: python scikit-learn