当前位置: 首页 > news >正文

2.2 评估方法 机器学习

我们若有一个包含m个样例的数据集,若我们既需要训练,也需要测试,我们该如何处理呢?下面是几种方法:

2.2.1 留出法

“留出法”直接将数据集D划分为两个互斥的集合,其中一个作为训练集S,另一个作为测试集T。在S上训练出模型后,用T来评估其测试误差,作为对泛化误差的估计。

需要注意的是,训练/测试集的划分要尽可能保持数据分布的一致性,避免因数据划分过程引入额外的偏差而对最终结果产生影响。比如在分类任务中至少要保持样本的类别比例相似。如果从采样角度来看待数据集的划分过程,则保留类别比例的采样方式通常称为“分层采样”。若S、T中样本类别比例相差很大,则误差估计将由于训练\测试数据分布的差异而产生偏差。

另一个需要注意的是,即使我们划分的很合理,由于每次数据的偶然性,往往不同的划分得到的结果不同,所以单次使用留出法得到的结果往往不可靠,在使用留出法时,一般要采用若干次随机划分、重复进行试验评估后取平均值作为留出法的评估结果。例如进行100次随机划分,每次产生一个训练\测试集用于实验评估,100次后就得到100次结果,而留出法是返回这100次结果的平均。

此外,我们希望的是用D训练出来的模型的性能,但是由于我们的留出法会划分的原因,倘若我们的S过大,我们的T就比较小,导致模型评估不准确,但是倘若以S过小,我们的训练与原本D的差别就更大了。对于这样的问题,我们常见的做法是大约将2/3~4/5的样本用于训练,剩余样本用来测试。

2.2.2 交叉验证法

“交叉验证法”先将数据集D分为k个大小相似的互斥子集。即,每个子集都尽可能保持数据分布的一致性,即从D中分层采样中得到,然后每次用k-1个子集作为训练集,余下那个作为测试集,从而得到k次测试,最终返回这k个测试结果的均值。显然,交叉验证法评估结果的稳定性和保真性很大程度上取决于K的取值,为强调这一点,我们把交叉验证法称为“K折交叉验证”,K最常用的取值是10,此时称为10折验证。

与留出法相似,将数据集D划分为k个子集同样存在多种划分方式,为减小因样本划分不同而引起的差别,k折交叉验证通常要随机使用不同的划分方法重复p次,最终取这p次k折验证结果的均值。

假设数据集D中包含M个样本,若令K=M,则得到了交叉验证法的一个特例:“留一法”。显然,留一法不受随机样本划分方式的影响,,因为M个样本只有唯一的方法划分,而且留一法所用的训练集只比原来少了1个,因此,留一法的评估结果往往被认为比较准确,但是这并不代表他没有缺点,当数据过大时,训练m个模型的开销可能是计算机无法承受的。另外,留一法的评估结果也并非一定永远比其他方法准确,“没有免费的午餐”定理对评估方法同样适用。

2.2.3 自助法

有没有什么方法能减少训练样本规模不同造成的影响,同时还能比较高效的进行试验评估呢?

自助法:给定包含M个样本的数据集D,我们对它采样产生数据集D’:每次随机从D中挑选一个样本将其拷贝进入D',结束在将其放回D中,这个过程重复M次后,我们就得到了包含M个样本的数据集D'。显然,我们的D'中可能有数多次出现,也可能D中有数一直没出现在D'中。我们假设在m次采样中没有被采样到的概率是(1-1/m)^{m},取极限得:

有百分之36.8的样本没出现在D'中。我们将D'用作训练集,D\D'用作测试集,这样我们依然有将近三分之一的样本没出现在训练集中的用于测试,这样的测试结果,也称为“包外估计”

自助法在数据集较小,难以有效划分训练\测试集时有用,此外,自助法能从初始数据集中产生多个不同的训练集,这对集成学习等方法大有好处;但是由于其改变了原始的数据分布,会引出估计误差,因此在数据量足的情况下我们不常用此方法

2.2.4 调参与最终模型

大多数算法都有些参数需要设定,参数配置不同,学得模型的性能往往有差别。因此,在进行模型评估和选择时,除了要对适用学习算法进行选择,还需要对算法参数进行设定,这就是通常所说的“参数调节”或简称“调参”

http://www.lryc.cn/news/317137.html

相关文章:

  • 第一类换元法(凑微分,凑狗)【高数笔记】
  • PostgreSQL数据库优化指南
  • VScode Error Lens插件
  • Fiddler抓包教程
  • TypeScript编译选项
  • 个推与华为深度合作,成为首批支持兼容HarmonyOS NEXT的服务商
  • TypeScript开发100问?
  • 数据结构和算法:栈与队列
  • LeetCode(力扣)算法题_1261_在受污染的二叉树中查找元素
  • Topaz DeNoise AI for Mac/Win:引领图片降噪新纪元,让你的照片焕然一新!
  • 云计算OpenStack KVM迁移
  • 【漏洞复现】网康科技 NS-ASG 应用安全网关 SQL注入漏洞(CVE-2024-2330)
  • 2024年华为OD机试真题-查找众数及中位数-Java-OD统一考试(C卷)
  • 力扣思路题:重复的子字符串
  • 同城即配年度观察:顺丰同城率先全年盈利,行业破局迎参考
  • 线上机器 swap 过高导致告警
  • 案例分析篇13:系统分析与设计考点(2024年软考高级系统架构设计师冲刺知识点总结系列文章)
  • 算法(结合算法图解)
  • Linux-多线程
  • 深入解析C++树形关联式容器:map、set及其衍生容器的使用与原理
  • c++基础知识(一)
  • Midjourney绘图欣赏系列【人物篇】(一)
  • 2024 年 2 月 NFT 行业动态:加密货币飙升,NFT 市场调整
  • 【C++那些事儿】深入理解C++类与对象:从概念到实践(下)| 再谈构造函数(初始化列表)| explicit关键字 | static成员 | 友元
  • 前端面试 ===> 【Vue2】
  • 面试 Java 并发编程八股文十问十答第四期
  • 物体检测-系列教程27:YOLOV5 源码解析17(训练脚本解读:训练函数4)
  • 基于51单片机的数字时钟(万年历)设计与实现
  • 2024年谷歌SEO的趋势预测及应对建议(川圣SEO)蜘蛛池
  • Rust 生命周期符号使用的方法和规律