如何从使用sklearn的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文档,分类器对象应该有这个属性:

coef_ : array, shape = [n_class-1, n_features]分配给特征的权重(原始问题中的系数)。这仅在使用线性核时可用。coef_ 是从dual_coef_ 和 support_vectors_ 派生的只读属性。

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

谁能解释为什么我无法恢复系数?有没有解决办法?


回答:

在发布2分钟后,我再次查看了RFE的文档,并意识到了一个部分解决方案。

RFE对象具有估计器对象作为属性。因此我可以调用

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

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

然而,我仍然无法获取未选中特征的系数。对于RFE的每次迭代,它都会训练分类器并为每个特征获取新的系数。理想情况下,我希望能够访问每次迭代中学习到的系数。

(所以如果我从3000个特征开始,并使用步长300个特征,第一轮迭代我想访问3000个系数,下一轮迭代我想访问剩余2700个特征的2700个系数,第三轮迭代我想访问2400个系数,依此类推。)

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注