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

原文链接:https://cloud.tencent.com/developer/article/1410946
交叉验证(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折交叉验证可以 的效率降低模型的方差,从而提高模型的泛化能力,但实际情况并不是这样。主要问题在于我们所得到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值或许更为保险。

[转载]「交叉验证」到底如何选择K值?相关推荐

  1. 手把手教程:解除AppleID「双重验证」

    大家好,我是可夫小子,关注AIGC.读书和自媒体.解锁更多ChatGPT.AI绘画玩法.加:keeepdance,备注:chatgpt,拉你进群. 在前面的文章中,我共享了两个美区ID给大家下载Cha ...

  2. k折交叉验证优缺点_R语言中K邻近算法的初学者指南:从菜鸟到大神(附代码&链接)...

    作者:Leihua Ye, UC Santa Barbara 翻译:陈超 校对:冯羽 本文约2300字,建议阅读10分钟 本文介绍了一种针对初学者的K临近算法在R语言中的实现方法. 本文呈现了一种在R ...

  3. 【机器学习】——K_means如何选择k值?

      K_means聚类是我们在无监督学习中常用的一种算法,但有一个很让人头疼的问题就是如何选择k值.在实际业务中,如果根据业务场景明确知道要得到的类数,那就好办了,但很多时候不知道K怎么办呢?下面有三 ...

  4. 一文详解「群体机器人」中的「实体进化」到底是什么?

    原文来源:frontiers 作者:Nicolas Bredeche.Evert Haasdijk.Abraham Prieto 「雷克世界」编译:嗯~阿童木呀.KABUDA 本文概述了适用于机器人群 ...

  5. Science审稿人谈中国首次实现量子优越性:「九章」到底打了谁的脸?

    萧箫 发自 凹非寺 量子位 报道 | 公众号 QbitAI 中国首次实现量子优越性后,Science审稿人Scott Aaronson坐不住了. 作为量子计算领域最重要的专家之一,Scott对于这项成 ...

  6. 分布式系统关注点(6)——「负载均衡」到底该如何实施?

    本文长度为3032字,预计读完需1.1MB流量,建议阅读8分钟. 阅读目录 为什么没有DNS? 如何实施? 优缺点 结语 前面两篇<分布式系统关注点--初识「高可用」>.<分布式系统 ...

  7. 分布式系统关注点——「负载均衡」到底该如何实施?

    本文长度为3032字,预计读完需1.1MB流量,建议阅读8分钟. 阅读目录 为什么没有DNS? 如何实施? 优缺点 结语 前面两篇<分布式系统关注点--初识「高可用」>.<分布式系统 ...

  8. 「蚂蚁金服」热搜的背后:「李开复」到底是不是口误?

    loonggg 读完需要 6 分钟 速读仅需 2 分钟 大家好,我是你们的校长. 最近这两天,我连续两篇文章都讲过数据主权的问题,一直在强调:在未来人工智能时代,在大数据时代,数据已经成为了各个国家最 ...

  9. 趋势 |「酸性设计」到底有多酷?

    「酸性设计」 -被挑战的美感- 酸性设计 挑战了传统对美感和欲望的定义 具有高度失真或超现实的视觉效果 带给观者类似迷幻物质的视觉观感 虽然看起来非常新潮 本质却是对上世纪流行文化的复刻 是一种纯粹的 ...

最新文章

  1. Maven环境搭建及常用命令、生命周期
  2. 请问:hive中avg聚合函数会使用到combiner功能吗?
  3. TransactionScope 的基本原理简介
  4. linux常用命令笔记(持续更新)
  5. sqlserver 的一些好用的插件
  6. 做最酷的Windows Phone应用
  7. 开源好用的思维导图软件XMind
  8. springCloud 搭建Eureka
  9. 求解斐波那契第n项的几种解法(含矩阵乘法+快速幂) Python实现
  10. 深入浅出Docker(二):Docker命令行探秘
  11. Creating DataFrames spark当中重要的部分DataFrames
  12. linux常用查看磁盘空间大小的命令
  13. InfoPath2003 教程
  14. linux表白程序源码,程序员表白程序,开放源码在此!
  15. Java 订单管理系统
  16. 【Axure高保真原型】上传表格数据
  17. 北斗导航 | RTKLib牛刀小试
  18. 【Typora图床设置】Typora图片上传和阿里云OSS对象存储
  19. 【JokerのZYNQ7020】SDK程序从QSPI启动。
  20. 如何从官网下载 Google Chrome 64位离线安装包

热门文章

  1. 数据库:(园林绿化工程施工及验收规范)
  2. 8.linux 重定向详解,标准输入输出,输入重定向,输出重定向
  3. Spring Boot项目健康检测
  4. 文本信息事件信息抽取的方法
  5. shell脚本案例(一):常见运维面试题
  6. 4-使用GitHub(Github Issue)及基本概念实战
  7. Linux james邮件服务器的搭建
  8. kafka-eagle部署与使用
  9. Tensorflow2.* 加载和预处理数据之用 tf.data 加载磁盘图片数据(4)
  10. 最优化——模拟退火算法