我正在使用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)
我在documentation或user guide中找不到更具体的东西
您的猜测(现在已编辑)认为有一种算法可以交叉验证消除步骤本身,但
RFECV
不是这样工作的。(事实上,这样的算法可能会稳定RFE本身,但它不会告知最佳特征数量,这是RFECV
的目标。)相反,
RFECV
在每个训练折叠上运行单独的RFE
,直到min_features_to_select
。这些很可能会导致不同的消除顺序和最终特征,但没有考虑到这一点:对于每个特征数量,仅保留测试折叠上结果模型的分数。(注意RFECV
有一个scorer
参数RFE
缺少。)然后对这些分数进行平均,最佳分数对应于所选的n_features_
。最后,最后一个RFE
在具有该目标数量的特征的整个数据集上运行source code
相关问题 更多 >
编程相关推荐