如何使用sklearn从RFE获取系数?

时间:2015-12-10 14:49:45

标签: python machine-learning scikit-learn feature-selection rfe

我正在使用递归特征估计(RFE)进行特征选择。这通过迭代地采用诸如SVM分类器的估计器,将其拟合到数据,以及移除具有最低权重(系数)的特征来工作。

我能够将其与数据相匹配并执行特征选择。但是,我想从RFE中恢复每个特征的学习权重。

我使用以下代码初始化分类器对象和RFE对象,并将其与数据拟合。

  var item = MenuBox.SelectedItem.ToString();
然后我尝试打印系数

    svc = SVC(C=1, kernel="linear")
    rfe = RFE(estimator=svc, n_features_to_select=300, step=0.1)
    rfe.fit(all_training, training_labels)

并收到:

print ('coefficients',svc.coef_)

根据sklearn documentation,分类器对象应该具有以下属性:

AttributeError: 'RFE' object has no attribute 'dual_coef_'

我使用的是线性内核,所以这不是问题。

有谁可以解释为什么我无法恢复系数?有没有办法解决这个问题?

2 个答案:

答案 0 :(得分:2)

发布后2分钟我又看了RFE的文档并实现了部分解决方案。

RFE对象将估算对象作为属性。因此我可以致电

print ('coefficients',rfe.estimator_.coef_)

获取最佳选定要素的系数。 (即返回前300个特征的系数,因为我之前设置了n_features_to_select = 300)。

但是,我仍然无法获得剩余未选择功能的系数。对于RFE的每次迭代,它训练分类器并获得每个特征的新系数。理想情况下,我想访问每次迭代时学习的系数。

(所以如果我从3000个特征开始,并使用步长300特征,第一次迭代我想要访问3000个系数,下一次迭代我想要其余2700个特征的2700个系数,我要访问的第三个迭代2400个系数等。)

答案 1 :(得分:0)

from sklearn.linear_model import LogisticRegression

from sklearn.feature_selection import RFE

reg = LogisticRegression()

rfe = RFE(reg, no of features u want to select)

rfe.fit(X, Y)

print(rfe.support_)

您将了解哪些功能很重要,以及更好的外观方式。