机器学习——验证方法

1 、验证的引入

1.1 机器学习中的数据集划分

在机器学习中,我们的训练机器学习模型的目标是得到一个泛化误差小的模型,也就是说在没有参加训练的样本中获得最优的性能。通常情况下,我们会将数据集分成三个部分,包括训练集,验证集和测试集。我们在训练集上对机器学习的模型进行训练,在训练的过程中使用验证集进行测试,当在验证集上获取到最优的参数的时候,可以停止训练。将训练好的模型在测试集上进行测试。

1.2 验证集的作用

我们在训练机器学习模型的时候,总是会有一些超参数需要我们进行人为的进行设置,比如我们在训练神经网络中的网络层数。这种超参数不是机器学习模型学习出来的,而是我们自己进行调节的,如何进行调节呢?这个时候就引出了验证集的作用。一般情况下,我们基于验证集来调节模型的超参数,这种调节的过程的本质也是一个学习的过程。通过验证集,我们能够确定最优的超参数,这样也就确定了最优的机器学习模型结构。同时,当模型十分的复杂的时候,很容易在训练数据上产生过拟合。此时,我们将模型放到验证集上进行及时的测试,可以提早的发现模型的过拟合的现象,及时停止训练,减少过拟合。

一般情况下,我们会先将模型在训练集上进行训练,在训练的的过程中,我们将训练过一定的时间的模型放到验证集上进行验证,最终我们希望的是模型在验证集性能非常的好。此时我们就可以停止训练,然后在测试集上查看泛化误差。

2、验证方法

所谓的验证方法,核心就是我们如何去构造验证集。一般情况下,验证集的构造方法包括三种,留出法,交叉验证法和自助法,下面我们来一一介绍。

2.1、留出法

留出法的思路很简单,就是将原始训练数据集D划分成两个部分,两个子集是互斥的,其中一个集合作为训练集S,另外一个集合作为验证集V。我们用数学的形式描述一下就是:
D=S∪V,S∩T=∅D=S∪V,S∩T=∅D=S∪V,S∩T=∅
举一个例子来讲,我们的训练数据D包括1000样本,其中S包括700个样本用于训练,300个样本作为验证集进行验证。

这里值得我们注意的是,我们需要保证训练集S和验证集V尽可能的保证数据的分布是一致的。这样可以避免因为数据分布的不一致性而引入的额外的偏差,而对最终的结果产生影响。

这种一致性最为常见的例子是我们要尽量保证在训练集S和验证集V中的各个类别的样本的比例是一致的。以二分类为例,在S中正负样本比例在1:1左右,则在V中也要尽量去保证正负样本比例在1:1左右。

从采样的角度来看这种比例一致的问题,实际上就是一个分层采样的过程,所谓的分层采样,实际上就是按照不同的类别进行随机采样,还是我们上面的例子,假设原始的样本集D中的样本数量为1000,并且正负样本的数量均为500,我们按照700:300的比例划分成S集和V集,我们首先从正类中进行随机采样,将正类的样本分成350:150的两个集合A,B,在将负类的样本进行随机采样,将负类的样本分成350:150的两个集合C,D,然后将A、C集合合并构成训练集S,B、D集合合并构成验证集V。

尽管我们能够保证S和V集合的中的各类样本的比例是一致的,但是这仍然存在一定的问题,我们继续看上面的例子,我们在将正类切分为350和150是两个部分的时候,我们可以将500个正例样本中的前350个作为第一个部分,也可以将500个正例样本中的后350个作为第一个部分。这些不同划分方式会产生不同的S和V集。不同的S和V集可能会导致模型的评估结果不同,为了解决这个问题,我们往往采用的方式是进行多次划分,分成不同的S/V集,进行多次训练和评估模型,最后取均值或者投票法来确定最终的结果。

最后,我们在说明这种方法的一个局限性,我们将原始的训练数据集D划分成了两个不相交的子集S和V,当S集特别大的时候,模型的训练结果接近于D,但是V过小,会导致验证集的评估结果不够稳定。如果缩小S集并扩大V集,这样会导致模型训练的欠拟合问题。这个问题没有完美的解决方法,一般情况下,我们一般将23\frac{2}{3}32​到45\frac{4}{5}54​的样本用于训练,其余的样本用于验证。

最后,我们用一张图来展示一下留出法的基本思想:

2.2 交叉验证法

交叉验证法的思想是首先将数据集D划分成K个大小相似的互斥子集,即D=D1∪D2∪…∪Dk,其中Di∩Dj=∅(i≠j)。我们采用分层抽样的方法保证每个数据集中的数据分布尽可能的一致。然后,我们每次用k-1个子集作为训练集S,剩下的那个子集作为验证集V,这样就得到了k组训练集S和验证集V,然后进行k次训练,最终返回的是这k个结果的均值。

我们用一张图来展示一下划分的过程:

我们再用一张图来真实整个流程:

与留出法类似,我们在生成不同的子集的时候,存在着很多种划分的方式,为了减少因为样本划分不同而引入的差别,我们通常需要随机的进行不同的划分过程P次,也就是说我们对于上面的过程重复了P次,最终在每一次结果的基础上在取均值作为最终的验证结果。这种方式称为p次k折交叉验证。

2.2.1 留一法

这里,我们介绍一种交叉验证的特殊形式,我们将含有m个样本的原始样本集合D划分成为m份,也就是说每一个子集中包含一个样本。使用这种方式的好处在于不会受到随机样本划分的影响,因为m个样本只有一种方式来划分,使得每一个子集中包含一个样本。这种方式使得训练集只是比原始的数据集少了一个样本,这就使得在绝大多数的情况向留一法和使用原始数据D来训练的效果很相似。而这种方法的缺陷在于,当数据量m特别大的时候,我们要训练m个模型,这个可能是相对比较复杂的。而且,我们使用一个样本作为验证集,这种评估的结果不一定是稳定的。

