博客 | 「交叉验证」到底如何选择K值?

2018 年 10 月 3 日 AI研习社

本文原载于微调的知乎专栏「数据说」。

交叉验证(cross validation)一般被用于评估一个机器学习模型的表现。更多的情况下,我们也用交叉验证来进行模型选择(model selection)。往远了说,交叉验证可以用于评估任何过程,但本文仅讨论机器学习评估这个特定领域。

交叉验证有很长的历史,但交叉验证的研究有不少待解决的问题。拿最简单的K折交叉验证来说,如何选择K就是一个很有意思的话题。而更有意思的是,交叉验证往往被用于决定其他算法中的参数,如决定K近邻算法中K的取值。因此我们必须首先决定K折交叉验证中的K。

K折交叉验证(K-fold cross validation)指的是把训练数据D 分为 K份,用其中的(K-1)份训练模型,把剩余的1份数据用于评估模型的质量。将这个过程在K份数据上依次循环,并对得到的K个评估结果进行合并,如求平均或投票。如下图所示的10折交叉验证,训练数据D被分为 ,每次取其中9份数据作为训练集,1份作为测试集,最终将循环后所有的评估结果取平均。

10折交叉验证(图片来源: 周志华, 机器学习, 清华大学出版社, 2016)


1. 首先第一个问题,为什么要用交叉验证?

根本原因是我们的数据是有限的。当数据量不够大的时候,如果把所有的数据都用于训练模型容易导致模型过拟合。通过交叉验证对数据的划分+对评估结果的整合,我们可以“有效”的降低模型选择中的方差。换句话说,我们期望模型在训练集的多个子数据集上表现良好,这胜过单单在整个训练数据集上表现良好。简单来说,交叉验证也可以用方差偏差分解的思路来看,从某个角度和集成学习及bootstrapping也有相似点。此处不再赘述,可以看知乎讨论[4]。

所以理论保障就是,使用了交叉验证,模型方差“应该”降低了。首先在理想情况下,我们认为K折交叉验证可以 O(1/k) 的效率降低模型的方差,从而提高模型的泛化能力,但实际情况并不是这样。主要问题在于我们所得到K折数据之间并非独立,而存在相关性。因此实际情况下,K折交叉验证到底能降低多少方差还不确定,同时带来的偏差上升有多少也还存疑。

2. K到底该取多少?或者说,为什么大部分人都说要取10?

交叉的折数(fold)取多少一直没有准确的答案。往大了说这是个历史遗留问题,10这个数字也就被一直沿用了下来[2]。一般有两种流行的取值:(i) K=10 (ii) K=n,n指的是训练数据的总数,这种方法也叫做留一法(LOOCV)。

让我们思考交叉验证的两种极端情况:

  • 完全不使用交叉验证是一种极端情况,即K=1。在这个时候,所以数据都被用于训练,模型很容易出现过拟合,因此容易是低偏差、高方差(low bias and high variance)。

  • 留一法是K折的另一种极端情况,即K=n。随着K值的不断升高,单一模型评估时的方差逐渐加大而偏差减小。但从总体模型角度来看,反而是偏差升高了而方差降低了。

所以当K值在1到n之间的游走,可以理解为一种方差和偏差妥协的结果。以K=10为例,在训练时我们的训练集数量仅为训练数据的90%。对比不使用交叉验证的情况,这会使得偏差上升,但对于结果的平均又会降低模型方差,最终结果是否变好取决于两者之间的变化程度。而这种直觉上的解释,并不总是有效。如Hastie曾通过实验证明 K折交叉验证比留一法的方差更小[1],这和我们上面的结论不一样。

另一个值得一提的看法是,交叉验证需要思考场景,而不是普适的。其中关系最大的就是评估模型的稳定性。在2015年的一项研究中,作者发现留一法有最好或者接近最好的结果[2],在他们的实验中 K=10和K=5的效果都远不如留一法或者K=20。

对于稳定模型来说,留一法的结果较为统一,值得信赖。对于不稳定模型,留一法往往比K折更为有效[2]。换句话说,那就是留一法结果较为可靠。

3. 那么是否K的取值越大越好?

不一定,首先要考虑的是计算的开销。当数据量较大时,使用留一法的计算开销远远超过了我们的承受能力,需要谨慎对待。2017年的一项研究给出了另一种经验式的选择方法[3],作者建议  且保证  ,此处的n代表了数据量,d代表了特征数。感兴趣的朋友可以对照论文进一步了解。


总结

这篇文章的目的不是为了说明K到底该取什么值,而只是为了再次讨论K值其实还是一种方差和偏差之间妥协。K=10或者5并不能给与我们绝对的保障,这还要结合所使用的模型来看。当模型稳定性较低时,增大K的取值可以给出更好的结果。

但从实验角度来看,较大的K值也不一定就能给出更小的方差[2],一切都需要具体情况具体讨论。相对而言,较大的K值的交叉验证结果倾向于更好。但同时也要考虑较大K值的计算开销。

