我删除要素时,Sklearn中的递归特征消除CV会发生变化

时间:2016-12-26 00:25:48

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

我正在使用sklearn中的RFECV模块找到最佳数量的功能,以便在2倍时产生最高的交叉验证。我使用脊回归量作为我的估算器。

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

我的数据集中有5个功能,我使用standardcaler进行了标准化。

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

当我逐个浏览所有功能时(因为递归应该这样做),我发现3实际上是最佳的。

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

我可能会遗漏一些东西,但这不是RFECV应该解决的问题吗? 有关RFECV的任何其他见解表示赞赏。

1 个答案:

答案 0 :(得分:0)

这实际上是有道理的。 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()步骤中包含的功能数量直接相关。

此外,删除具有最低回归系数的要素并不是修剪要素的最佳方法。系数反映了它对因变量的影响,而不一定是模型的准确性。