当前位置:网站首页>评估机器学习模型-摘抄
评估机器学习模型-摘抄
2022-07-31 05:16:00 【Young_win】
综述
通常,不会在训练模型的相同数据上 对模型进行评估。因为,随着训练的进行,模型在训练数据上的性能始终在提高,但在前所未见的数据上的性能则不再变化or开始下降。
机器学习的目的是得到可以泛化的模型,即在前所未见的数据上表现很好的模型,所以,如何可靠地衡量模型的泛化能力非常重要,下述内容主要介绍如何衡量模型的泛化能力!
此外,提升模型泛化性的难点是过拟合,后续会介绍!
train/valid/test
评估模型时,将数据划分成3个集合:train/valid/test。
train:在该数据集上,训练模型;
valid:在该数据集上,评估模型;
test:一旦找到了最佳参数,就在该数据集上,最后测试一次。
A. 为什么需要test数据?
(1.)在开发模型时,总是要调节模型配置,比如层数、每层大小(超参数),这个调节过程要用模型在valid数据上的性能 作反馈信号,该过程本质是一种学习:在某个参数空间中,寻找良好的模型配置。
(2.)所以,基于模型在valid上的性能 调节模型配置,很快会使模型在valid上过拟合,即使 你没在valid上直接训练模型 也会如此。造成这一现象的关键是信息泄露:每次基于模型在valid上的性能调节模型超参数,都有一些关于valid的数据信息泄漏到模型中。
(3.)即使最后得到的模型在valid上的性能很好,因为这正是你优化的目的;而我们关心的是 模型在全新数据上的性能,而不是在valid上的性能。因此,需要用一个完全不同的、前所未见的数据来评估模型,即test数据集。
(4.)你的模型一定不能读取与test数据有关的任何信息,即使是间接读取也不行 。如果基于test数据的性能 调节模型,那么对泛化能力的衡量是不准确的 。
B. 可用数据较少,如何划分train/valid/test?
(1.)最简单的留出验证
一旦调节好超参数,就在所有非test数据上,从头开始训练最终模型。
该评估方法的缺点:如果可用的数据很少,则valid和test数据包含的样本就太少,无法从统计学上代表数。
具体通过实验 发现该问题的方式:如果再划分数据前 进行不同的随机打乱,最终得到的模型性能差别很大,就存在这个问题。
(2.)K折验证
为了解决上述 不同划分“trian-test”得到的模型性能变化很大 的问题,引入“K折验证”。
K折验证,即将数据划分成大小相同的K个分区,对每个分区i,在剩余的K-1个分区上训练模型,然后在分区i上评估模型。最终分数=K个分数的平均值。
K个模型train训练+valid评估,得到最优超参数;
用该超参数,在train+valid上 再训练一个模型M;
用模型M 在test上做评估!
(3.)带有打乱数据的重复K折验证
做法:多次使用K折验证,在每次将数据划分为K个分区之前,都先将数据打乱。最终分数是每次K折验证分数的平均值。
评估模型的注意事项
数据代表性
通常,要求train和test都能代表当前数据,所以,划分数据集前,应该随机打乱数据;以免出现mnist数据集train只包含1-7的数字,test只包含9的数字,这种可笑错误。
时间箭头
如果想要根据过去 预测未来,则划分数据时 不应该随机打乱数据,因为打乱会造成时间泄漏:你的模型将在未来数据上 做训练。该情况,应该确保test数据的时间 都晚于train数据。
数据冗余
数据中的某些样本 出现了多次,则打乱数据 并划分train/valid会导致两个数据集间的数据冗余,就会出现在部分train数据上评估模型性能效果的问题。即一定要确保train和valid间 没有样本交集。
边栏推荐
- Jupyter内核正忙、内核挂掉
- After unicloud is released, the applet prompts that the connection to the local debugging service failed. Please check whether the client and the host are under the same local area network.
- Multi-Modal Face Anti-Spoofing Based on Central Difference Networks学习笔记
- ERROR Error: No module factory availabl at Object.PROJECT_CONFIG_JSON_NOT_VALID_OR_NOT_EXIST ‘Error
- VTK环境配置
- Markdown help documentation
- 场效应管 | N-mos内部结构详解
- 2021美赛C题M奖思路
- Pytorch学习笔记13——Basic_RNN
- Numpy常用函数
猜你喜欢

JS写一段代码,判断一个字符串中出现次数最多的字符串,并统计出现的次数JS

浏览器查找js绑定或者监听的事件

Multi-Modal Face Anti-Spoofing Based on Central Difference Networks学习笔记

Gradle sync failed: Uninitialized object exists on backward branch 142

jenkins +miniprogram-ci upload WeChat applet with one click

对js的数组的理解

CMOS管原理,及其在推挽电路中的应用

npm WARN config global `--global`, `--local` are deprecated. Use `--location solution

VTK:Could not locate vtkTextRenderer object.

QT VS中双击ui文件无法打开的问题
随机推荐
一个简单的bash转powershell案例
浅谈对分布式模式下CAP的理解
数据库 | SQL查询进阶语法
Android软件安全与逆向分析阅读笔记
腾讯云GPU桌面服务器驱动安装
Flow control statement in js
cocos2d-x-3.x 修改和纪录
quick lua加密
[swagger close] The production environment closes the swagger method
Talking about the understanding of CAP in distributed mode
计算图像数据集均值和方差
understand js operators
VTK环境配置
360 加固 file path not exists.
cocos2d-x-3.2 不能混合颜色修改
ERROR Error: No module factory availabl at Object.PROJECT_CONFIG_JSON_NOT_VALID_OR_NOT_EXIST ‘Error
flutter arr 依赖
podspec自动化升级脚本
Android software security and reverse analysis reading notes
Sqlite column A data is copied to column B