交叉验证
交叉验证算法的具体步骤如下:
-
随机将训练数据等分成k份,S1, S2, …, Sk。
-
对于每一个模型Mi,算法执行k次,每次选择一个Sj作为验证集,而其它作为训练集来训练模型Mi,把训练得到的模型在Sj上进行测试,这样一来,每次都会得到一个误差E,最后对k次得到的误差求平均,就可以得到模型Mi的泛化误差。
-
算法选择具有最小泛化误差的模型作为最终模型,并且在整个训练集上再次训练该模型,从而得到最终的模型。
K折交叉验证,其主要的目的是为了模型的选择(比如一次线性模型、非线性模型),而不是为了选择具体模型的具体参数。比如在BP神经网络中,其目的主要为了选择模型的层数、神经元的激活函数、每层模型的神经元个数(即所谓的超参数)。每一层网络神经元连接的最终权重是在模型选择(即K折交叉验证)之后,由全部的训练数据重新训练。
K值的选择:
K值的选取是一个偏差与方差的权衡
- K=1时,所有数据用于训练,容易过拟合;
- K=N时,相当于留一法LOOCV (Leave-one-out cross-validation ).;
通常建议K=10