交叉验证是在机器学习建立模型和验证模型参数时常用的办法。交叉验证,顾名思义,就是重复的使用数据,把得到的样本数据进行切分,组合为不同的训练集和测试集,用训练集来训练模型,用测试集来评估模型预测的好坏。在此基础上可以得到多组不同的训练集和测试集,某次训练集中的某样本在下次可能成为测试集中的样本,即所谓“交叉”。 

那么什么时候才需要交叉验证呢?交叉验证用在数据不是很充足的时候。比如在我日常项目里面,对于普通适中问题,如果数据样本量小于一万条,我们就会采用交叉验证来训练优化选择模型。如果样本大于一万条的话,我们一般随机的把数据分成三份,一份为训练集(Training Set),一份为验证集(Validation Set),最后一份为测试集(Test Set)。用训练集来训练模型,用验证集来评估模型预测的好坏和选择模型及其对应的参数。把最终得到的模型再用于测试集,最终决定使用哪个模型以及对应参数。

回到交叉验证,根据切分的方法不同,交叉验证分为下面三种:   

第一种是简单交叉验证,所谓的简单,是和其他交叉验证方法相对而言的。首先,我们随机的将样本数据分为两部分(比如: 70%的训练集,30%的测试集),然后用训练集来训练模型,在测试集上验证模型及参数。接着,我们再把样本打乱,重新选择训练集和测试集,继续训练数据和检验模型。最后我们选择损失函数评估最优的模型和参数。 

第二种是S折交叉验证(S-Folder Cross Validation)。和第一种方法不同,S折交叉验证会把样本数据随机的分成S份,每次随机的选择S-1份作为训练集,剩下的1份做测试集。当这一轮完成后,重新随机选择S-1份来训练数据。若干轮(小于S)之后,选择损失函数评估最优的模型和参数。

第三种是留一交叉验证(Leave-one-out Cross Validation),它是第二种情况的特例,此时S等于样本数N,这样对于N个样本,每次选择N-1个样本来训练数据,留一个样本来验证模型预测的好坏。此方法主要用于样本量非常少的情况,比如对于普通适中问题,N小于50时,我一般采用留一交叉验证。

通过反复的交叉验证,用损失函数来度量得到的模型的好坏,最终我们可以得到一个较好的模型。那这三种情况,到底我们应该选择哪一种方法呢?一句话总结,如果我们只是对数据做一个初步的模型建立,不是要做深入分析的话,简单交叉验证就可以了。否则就用S折交叉验证。在样本量少的时候,使用S折交叉验证的特例留一交叉验证。

此外还有一种比较特殊的交叉验证方式,也是用于样本量少的时候。叫做自助法(bootstrapping)。比如我们有m个样本(m较小),每次在这m个样本中随机采集一个样本,放入训练集,采样完后把样本放回。这样重复采集m次,我们得到m个样本组成的训练集。当然,这m个样本中很有可能有重复的样本数据。同时,用没有被采样到的样本做测试集。这样接着进行交叉验证。由于我们的训练集有重复数据,这会改变数据的分布,因而训练结果会有估计偏差,因此,此种方法不是很常用,除非数据量真的很少,比如小于20个。


交叉验证(Cross Validation)原理小结 - 刘建平Pinard - 博客园 (cnblogs.com)https://www.cnblogs.com/pinard/p/5992719.html