2.3 自助法

所谓的自助法,其实就是利用BootStrap方式进行抽样,其基本思想如下图所示:

也就是说,我们将D’作为训练集S,剩余没有被抽样的,大约36.8%的样本作为验证集V,这种方式在数据集比较小,很难有效的划分的时候很有用。

3 参考

  1. 周志华《机器学习》
  2. 评估机器学习模型的几种方法(验证集的重要性)

机器学习——验证方法相关推荐

  1. 机器学习之交叉验证方法详解【基于Scikit-Learn】

    目录: 1 为什么交叉验证 2 交叉验证方法2.1 简单的交叉验证2.2 k折交叉验证 k-fold cross validation2.3 代码 3 留一法 leave-one-out cross ...

  2. ML之Validation:机器学习中模型验证方法的简介、代码实现、案例应用之详细攻略

    ML之Validation:机器学习中模型验证方法的简介.代码实现.案例应用之详细攻略 目录 模型验证方法的简介 1.Hold-out验证 2.K-折交叉验证 3.自助重采样 模型验证方法的代码实现 ...

  3. 详细介绍机器学习中的交叉验证方法

    机器学习的交叉验证 前言 HoldOut交叉验证 K折交叉验证 分层K折交叉验证 Leave P Out 留一交叉验证 蒙特卡罗交叉验证 时间序列交叉验证 前言 在研究生阶段接触机器学习的时候,我导问 ...

  4. 【机器学习】交叉验证详细解释+10种常见的验证方法具体代码实现+可视化图

    [机器学习]交叉验证详细解释+10种常见的验证方法具体代码实现+可视化图 一.使用背景 由于在训练集上,通过调整参数设置使估计器的性能达到了最佳状态:但在测试集上可能会出现过拟合的情况. 此时,测试集 ...

  5. 新闻上的文本分类:机器学习大乱斗 王岳王院长 王岳王院长 5 个月前 目标 从头开始实践中文短文本分类,记录一下实验流程与遇到的坑 运用多种机器学习(深度学习 + 传统机器学习)方法比较短文本分类处

    新闻上的文本分类:机器学习大乱斗 王岳王院长 5 个月前 目标 从头开始实践中文短文本分类,记录一下实验流程与遇到的坑 运用多种机器学习(深度学习 + 传统机器学习)方法比较短文本分类处理过程与结果差 ...

  6. OpenCV3 Java 机器学习使用方法汇总

    原文链接:OpenCV3 Java 机器学习使用方法汇总  前言 按道理来说,C++版本的OpenCV训练的版本XML文件,在java中可以无缝使用.但要注意OpenCV本身的版本问题.从2.4 到3 ...

  7. [机器学习]正则化方法 -- Regularization

    一.参数方法和非参数方法 在讲正则化之前,需要介绍2个概念.机器学习的方法,可以大致分成两类. 参数方法(Parametric Methods) 通过训练来确定一组参数.当我们参数的值定下来,可以说预 ...

  8. c++实现决策树分类汽车评估数据集_R有监督机器学习-分类方法

    当我们说机器学习的的时候,我们在说什么? 来源于mlr3包的作者:https://mlr3book.mlr-org.com/basics.html 上图解释了完整的机器学习流程,包括构建任务.准备训练 ...

  9. AI+CFD:面向空天动力的科学机器学习新方法与新范式

    西北工业大学航天学院副院长秦飞为大家带来的演讲主题是:AI+CFD,面向空天动力的科学机器学习新方法与新范式. 它主要分为三部分: 空天动力背景以及数字化智能化的趋势. 空天动力全生命周期的数字孪生. ...

最新文章

  1. 从人的角度分析进销存管理的需求
  2. java的源代码文件扩展名_【单选题】Java 的源代码文件具有( )的扩展名 (5.0分) A. .c B. .class C...
  3. UpdateLayeredWindow 绘制异型窗口
  4. python教程:几个基础类型循环删除
  5. 数据库系统实训——实验六——游标
  6. [转] ASP.NET中使用javascript
  7. Android开发笔记(一百三十一)水波图形与水波动画
  8. 喜欢赌球的你,可能被AI盯上了
  9. android 更新apk 应用为安装,应用未安装!从Android Studio构建安装APK时出错 - java
  10. 8.微服务设计 --- 监控
  11. oracle的备份恢复命令,Oracle RMAN的备份与恢复命令详解
  12. [java]房屋出租系统
  13. 火山PC锐浪报表使用教程1(Grid++Report)
  14. Java 冻结或解除冻结Excel中的行和列的方法
  15. 什么是友情链接?友情链接的好处及写法(图文)
  16. 【愚公系列】2023年02月 WMS智能仓储系统-010.全局过滤、中间件、格式化配置
  17. opencv normalize blur medianBlur
  18. Java动态代理的原理
  19. 新年第一帖——元旦这天骑车迷路了
  20. shell编程之shell脚本(下)

热门文章

  1. 华尔街远邻 | 解读国际清算银行对加密货币的暧昧态度
  2. 银行,金融行业的清分,结算,清算,核算到底是什么含义? 现金需要搬运么?
  3. 微信小程序/社区/信息发布小程序/信息类小程序
  4. Flyme将在明年“上车”?沈子瑜接棒魅族董事长后称将与华为展开竞争
  5. 为什么产品经理都在考PMP?一文透析
  6. 拓扑排序,AVO网的判断
  7. JavaScript CSS jQuery 网页音乐播放器
  8. 使用commandbuffer绘制并且blit到屏幕上
  9. 蚂蚁链API参考接口
  10. 浅析AI边缘计算的车辆/车牌识别技术研发及场景应用