引言
在机器学习中,交叉验证(cross validation)是一种用来做模型选择的方法。如果给定的样本数据充足,我们可以随机地将数据集切分成训练集、验证集和测试集,训练集用来训练模型,验证集用于模型的选择,而测试集用于最终对方法进行评估。然而实际情况中数据往往是不够充分的,为了更好地选择模型,可以使用交叉验证的方法。
原理
具体而言,当我们开始一个机器学习的建模工作时,首先会将数据集切分成训练集和测试集,我们在训练集上进行模型的训练和参数的调优,最终到测试集上验证模型的效果。为了能够选择出最优的模型和参数,我们通常会在训练集中再切分出一小部分作为验证集,通过观察模型在验证集上的效果来评估其好坏。但是如果训练集的数目不太多,那么不同验证集的选择方式可能会对模型的效果有很大影响。因此,我们可以采用交叉验证的方式。最常用的是K-fold交叉验证法,我们随机的将训练集等分为K份,每次训练时取其中的一份作为验证集,剩下的作为训练集,通过观察模型在K次实验中的各个指标的平均值,可以对模型的效果有一个比较准确地了解,而不至于受到验证集选择方式的影响。我们可以设置不同的模型参数并逐一观察它们的平均效果,最终可以选择出一组最优的参数应用到测试集上。
测试集的选择
前面我们谈到了使用交叉验证来进行参数选择,其实对于测试集和训练集的切分也可以应用交叉验证的方法。当整个数据集较小时,如何选择合适的测试集也是个问题,在随机切分的情况下,我们可能刚好选择了一些相对容易预测的数据点作为测试集,这会使得我们模型的最终效果看起来很好,但这并不是真实的情况。为了避免这种因为测试集的选择方式所导致的模型效果出现波动的问题