交叉验证的递归特征消除如何在每次迭代中删除特征(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 在每个训练折叠上分开 RFE
s,下降到 min_features_to_select
。这些很可能会导致不同的消除顺序和最终特征,但是 none 被考虑在内:对于每个数量的结果模型,只有 scores特征,在测试折上是保留的。 (请注意,RFECV
有一个 scorer
参数,而 RFE
没有。)然后对这些分数进行平均,最佳分数对应于所选择的 n_features_
。最后,最后一个 RFE
在具有该目标特征数的整个数据集上是 运行。
我正在使用 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 在每个训练折叠上分开 RFE
s,下降到 min_features_to_select
。这些很可能会导致不同的消除顺序和最终特征,但是 none 被考虑在内:对于每个数量的结果模型,只有 scores特征,在测试折上是保留的。 (请注意,RFECV
有一个 scorer
参数,而 RFE
没有。)然后对这些分数进行平均,最佳分数对应于所选择的 n_features_
。最后,最后一个 RFE
在具有该目标特征数的整个数据集上是 运行。