使用 SGD 分类器和 GridsearchCV 寻找***特征

Posted

技术标签:

【中文标题】使用 SGD 分类器和 GridsearchCV 寻找***特征【英文标题】:Finding top features with SGD classifier & GridsearchCV 【发布时间】:2019-03-09 17:20:41 【问题描述】:
# Implementing Linear_SGD classifier
clf = linear_model.SGDClassifier(max_iter=1000)
Cs = [0.0001,0.001, 0.01, 0.1, 1, 10]
tuned_parameters = ['alpha': Cs]
model = GridSearchCV(clf, tuned_parameters, scoring = 'accuracy', cv=2)
model.fit(x_train, Y_train)

如何从以下代码中找到最重要的功能,因为它显示错误 feature_count_。

这里我的矢量化器是 BOW,分类器是带有铰链损失的 SGD 分类器

def important_features(vectorizer,classifier,n=20):
    class_labels = classifier.classes_
    feature_names =vectorizer.get_feature_names()
    topn_class1 = sorted(zip(classifier.feature_count_[0], 
    feature_names),reverse=True)[:n]
    topn_class2 = sorted(zip(classifier.feature_count_[1], 
    feature_names),reverse=True)[:n]
    print("Important words in negative reviews")

我尝试使用上面的代码,但它显示错误为

AttributeError                            Traceback (most recent call last)
<ipython-input-77-093048fb461e> in <module>()
----> 1 important_features(Timesort_X_vec,model)

<ipython-input-75-10b9d6ee3f81> in important_features(vectorizer, 
classifier, n)
  2     class_labels = classifier.classes_
  3     feature_names =vectorizer.get_feature_names()
   ----> 4     topn_class1 = sorted(zip(classifier.feature_count_[0], 
feature_names),reverse=True)[:n]
  5     topn_class2 = sorted(zip(classifier.feature_count_[1], 
feature_names),reverse=True)[:n]
  6     print("Important words in negative reviews")

 AttributeError: 'GridSearchCV' object has no attribute 'feature_count_'.

由于我是编程新手,请帮我解答。谢谢你

【问题讨论】:

【参考方案1】:

您的错误原因是您使用的 SGDClassifier 没有feature_count_ 属性(检查docs 中的可用属性):

from sklearn.linear_model import SGDClassifier  

X = [[0., 0.], [1., 1.]]
y = [0, 1]
clf = SGDClassifier(loss="hinge", penalty="l2", max_iter=5)
clf.fit(X, y) 

clf.feature_count_
[...]
AttributeError: 'SGDClassifier' object has no attribute 'feature_count_'

最初我认为问题在于您使用的是 GridSearchCV 对象,但事实并非如此,因为函数内的行 class_labels = classifier.classes_ 不会引发任何错误;虽然从文档看来 SGDClassifier 甚至没有 classes_ 属性,但实际上它确实有:

clf.classes_
# array([0, 1])

我知道在 scikit-learn 中包含 feature_count_ 属性的唯一分类器是 BernoulliNB、MultinomialNB 和 ComplementNB,它们都属于朴素贝叶斯家族,尽管我不太确定它是否可以使用你打算在这里使用它...

【讨论】:

以上是关于使用 SGD 分类器和 GridsearchCV 寻找***特征的主要内容,如果未能解决你的问题,请参考以下文章

尝试使用 GridSearchCV 拟合神经网络分类器的值错误

如果我们在 SGD 分类器上使用校准后的 cv 作为线性核,如何获得特征权重

GridSearchCV 参数不能改善分类

Scikit-learn 多输出分类器使用:GridSearchCV、Pipeline、OneVsRestClassifier、SGDClassifier

在 python 中使用 gridsearchcv 进行梯度提升分类器的参数调整

sklearn GridSearchCV:如何获得分类报告?