LOOCV - Leave-One-Out-Cross-Validation 留一交叉验证_留一法交叉验证均方差计算公式-CSDN博客
模型比较中的留一法交叉验证(Leave-One-Out Cross-Validation) - 知乎 (zhihu.com)
Leave One Out Cross Validation
正常训练都会划分训练集和验证集,训练集用来训练模型,而验证集用来评估模型的泛化能力。留一交叉验证是一个极端的例子,如果数据集D的大小为N,那么用N-1条数据进行训练,用剩下的一条数据作为验证,用一条数据作为验证的坏处就是可能$E_{val}$和$E_{out}$相差很大,所以在留一交叉验证里,每次从D中取一组作为验证集,直到所有样本都作过验证集,共计算N次,最后对验证误差求平均,得到$E_{loocv}(H,A)$,这种方法称之为留一法交叉验证。
$$
CV_{(n)}=\frac1n\sum_{i=1}^n MSE_i
$$
$$
\frac1N\sum_{n=1}^Ne_n=\frac1N\sum_{n=1}^N err(g_n^-(x_n),y_n)
$$
LOOCV改进
$$
CV_{(n)}=\frac{1}{n}\sum_{i=1}^{n}(\frac{y_i-\hat{y}_i}{1-h_i})^2
$$
为什么使用LOOCV
参考交叉验证,减少了模型的bias,用于评估模型的泛化能力,防止模型过拟合
使用LOOCV的场景
当数据集D的数量较少时使用留一交叉验证
- 数据集少,如果像正常一样划分训练集和验证集进行训练,那么可以用于训练的数据本来就少,还被划分出去一部分,这样可以用来训练的数据就更少了。loocv可以充分的利用数据。
- 因为loocv需要划分N次,产生N批数据,所以在一轮训练中,要训练出N个模型,这样训练时间就大大增加。所以loocv比较适合训练集较少的场景
LOOCV理论证明
LOOCV可以用来近似泛化误差,即$E_{loocv}\approx E_{out}$
优点
- 充分利用数据
- 因为采样是确定的,所以最终误差也是确定的,不需要重复LOOCV
缺点
- 训练起来耗时
- 由于每次只采一个样本作为验证,导致无法分层抽样,影响验证集上的误差。举个例子,数据集中有数量相等的两个类,对于一条随机数据,他的预测结果是被预测为多数的结果,如果每次划出一条数据作为验证,则其对应的训练集中则会少一条,导致训练集中该条数据占少数从而被预测为相反的类,这样原来的误差率为50%,在LOOCV中为100%