评估机器学习模型-摘抄

综述

通常,不会在训练模型的相同数据上 对模型进行评估。因为,随着训练的进行,模型在训练数据上的性能始终在提高,但在前所未见的数据上的性能则不再变化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间 没有样本交集

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值