《Machine Learning Yearning》第5章

接下来的几章都是讲关于验证集和测试集的设置。
第五章主要内容:
1.以前基本上将训练集和测试集7:3划分,但是现在数据越来越多,可能就不适用了。
2.训练集、验证集、测试集的作用。
3.描述了一种情况,就是用于训练算法的数据(包括训练集和验证集甚至是测试集)与实际上想真正运行的数据的分布(特征)不一样。这种情况下,实际运行效果不好。
4.给出几个建议。

五. Your development and test sets

 让我们回到之前讲的猫图片的例子:你运行了一个手机app,用户上传了很多不同内容的图片到你的app上。你想要自动地找出那些猫的图片。

 你的团队从不同的网站上下载猫图片(正样本)和非猫的图片(负样本),形成了大量的训练样本。他们把这些数据分成了70%和30%的训练集和测试集。使用这些数据,他们建立了一个能很好运行在训练数据和测试数据上的猫识别器。

 但是当你将这个识别器运用在那个手机app上,你发现性能非常差。

这里写图片描述

 这是为什么呢?

 你发现用户上传的图片和构成你的训练集的网站图片看起来不一样:用户上传的用手机拍下的图片,这些图片很多是低分辨率的、模糊的、光线不足的。因为你的训练集/测试集是由网页图片组成的,所以你的算法并不能很好地表现你所关心的实际分布:手机图片。

 在大数据时代出现之前,机器学习有个普遍的规则就是7:3随机的划分训练集和数据集。这种做法可行,但是在现在有越来越多的应用,他们训练集分布(我们例子中的网页图片)和实际上所关心的(手机图片)的分布是不一样的。

 我们通常定义:

  • 训练集(Training set)—你在这上面学习你的算法
  • 验证集(Dev/development set)—你用来调整参数、选择特征以及根据学习算法做出其他决策。有时也称为留出交叉验证集(hold-out cross validation set)。
  • 测试集(Test set)—你用来评估你算法性能的数据,但是不能用它的表现来改变学习算法或者使用的参数。

 一旦你确定了验证集和测试集,你的团队奖会尝试各种想法,例如不同的学习算法参数,去观察是否会运行好一点。验证集和测试集能使你的团队快速地看出你的算法运行情况。

 换句话说,验证集和测试集的目的是引导你的团队对机器学习系统做出重要的改变。

 所以,你需要做的是:
   选择验证集和测试集,它们能反映你将来获取的数据,并且性能很好。

 换句话说,你的测试集不应该只是可用数据的30%,特别是如果你将来的数据(手机图片)和你现在的训练数据(网站图片)的性质不同。

 如果你还没有发布你的手机app,你可能还没有任何用户,所以也不能得到能准确反映你将来要做的事情的数据。但是你可能仍然想试试估计一下。例如,让你的朋友拍摄猫的图片并发送给你,一旦你的app发布了,你可以使用实际用户数据来更新你的验证集/测试集。

 如果你确实无法获得接近你将来的数据,或许你可以使用网站图片开始。但是你应该意识到你的系统没有良好泛化性的风险。

 它需要判断决定投入多大的验证集和测试集。但是不要假设你的训练分布和测试分布是一样的。

 尝试选择能反映你最终想要表现的好的测试示例,而不是你碰巧使用的任何训练数据。

猜你喜欢

转载自blog.csdn.net/Lisa_Ren_123/article/details/80981943