【问题标题】:Recursive Feature Elimination CV in Sklearn changes when I remove features当我删除特征时,Sklearn 中的递归特征消除 CV 会发生变化
【发布时间】:2017-05-10 13:52:31
【问题描述】:

我正在使用 sklearn 中的 RFECV 模块来找到最佳的特征数量,以在 2 折上产生最高的交叉验证。我使用岭回归器作为我的估计器。

rfecv = RFECV(estimator=ridge,step=1, cv=KFold(n_splits=2))
rfecv.fit(df, y)

我的数据集中有 5 个使用标准缩放器标准化的特征。

我将对我的数据运行 RFECV,它会说 2 个功能是最佳的。但是当我删除回归系数最低的特征之一并重新运行 RFECV 时,它现在说 3 个特征是最佳的。

当我一次完成所有功能时(正如递归应该做的那样),我发现 3 实际上是最佳的。

我已经用其他数据集对此进行了测试,发现当我一次删除一个特征并重新运行 RFECV 时,最佳特征数量会发生变化。

我可能遗漏了一些东西,但这不正是 RFECV 应该解决的问题吗? 感谢您对 RFECV 的任何其他见解。

【问题讨论】:

    标签: python-2.7 recursion scikit-learn feature-selection


    【解决方案1】:

    这实际上是有道理的。 RFECV 根据可用数据推荐一定数量的特征。当您删除该功能时,您会更改评分范围。

    来自docs

    # Determine the number of subsets of features by fitting across
    # the train folds and choosing the "features_to_select" parameter
    # that gives the least averaged error across all folds.
    

    ...

    n_features_to_select = max(
        n_features - (np.argmax(scores) * step),
        n_features_to_select)
    

    n_features_to_select 用于确定在 RFE 中对于任何特定迭代(RFECV 内部/底层)应使用多少特征。

    rfe = RFE(estimator=self.estimator,
              n_features_to_select=n_features_to_select,
              step=self.step, verbose=self.verbose)
    

    因此,这与您在初始 rfecv.fit() 步骤中包含的功能数量直接相关。

    另外,去除回归系数最低的特征并不是修剪特征的最佳方式。该系数反映了它对因变量的影响,不一定是模型的准确性。

    【讨论】:

      猜你喜欢
      • 2018-05-21
      • 2019-01-26
      • 2020-03-24
      • 1970-01-01
      • 2021-05-06
      • 2018-05-23
      • 2018-10-28
      • 1970-01-01
      • 2019-07-15
      相关资源
      最近更新 更多