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

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

我正在使用递归特征估计 (RFE) 进行特征选择。它的工作原理是迭代地采用 SVM 分类器等估计器,将其拟合到数据中,然后删除权重(系数)最低的特征。

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

我使用以下代码初始化分类器对象和 RFE 对象,并将它们与数据相匹配。

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_)

并接收:

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

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

coef_ : array, shape = [n_class-1, n_features]
Weights assigned to the features (coefficients in the primal problem). This  is only 
available in the case of a linear kernel.
coef_ is a readonly property derived from dual_coef_ and support_vectors_.

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

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

最佳答案

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

RFE 对象将估算器对象作为属性。因此我可以调用

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

并获取最重要的特征的系数。 (即这会返回前 300 个特征的系数,因为我之前设置了 n_features_to_select=300)。

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

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

关于python - 如何使用sklearn从RFE中获取系数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34204898/

相关文章:

machine-learning - scikit-learn 在另一个特征的标称值组内估算特征的平均值

machine-learning - 使用 gensim 构建的 doc2vec 模型的 GridSearch

python - 标准化/缩放作为 python 中的预处理步骤

python - [sklearn][standardscaler] 我可以反转模型输出的 standardscaler 吗?

python - 使用 Python 的 2 个文件之间最常见的单词

python csv标题不在第一行

python - 为什么 `True == False is False` 评估为 False?

python - Cython 中的并行性不起作用

algorithm - 根据预先存在的主题自动生成摘要?

python - Scikit-learn f1_score 用于字符串列表