原则上:
使用在整个数据集中训练的单个模型进行预测(因此只有一组功能)。交叉验证仅用于估计在整个数据集上训练的单个模型的预测性能。使用交叉验证至关重要,因为在每一次折叠中,您都要重复用于拟合主要模型的整个过程,否则,您最终可能会在性能上产生很大的乐观偏差。
要了解为什么会发生这种情况,请考虑一个具有1000个二元特征但只有100个案例的二元分类问题,其中案例和要素都是纯随机的,因此要素与案例之间没有任何统计关系。如果我们在整个数据集上训练主要模型,由于特征多于案例,我们总是可以在训练集上实现零误差。我们甚至可以找到“信息性”功能的子集(碰巧是偶然关联的)。如果然后仅使用那些功能执行交叉验证,我们将获得比随机猜测更好的性能估计。原因是,在交叉验证过程的每一步中,都有一些关于用于测试的暂留案例的信息,因为这些案例被选择是因为它们很好地预测了所有特征,因此选择了这些特征,包括那些举行的。当然,真正的错误率将是0.5。
如果我们采用适当的程序,并在每个折叠中执行特征选择,那么在该折叠中使用的特征选择中就不再有任何关于保留案例的信息。如果使用正确的过程,在这种情况下,您将得到大约0.5的错误率(尽管对于不同的数据集实现,它的错误率会有所不同)。
好的论文是:
Christophe Ambroise,Geoffrey J. McLachlan,“基于微阵列基因表达数据的基因提取中的选择偏见”,PNAS,http: //www.pnas.org/content/99/10/6562.abstract
这与OP和
加文·考利(Gavin C. Cawley),尼古拉·LC·塔尔伯特(Nicola LC Talbot),“模型选择中的过拟合和性能评估中的后续选择偏差”,JMLR 11(Jul):2079−2107,2010年http://jmlr.csail.mit.edu/papers /v11/cawley10a.html
这表明在模型选择中很容易发生相同的事情(例如,调整SVM的超参数,在CV过程的每次迭代中也需要重复此操作)。
在实践中:
我建议您使用Bagging,并使用袋外错误评估性能。您将获得使用许多功能的委员会模型,但这实际上是一件好事。如果仅使用单个模型,则很可能会过度拟合特征选择标准,最终得到的模型预测要比使用大量特征的模型差。
艾伦·米勒斯(Alan Millers)关于回归子集选择的书(关于统计和应用概率的查普曼和霍尔专着,第95卷)给出了很好的建议(第221页),如果预测性能是最重要的,那么就不要进行任何特征选择,只需改用岭回归。那就是关于子集选择的书!!!; o)