我可以通过交叉验证执行详尽搜索以进行特征选择吗?

机器算法验证 交叉验证 模型选择 特征选择
2022-03-11 18:00:35

我一直在阅读一些关于特征选择和交叉验证的帖子,但我仍然对正确的程序有疑问。

假设我有一个包含 10 个特征的数据集,我想选择最好的特征。还假设我正在使用最近邻分类器。我可以使用交叉验证执行详尽的搜索来估计错误率作为选择最佳特征的指南吗?类似于以下伪代码

for i=1:( 2^10 -1)
   error(i)= crossval(1-nn, selected_fetures(i))
end   

i=find(erro(i)==min(error(i));
selected_fetures= selected_features(i);

我试图在这个伪代码中解释的是,我正在对所有可能的特征组合运行交叉验证,并选择误差最小的组合。

我认为这个过程是正确的,因为我正在执行详尽的搜索。特征的选择不是基于整个数据集,而是基于每个分区的平均误差。我是否用这种特征选择过度拟合模型?

3个回答

是的,在这种情况下,您可能会过度拟合,请参阅我对上一个问题的回答要记住的重要一点是,交叉验证是基于有限数据样本对泛化性能的估计。由于它基于有限的数据样本,估计量具有非零方差,因此在一定程度上减少交叉验证误差将导致真正改善泛化误差的模型选择和简单利用评估它的特定数据样本的随机特性。后一种类型的模型选择可能会使泛化性能更差而不是更好。

每当您基于有限的数据样本最小化任何统计数据时,过度拟合都是一个潜在的问题,交叉验证也不例外。

我认为这是一个有效的特征选择程序,它不会比其他特征选择程序更容易过度拟合。这个过程的问题是它的计算复杂度很大,几乎不能用于真实的数据集。

我认为,如果您在交叉验证的每一折内进行特征选择,您会没事的。正如上面的海报所述,您将使用从上述过程中获得的选定特征在任何模型中过拟合。这是因为所有数据对特征选择例程都有一定的影响。