【问题标题】:How to get the coefficients from RFE using sklearn?如何使用 sklearn 从 RFE 获取系数?
【发布时间】:2016-03-16 06:23:08
【问题描述】:

我正在使用递归特征估计 (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_.

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

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

【问题讨论】:

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


    【解决方案1】:

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

    RFE 对象具有估计器对象作为属性。因此我可以打电话

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

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

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

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

    【讨论】:

    • 您可以手动复制 RFE 机制,并在每一步保存coef_ 向量。对于每一步,将 SVC 拟合到数据,保存 coef_ 向量并删除系数最低的 step % 特征。顺便说一句,使用更新来编辑您的帖子比将更新作为答案发布更好。
    • 作为旁注,访问 svc.coef_ 是不可能的,因为分类器 svc 在提供给 rfe 时会被复制。 rfe.estimator_ 允许访问在所选特征上训练的复制模型。您确实可以复制 rfe 的功能,或者创建一个继承自 rfe 的新类,并在每次迭代时将 coefs 保存到一个新参数中。
    【解决方案2】:
    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_)
    

    您将了解哪些功能很重要以及如何更好地查看它。

    【讨论】:

    • 这只是为选定的功能返回一个带有True 的布尔numpy ndarray。
    猜你喜欢
    • 2017-02-25
    • 1970-01-01
    • 2015-09-27
    • 2016-05-12
    • 2020-07-14
    • 1970-01-01
    • 2023-04-07
    • 2021-11-12
    • 2018-05-21
    相关资源
    最近更新 更多