use*_*106 3 python machine-learning feature-selection scikit-learn 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)
Run Code Online (Sandbox Code Playgroud)
然后我尝试打印系数
print ('coefficients',svc.coef_)
Run Code Online (Sandbox Code Playgroud)
并收到:
AttributeError: 'RFE' object has no attribute 'dual_coef_'
Run Code Online (Sandbox Code Playgroud)
根据sklearn 文档,分类器对象应该具有此属性:
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_.
Run Code Online (Sandbox Code Playgroud)
我使用的是线性内核,所以这不是问题。
谁能解释为什么我无法恢复系数?有办法解决这个问题吗?
发布后 2 分钟,我再次查看了RFE文档并实现了部分解决方案。
RFE 对象将估计器对象作为属性。因此我可以打电话
print ('coefficients',rfe.estimator_.coef_)
Run Code Online (Sandbox Code Playgroud)
并获取最重要的选定特征的系数。(即这会返回前 300 个特征的系数,因为我之前设置了 n_features_to_select=300)。
但是,我仍然无法获得其余未选择特征的系数。对于 RFE 的每次迭代,它都会训练分类器并获取每个特征的新系数。理想情况下,我想访问每次迭代时学习到的系数。
(因此,如果我从 3000 个特征开始,并使用步长 300 个特征,第一次迭代我想要访问 3000 个系数,下一次迭代我想要剩余 2700 个特征的 2700 个系数,第三次迭代我想要访问 2400 个系数, ETC。)
| 归档时间: |
|
| 查看次数: |
9571 次 |
| 最近记录: |