当前位置:网站首页>评估机器学习模型-摘抄
评估机器学习模型-摘抄
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间 没有样本交集。
边栏推荐
- quick-3.5 ActionTimeline的setLastFrameCallFunc调用会崩溃问题
- This in js points to the prototype object
- 为数学而歌之伯努利家族
- np.fliplr与np.flipud
- Gradle sync failed: Uninitialized object exists on backward branch 142
- cv2.resize()是反的
- SSH automatic reconnection script
- Global scope and function scope in js
- Hyper-V新建虚拟机注意事项
- unicloud 云开发记录
猜你喜欢

Principle analysis of famous website msdn.itellyou.cn

朴素贝叶斯文本分类(代码实现)

二进制转换成十六进制、位运算、结构体

ROS之service编程的学习和理解

禅道安装及使用教程

QT VS中双击ui文件无法打开的问题

The server time zone value ‘й‘ is unrecognized or represents more than one time zone

Pytorch学习笔记13——Basic_RNN

Tencent Cloud GPU Desktop Server Driver Installation

Pytorch常用函数
随机推荐
VTK环境配置
TransactionTemplate transaction programmatic way
VS2017 connects to MYSQL
jenkins +miniprogram-ci 一键上传微信小程序
Numpy常用函数
深度学习知识点杂谈
js中的this指向与原型对象
VS2017连接MYSQL
function in js
Hyper-V新建虚拟机注意事项
understand js operators
自定dialog 布局没有居中解决方案
pytorch模型微调finetuning训练image_dog(kaggle)
Gradle sync failed: Uninitialized object exists on backward branch 142
Sqlite A列数据复制到B列
Pure shell implementation of text replacement
cocos create EditBox 输入文字被刘海屏遮挡修改
random.randint函数用法
禅道安装及使用教程
quick-3.6源码修改纪录