写点什么

实用机器学习笔记十九:模型验证

作者:打工人!
  • 2021 年 12 月 20 日
  • 本文字数:1452 字

    阅读完需:约 5 分钟

实用机器学习笔记十九:模型验证

前言:

本文是个人在 B 站自学李沐老师的实用机器学习课程【斯坦福 2021 秋季中文同步】的学习笔记,感觉沐神讲解的非常棒 yyds。

近似泛化误差:


对于机器学习模型来说,我们最关心的就是关心模型在所有未知数据上的预测误差,也就是模型的泛化误差。但是这需要很多很多的采样,因此,可以使用近似泛化误差来代表。方法如下:


  • 使用测试集上的泛化误差来代替真正的泛化误差。注意的是测试集只能被使用一次

  • 就像期中考试你只能做一次,不能出了成绩之后,再做一次来代替原来的成绩。

  • 使用验证数据集(常用)验证数据集可以使用多次。

  • 从训练数据集中拿出一部分来作为验证数据集。

  • 日常我们所说的“测试”,“测试准确率”指的就是验证数据集上面的测试,并不是真正严格意义上的测试。

生成验证数据集:

随机分割:


  • 把数据随机分成两部分:一部分是训练集,另一部分是验证集(常常叫“测试集”)

生成验证集
  • 训练集用来训练模型,验证集上的误差来近似泛化误差。

  • 在模型选择时,通常使用验证集上的误差或者精度等指标来选择模型。

  • 常常随机选择样本容量的来作为验证集,n = 50,40,30,20,10

独立同分布(iid):


上面我们说要随机分割数据,但是有时候对于一些数据集,随机分割是不行的。随机分割的前提:数据集中的每一个样本之间是独立同分布(样本之间没有关联吗,可以看做是由一个函数独立随机生成的)


  • 实际生活中,很多数据是不符合独立同分布假设的。

  • 数据中含有时序信息:比如:房价,股票

  • 直接随机分割:数据集中房价是一天一天的,每一天都有很多数据,如果直接随机分割的话,验证集中当天的数据会有一部分,第二天的数据也有一部分等等,训练集中当天的数据会有一部分,第二天的数据也有一部分,也就是说训练集中出现了未来需要在验证集上需要预测的数据。而房价预测问题要做的是预测未来的房价,这就会导致各种指标不合理。

  • 解决方案:比如整个数据集中有 100 天的房价信息,把前 70 天作为训练集,后 30 天作为验证集。


  • 样本属于不同的组别:比如人脸识别中,每一个人的人脸图片有很多张,如果随机分割的话,会出现同一个人的人脸即出现在训练集中,也会出现在验证集中。训练出来的模型都看到过这个人脸了,再去验证,精度偏高。

  • 解决方案:按照人脸组别来分,如果 100 个人的数据,随机 70 人做训练,剩下的做验证。


  • 数据不平衡:数据集中有些类数据量比较大,有些类数据量比较小。数据量不平衡。如果直接随机采样,类数据量大的会被采样的多,反之。

  • 解决方案:类数据量少的,在分割的时候,要多采样。

K 折(K-fold)交叉验证:


  • 适用场景:数据集比较小,没有充足的数据,无法拿出一个单独的集合来做验证集。


  • 具体步骤:

  • 把数据平均分成个部分。如下图所示(下图是分了 3 部分,即):

K折分割数据
  • For i =1,...,K:

  • 使用第 i 个部分来作为验证集,剩余部分用来训练,得到验证误差

  • 把 K 个验证误差的平均作为泛化误差

  • K 通常取:5 或者 10。根据数据量的多少来选择

容易犯的错误:


  • 李沐大神的观点:在机器学习中超好的模型往往都是有 bug 的。

  • 原因:验证集被污染了

  • 验证集和训练集有数据交叉:

  • 比如:数据集中有些样本是重复的,比如同一个人的图片组,超过两组。因此在验证集分割时,这个人的图片组就有可能出现在训练集和验证集中

  • 常常发生在数据融合时:比如:评估在 ImageNet 上训练的模型,就根据数据集上的标号通过搜索引擎来收集一些数据作为验证集,可是你忘了,ImageNet 数据集也是从搜索引擎上爬下来的。

  • 信息泄露:

  • 非 iid 的数据集,直接随机分割训练集和验证集。就如前面所讲的,会出现未来将要在验证集上的样本出现在了训练集上,导致泛化误差很小。

发布于: 2 小时前阅读数: 8
用户头像

打工人!

关注

打工人! 2019.11.10 加入

InfoQ年度最佳内容获得者。 InfoQ签约作者 本人打工人一枚,自动化和控制专业入坑人一枚。目前在研究深度强化学习(DRL)技术。准备入坑互联网小白一枚。喜欢了解科技前沿技术,喜欢拍照。

评论

发布
暂无评论
实用机器学习笔记十九:模型验证