另一个交叉验证需要关注的点是,当你的数据集太小时,较小的K值会导致可用于建模的数据量太小,所以小数据集的交叉验证结果需要格外注意。建议选择较大的K值。

所以总结来看,交叉验证还是一个比较复杂的过程,与模型稳定性,数据集大小等都息息相关。K=10的10折交叉验证不是万灵药,也不是万无一失的真理,但不失为一个良好的尝试。如果计算能力允许,增大K值或许更为保险。


[1] Krstajic, D., Buturovic, L.J., Leahy, D.E. and Thomas, S., 2014. Cross-validation pitfalls when selecting and assessing regression and classification models. Journal of cheminformatics, 6(1), p.10.

[2] Zhang, Y. and Yang, Y., 2015. Cross-validation for selecting a model selection procedure. Journal of Econometrics, 187(1), pp.95-112.

[3] Jung, Y., 2017. Multiple predicting K-fold cross-validation for model selection. Journal of Nonparametric Statistics, pp.1-19.

[4] 偏差和方差有什么区别?

登录查看更多
2

相关内容

交叉验证,有时也称为旋转估计或样本外测试,是用于评估统计结果如何的各种类似模型验证技术中的任何一种分析将概括为一个独立的数据集。它主要用于设置,其目的是预测,和一个想要估计如何准确地一个预测模型在实践中执行。在预测问题中,通常会给模型一个已知数据的数据集,在该数据集上进行训练(训练数据集)以及未知数据(或首次看到的数据)的数据集(根据该数据集测试模型)(称为验证数据集或测试集)。交叉验证的目标是测试模型预测未用于估计数据的新数据的能力,以发现诸如过度拟合或选择偏倚之类的问题,并提供有关如何进行建模的见解。该模型将推广到一个独立的数据集(例如,未知数据集,例如来自实际问题的数据集)。 一轮交叉验证涉及分割一个样品的数据到互补的子集,在一个子集执行所述分析(称为训练集),以及验证在另一子集中的分析(称为验证集合或测试集)。为了减少可变性,在大多数方法中,使用不同的分区执行多轮交叉验证,并将验证结果组合(例如取平均值)在各轮中,以估计模型的预测性能。 总而言之,交叉验证结合了预测中适用性的度量(平均),以得出模型预测性能的更准确估计。
【圣经书】《强化学习导论(2nd)》电子书与代码,548页pdf
专知会员服务
201+阅读 · 2020年5月22日
干净的数据:数据清洗入门与实践,204页pdf
专知会员服务
161+阅读 · 2020年5月14日
【经典书】机器学习高斯过程,266页pdf
专知会员服务
195+阅读 · 2020年5月2日
Sklearn 与 TensorFlow 机器学习实用指南,385页pdf
专知会员服务
129+阅读 · 2020年3月15日
【经典书】精通机器学习特征工程,中文版,178页pdf
专知会员服务
354+阅读 · 2020年2月15日
谷歌机器学习速成课程中文版pdf
专知会员服务
145+阅读 · 2019年12月4日
一文读懂机器学习模型的选择与取舍
DBAplus社群
13+阅读 · 2019年8月25日
机器学习中如何处理不平衡数据?
机器之心
13+阅读 · 2019年2月17日
博客 | 机器学习中的数学基础(概论)
AI研习社
6+阅读 · 2018年12月13日
推荐|机器学习中的模型评价、模型选择和算法选择!
全球人工智能
10+阅读 · 2018年2月5日
sklearn集成学习:如何调参?
北京思腾合力科技有限公司
9+阅读 · 2017年10月20日
机器学习算法比较
我爱机器学习
4+阅读 · 2016年12月11日
Arxiv
7+阅读 · 2019年4月8日
Arxiv
15+阅读 · 2019年3月16日
Augmentation for small object detection
Arxiv
11+阅读 · 2019年2月19日
W-net: Bridged U-net for 2D Medical Image Segmentation
Arxiv
19+阅读 · 2018年7月12日
Arxiv
3+阅读 · 2018年3月22日
Arxiv
7+阅读 · 2017年12月26日
VIP会员
相关VIP内容
相关资讯
一文读懂机器学习模型的选择与取舍
DBAplus社群
13+阅读 · 2019年8月25日
机器学习中如何处理不平衡数据?
机器之心
13+阅读 · 2019年2月17日
博客 | 机器学习中的数学基础(概论)
AI研习社
6+阅读 · 2018年12月13日
推荐|机器学习中的模型评价、模型选择和算法选择!
全球人工智能
10+阅读 · 2018年2月5日
sklearn集成学习:如何调参?
北京思腾合力科技有限公司
9+阅读 · 2017年10月20日
机器学习算法比较
我爱机器学习
4+阅读 · 2016年12月11日
Top
微信扫码咨询专知VIP会员