如何从使用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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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