【机器学习】<刘建平Pinard老师博客学习记录>交叉验证(Cross Validation)相关推荐

  1. 【机器学习】<刘建平Pinard老师博客学习记录>线性回归原理

    目录 一.线性回归的模型函数和损失函数: 二.线性回归的算法: 1.梯度下降法: 2.最小二乘法: 三.线性回归的推广:多项式回归 四.线性回归的推广:广义线性回归 五.线性回归的正则化: 一.线性回 ...

  2. 【机器学习】<刘建平Pinard老师博客学习记录>Scikit-learnPandas(NumpyMatplotlib)学习线性回归

    目录 一.数据获取&问题定义: 1.数据获取: 2.问题定义: 二.整理数据: 三.使用Pandas读取数据: 1.导入依赖库: 2.使用Pandas读取函数: 四.数据准备: 1.查看数据: ...

  3. 【机器学习】<刘建平Pinard老师博客学习记录>机器学习算法的随机数据生成

    目录 一.Numpy生成随机数: 二.Scikit-learn随机数据生成API介绍: 三.Scikit-learn随机数据生成实例: 1.回归模型随机数据: 2.分类模型随机数据: 3.聚类模型随机 ...

  4. 【机器学习】<刘建平Pinard老师博客学习记录>最小二乘法

    目录 一.最小二乘法的原理与解决的问题: 二.最小二乘法代数解法: 三.最小二乘法的矩阵解法: 四.最小二乘法的局限性和适用场景: 最小二乘法是用来做函数拟合或者求函数极值的方法.在机器学习,尤其是回 ...

  5. 【机器学习】<刘建平Pinard老师博客学习记录>梯度下降(Gradient Descent)

    目录 一.梯度: 二.梯度上升和梯度下降: 三.梯度下降法算法详解: 1.梯度下降的直观解释: 2.梯度下降的相关概念: 3.梯度下降的详细算法: 3.1 梯度下降法的代数方式描述: 3.2 梯度下降 ...

  6. 【机器学习】<刘建平Pinard老师博客学习记录>感知机原理

    目录 一.感知机模型: 二.感知机模型损失函数: 三.感知机模型损失函数的优化方法: 四.感知机模型算法: 五.感知机模型的算法对偶形式: 六.小结: 感知机可以说是最古老的分类方法之一了,在1957 ...

  7. 刘建平Pinard的博客配套代码

    刘建平Pinard的博客配套代码 http://www.cnblogs.com/pinard 刘建平Pinard 目录 机器学习基础与回归算法 机器学习分类算法 机器学习聚类算法 机器学习降维算法 机 ...

  8. 我的博客学习记录一箩筐(每天更新)

    线程有关的 1. 难道调用ThreadPool.QueueUserWorkItem()的时候,真是必须调用Thread.Sleep(N)吗? 2. 警惕匿名方法造成的变量共享 3. WPF:谈谈各种多 ...

  9. 【阮一峰博客学习记录1】追踪用户点击

    使用普通异步的方式发送用户点击日志会不成功,使用同步的方式发送会导致网页延迟.所以有了这个API--navigator.sendBeacon() 作用与优势 就算是关闭浏览器的操作,都可以腾出时间进行 ...

最新文章

  1. 华为鸿蒙4月推送名单,华为鸿蒙升级名单已确认,首批将有44款机型升级,其中有你吗?...
  2. BZOJ4566: [Haoi2016]找相同字符
  3. 实时荧光定量聚合酶链式反应和2-▲CT方法分析相关基因表达数据
  4. python基础--函数
  5. 顺序表查找+折半查找(二级)
  6. vue Bus 总线 组件间通信
  7. python布尔类型运算_python基础之布尔运算、集合
  8. 苹果设备频繁杀后台问题在iOS 13.2.2正式版更新后得以抑制
  9. 实现对顺序表的入栈出栈操作、利用栈将十进制转化成二进制输出【数据结构实验报告】
  10. 电商:购物车模块解决思路
  11. What is Leanstar.cn?
  12. 一个粗糙的js分页判断
  13. 一个老程序员的忠告:千万不要一辈子靠技术生存
  14. Android Uri的几种使用方法,分享共同学习
  15. 神威太湖之光计算机的知识点,神威太湖之光计算机系统.PDF
  16. python二维表转一维表_【习题】一维表转二维表
  17. 【C++学习笔记】函数基础和参数传递
  18. 数据库范式5nf_第五范式(5NF)| 数据库管理系统
  19. 淘宝天猫运营,淘宝客推广,店铺流量提升
  20. httpd.conf linux,linux上安装apache以及httpd.conf基本配置

热门文章

  1. 【能比这般的回忆与相思更美妙,更令人泪流满面的幸福】
  2. 查看 文件 行数 linux,linux查看文件行号的七种方法
  3. linux dotnet后台,linux netcore dotnet command
  4. http与https概述
  5. DELL-N41110拆机图解
  6. Elasticsearch和mysql最直观的区别介绍
  7. 怎么使用计算机硬件,如何安装电脑硬件
  8. 计算机毕业设计asp.net在线音乐网站(源码+系统+mysql数据库+Lw文档)
  9. mina学习笔记六:补刀
  10. 使用python给图片加个盲水印