我正在使用sklearn中的RFECV模块找到最佳数量的功能,以便在2倍时产生最高的交叉验证。我使用脊回归量作为我的估算器。
rfecv = RFECV(estimator=ridge,step=1, cv=KFold(n_splits=2))
rfecv.fit(df, y)
我的数据集中有5个功能,我使用standardcaler进行了标准化。
我会在我的数据上运行RFECV,它会说2个功能是最佳的。但是当我删除具有最低回归系数的其中一个特征并重新运行RFECV时,它现在说3个特征是最佳的。
当我逐个浏览所有功能时(因为递归应该这样做),我发现3实际上是最佳的。
我已经使用其他数据集对此进行了测试,并且发现当我逐个删除功能并重新运行RFECV时,最佳功能数量会发生变化。
我可能会遗漏一些东西,但这不是RFECV应该解决的问题吗? 有关RFECV的任何其他见解表示赞赏。
答案 0 :(得分:0)
这实际上是有道理的。 RFECV根据可用数据推荐一定数量的功能。删除该功能后,您可以更改评分范围。
来自docs:
# Determine the number of subsets of features by fitting across
# the train folds and choosing the "features_to_select" parameter
# that gives the least averaged error across all folds.
...
n_features_to_select = max(
n_features - (np.argmax(scores) * step),
n_features_to_select)
n_features_to_select
用于确定RFE中任何特定迭代应使用的特征数量(RFECV内部/内部)。
rfe = RFE(estimator=self.estimator,
n_features_to_select=n_features_to_select,
step=self.step, verbose=self.verbose)
因此,这与您在初始rfecv.fit()步骤中包含的功能数量直接相关。
此外,删除具有最低回归系数的要素并不是修剪要素的最佳方法。系数反映了它对因变量的影响,而不一定是模型的准确性。