交叉验证,cross validation是机器学习中非常常见的验证模型鲁棒性的方法。其最主要原理是将数据集的一部分分离出来作为验证集,剩余的用于模型的训练,称为训练集。模型通过训练集来最优化其内部参数权重,再在验证集上检验其表现。
比较常见的交叉验证方法K折叠交叉验证,(K-fold Cross Validation)如下图所示,我们将数据分为K个部分,其中K-1个部分作为训练集,剩余的作为验证集。每个epoch循环,都选取不一样的一个部分作为验证集。
在使用K折叠或者别的交叉验证的方法时,我们需要注意的是,在很多问题中,类与类在数据集中的分布不一定是均匀的。因此,我们往往需要在折叠的过程中使得每个fold都有着相同或至少近似的类的分布。
例如在下列性别二分类问题中,原始数据中女性与男性的样本数量如下。那么我们在划分K折叠的时候,也要将这个分布情况在每个折叠上还原,即保证在每个折叠上女性与男性的样本数量的比例与整体数据的比例是一致的。如果没有满足这个条件,在上述例子中,很可能出现训练时模型过多得受到了了男性样本得影响,而导致其在女性样本为主的验证集上表现很差。因此,保证K折叠每一个部分的类分布是均匀的,也能在一定程度上提升训练后模型的鲁棒性。