交叉验证的递归特征消除如何在每次迭代中删除特征(sklearn RFECV)?

How does cross-validated recursive feature elimination drop features in each iteration (sklearn RFECV)?

我正在使用 sklearn.feature_selection.RFECV 来减少我最终模型中的特征数量。使用非交叉验证的 RFE,您可以准确选择 select 的特征数量。但是,对于 RFECV,您只能指定 min_number_features_to_select,这更像是一个下限。

那么RFECV是如何在每次迭代中丢弃特征的呢?我理解正常的 RFE,但交叉验证是如何发挥作用的?

这是我的实例:

clf = GradientBoostingClassifier(loss='deviance', learning_rate=0.03, n_estimators=500,
                                 subsample=1.0, criterion='friedman_mse', min_samples_leaf=100,
                                 max_depth=7, max_features='sqrt', random_state=123)
rfe = RFECV(estimator=clf, step=1, min_features_to_select=35, cv=5, scoring='roc_auc',
            verbose=1, n_jobs=-1)
rfe.fit(X_train, y_train)

我在 documentation or user guide 中找不到更具体的内容。

您的猜测(现已删除)想到了一种交叉验证消除步骤本身的算法,但这不是 RFECV 的工作原理。 (事实上​​ ,这样的算法可能会稳定 RFE 本身,但它不会告知最佳特征数量,这就是 RFECV 的目标。)

相反,RFECV 运行s 在每个训练折叠上分开 RFEs,下降到 min_features_to_select。这些很可能会导致不同的消除顺序和最终特征,但是 none 被考虑在内:对于每个数量的结果模型,只有 scores特征,在测试折上是保留的。 (请注意,RFECV 有一个 scorer 参数,而 RFE 没有。)然后对这些分数进行平均,最佳分数对应于所选择的 n_features_。最后,最后一个 RFE 在具有该目标特征数的整个数据集上是 运行。

source code