如何识别已用于对每个类别进行分类的最佳特征
Posted
技术标签:
【中文标题】如何识别已用于对每个类别进行分类的最佳特征【英文标题】:How to Identify the best features that have been used to classify each class 【发布时间】: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,当然,它可以根据矢量化器参数获得更多。这会是一个问题吗?我什么时候应该考虑应用随机投影?
【问题讨论】:
你能告诉我们你的步骤吗? 我已经编辑了我的问题并添加了它们。 【参考方案1】:如果您选择 DecisionTree 或 RandomForest,您可以访问 feature_importances_ 属性以查看对预测最有贡献的特征。
但这不是针对单个班级的全球贡献。
【讨论】:
以上是关于如何识别已用于对每个类别进行分类的最佳特征的主要内容,如果未能解决你的问题,请参考以下文章