如何定义 RFECV 中要选择的特征数量?

数据挖掘 机器学习 数据挖掘 预测建模 特征选择 交叉验证
2022-03-14 15:37:53

我正在尝试为我的数据集进行特征选择阶段。

我是 ML 的新手。我有大约 60 列,正在尝试选择前 15 个功能。我开始了解 RFECV,为此我编写了如下所示的代码。我知道它n_features存在,RFE但它缺少RFECV. 有没有其他方法来分配number of features to select

model  = RandomForestClassifier(n_estimators=100, random_state=0)
# create the RFE model and select 15 attributes
rfe = RFECV(model,step=5, cv=5,min_features_to_select = 15,max_features_to_select = 15) # this doesn't work. `n_features=15` also doesn't work
rfe = rfe.fit(X_train_std, y_train)
# summarize the selection of the attributes
feat = rfe.support_
fret = rfe.ranking_
features = X.columns
print(features[feat].tolist())

有人可以帮我只获得前 15 个功能吗?我在哪里可以配置n_features参数?

目前它显示了 30 多个功能。我真的不知道它是如何或从哪里得到它的数字(30)的?

1个回答

这就是 RFECV 优于 RFE 的要点:前者通过交叉验证选择最佳数量的特征。如果您想要 15 个特征,请改用 RFE(或其他一些特征选择方法)。

API 文档

最佳特征数量的交叉验证选择

并来自用户指南

RFECV 在交叉验证循环中执行 RFE,以找到最佳的特征数量。


回复评论(我的回复对于评论来说有点太长了):

是的,RFECV 旨在产生最佳数量的特征。RFE 在每个交叉验证拆分上从完整的特征集运行到 1 个特征,然后在测试折叠上对这些模型进行评分并取平均值;然后可以采用得分最高的特征数量,然后再次运行 RFE 直到该数量的特征。这个想法是(除非有一些特殊的领域知识)RFECV 比 RFE 更好,除了它可能需要更长的运行时间。根据定义,RFECV 的准确性(在 CV 分割的训练集上)将优于任何其他固定数量特征的 RFE。

现在,通常的警告适用。RFECV 返回的特征数量不一定能将最好的数据推广到看不见的数据,特别是如果该数据与训练数据不完全一致。特别是对于小型数据集,CV 中的分割可能会影响结果,也许从较小的 CV 训练集到整个训练集应该允许更多(或更少?)特征。并且每个分割上的顶部特征可能不一样,所以当进入完整的训练集时,增加(减少?)特征数量的问题是合理的。