【问题标题】:sklearn RFE with GaussianProcessClassifiersklearn RFE 与 GaussianProcessClassifier
【发布时间】:2021-08-30 23:29:48
【问题描述】:

我正在使用递归特征消除 (RFE) 管道:

from sklearn.feature_selection import RFE

c_GAUSS = GaussianProcessClassifier()
rfe = RFE(estimator=c_GAUSS)

但是,我得到一个错误:

ValueError: when `importance_getter=='auto'`, the underlying 
estimator GaussianProcessClassifier should have `coef_` or 
`feature_importances_` attribute. Either pass a fitted estimator to 
feature selector or call fit before calling transform.

使用 SVC,我刚刚解决了这个问题,方法是在 SVC 中添加一个系数 c_SVC = SVC(C = 1)

由于 GPC 没有系数,这里有什么可能的解决方法吗?

【问题讨论】:

    标签: python scikit-learn


    【解决方案1】:

    根据RFE documentation,估计器需要有关特征重要性的信息(例如estimator.coef_estimator.feature_importances_)。不幸的是,由于 GP 中的分类方式,GPC 估计器没有这个属性。

    根据Cross Validated 上的回答,在 GP 分类中确定特征重要性的一种方法是通过一次连续遗漏一个特征来确定分类错误或您正在使用的其他指标。这是耗时的,默认情况下 GP 不会执行此操作。但是,这需要实现您自己的 RFE 功能(不太难)。

    【讨论】:

      【解决方案2】:

      恐怕没有。正如documentation of RFE 所述,估计器应该“为特征分配权重”。兼容的估计器必须通过coef_feature_importances_ 属性公开这些权重。看看RFE的implementation,很简单。

      我对@9​​87654326@不是很熟悉,但是,这种分类器似乎不执行任何特征评分。如果您认为有一种自然的方法可以在训练后为 GPC 评分功能,您可以自己扩展 GaussianProcessClassifier

      from sklearn.utils.validation import check_X_y
      from sklearn.utils.estimator_checks import check_estimator
      class WeightedGaussianProcessClassifier(GaussianProcessClassifier):
          def fit(self, X, y):
              X, y = check_X_y(X, y)
              super().fit(X,y)
              # Implement here your weight
              self.feature_importances_ = ...
              return self
      check_estimator(WeightedGaussianProcessClassifier)
      
      

      按照说明here 了解如何开发您自己的估算器。这样,您就可以使估算器与 RFE 类兼容。

      【讨论】:

        猜你喜欢
        • 2015-09-27
        • 2020-07-14
        • 2017-02-25
        • 2018-05-21
        • 2020-07-04
        • 2021-03-25
        • 2020-03-24
        • 2016-03-16
        • 2019-01-11
        相关资源
        最近更新 更多