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

2024-09-20 23:02:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用sklearn.feature_selection.RFECV来减少最终模型中的特性数量。使用非交叉验证的RFE,您可以选择要选择的功能的确切数量。但是,使用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)

我在documentationuser guide中找不到更具体的东西


Tags: to数量train特性sklearnminselect交叉
1条回答
网友
1楼 · 发布于 2024-09-20 23:02:56

您的猜测(现在已编辑)认为有一种算法可以交叉验证消除步骤本身,但RFECV不是这样工作的。(事实上,这样的算法可能会稳定RFE本身,但它不会告知最佳特征数量,这是RFECV的目标。)

相反,RFECV在每个训练折叠上运行单独的RFE,直到min_features_to_select。这些很可能会导致不同的消除顺序和最终特征,但没有考虑到这一点:对于每个特征数量,仅保留测试折叠上结果模型的分数。(注意RFECV有一个scorer参数RFE缺少。)然后对这些分数进行平均,最佳分数对应于所选的n_features_。最后,最后一个RFE在具有该目标数量的特征的整个数据集上运行

source code

相关问题 更多 >

    热门问题