5. Your development and test sets 你的开发集和测试集(《MACHINE LEARNING YEARNING》翻译)

下面几个(5~12)章节将主要介绍
Setting up development and test sets 建立开发集和测试集

你的开发集和测试集

让我们回到之前关于猫的图片的例子:你制作了一个移动APP,用户可以上传很多不同事物的图片到你的app上,你想要自动发现关于猫的图片。

你的团队从不同的网站下载大量猫(正样本,positive examples)和非猫(负样本,negative example)的图片,从而获得了一个很大的数据集。他们将这些数据按 70%:30%分为训练集和测试集。利用这些数据,他们构建了一个猫的检测算法,它在训练集和测试集上表现都很好。

但是当你把这个分类器部署倒移动APP上时,你发现它的表现非常糟糕!
这里写图片描述
发生了什么?

你发现用户上传的图片和你从网站下载的作为训练集的图片有些不同:用户使用手机拍摄的图片分辨率更低,模糊,且照明效果较差。由于你的训练集和测试机数据都来自于网站图片,你的算法没有在你所关心的智能手机图片的实际分布上一般化得很好。

大数据时代之前,在机器学习中人们常使用随机的70%:30%分割训练集和测试集。这种做法能够work,但是在越来越多的应用(在这些应用中,训练集的分布(在我们的例子中的网站图像)不同于你最终关心的分布(手机拍摄的图像))中是个坏主意。

我们通常定义:

  • 训练集(Training set)——你运行你的算法在这上面。
  • 开发集(Dev/development set)——这部分数据用来调参,选择特征,以及对学习算法做出其他决定。有时也被称为留出交叉验证机(hold-out cross validation set)
  • 测试集(Test set)——这部分数据用来评估算法的性能,但不要依靠这部分数据对使用的学习和参数做出任何决定。

一旦你定义一个开发集(Dev/development set)和测试集(Test set),你的团队将尝试各种idea(例如不同的学习算法参数),看哪一种最好。开发集和测试集能够使你的团队快速看到你的算法做得有多好。

换句话说,开发集和测试集的目的是指导你的团队对机器学习系统做出最重要的改变

所以你应该做到:

  • 选择开发集和测试集,以反映你期望在未来获得的数据,并希望在上面做得很好。

换句话说,你的测试集不应该只是可用数据的30%这么简单,特别是当你期望得到的数据(移动app的图像)和你的训练数据(网页图像)在性质上不太一样时。

如果你尚未发布你的app,也就意味着还没有任何用户,因此可能无法获得你未来想要做得很好的数据。但是你仍然可以尝试去接近这一点。例如,请你的朋友拍一些手机照片并发给你。一旦你的app启动后,你可以使用用户的实际数据更新你的开发/测试集。

如果你真的没有任何方法获取接近你期望的数据,也许你可以使用网站图片作为开始。但是你应该清醒地意识到这种做法可能导致你的系统不能一般化(generalize)的很好。

有时可能我们需要决定投资多少去获取好的开发集和测试集。切记不要假定你的训练集分布和测试集分布必须是一样的。尝试去挑选能反映你最终想要表现很好的数据作为测试样本,而不是你遇到的任何数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值