前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >5. 开发集和测试集

5. 开发集和测试集

原创
作者头像
YingJoy_
发布2018-05-09 11:08:47
9533
发布2018-05-09 11:08:47
举报
文章被收录于专栏:应兆康的专栏应兆康的专栏

让我们回到之前关于猫咪图片的例子: 你开发了一个移动APP, 用户可以上传许多不同的图片到你的APP上,你想识别出用户上传的图片中所有包含猫咪的图片。 你的团队下载了很多图片数据集,包含猫咪图片(正样本,positive example)和非猫咪图片(负样本, negative example)。他们将这些数据划分为70%的训练集,30%的测试集。当使用这些进行算法训练时,效果非常不错。 但是将算法(分类器)部署到APP的时候,发现效果却非常的糟糕!

《5. 开发集和测试集》
《5. 开发集和测试集》

发生了什么?

你发现用户上传的图片和你团队下载作为训练集的图片不同。用户使用收集拍摄的图片分辨率更低,模糊,而且照明效果较差。由于你的训练/测试集来源于网站上的图片,你的算法没有很好的把智能手机图片一般化。 大数据时代之前,在机器学习中人们对数据集的一个常见划分规则为:将数据集划分为70%/30%的训练集和测试集。但是在越来越多的应用(比如上面的例子)中,收集的数据与训练数据不同,这个时候该规则就不适用了。

我们通常定义:

• 训练集(Training set) — 运行在算法上的数据集. • 开发集(Dev/development set) — 这部分数据通常用来调参,选择特征,以及对学习算法进行改进。有时也被用于交叉验证。 • 测试集(Test set) — 这部分数据通常用于评估算法的性能,但不要依靠这个数据对你的算法进行调参和修改。 一旦你定义了一个开发集和测试集,你的团队就可以进行模型的建立,通过调整参数,特征选择等。从而制定最有效的机器学习算法。开发集和测试集可以很快的告诉你算法的运行情况。

换句话说,开发集和测试集的目的是为了让你对算法进行改进,使算法效果变得更好

所以你应该:

• 选择开发集和测试集时,主要选择可以反映未来需要获取的数据

换句话说,你的测试集不应该只是可用数据的30%这么简单,尤其是你得到的数据(移动app的图像)和你训练数据(网站图像)不一样的时候。 如果你还没有运行你的移动应用,也就意味着还没有用户,可能你就无法获取到一些比较好的数据,但是你可以尝试去获取这些数据。比如:让你的朋友拍一些手机照片发给你,一旦你的应用启动后,你可以使用实际的数据来更新你的开发/测试集。 如果你实在没有办法获取到你期望的数据,那么你可以从网站图片开始,不过这种做法可能会导致你的系统不能一般化(generalize)的很好。 有时,可能需要花费一些资金去获取比较好的数据集。切记不要认为你的训练集和测试集分布必须是一样的。尽量去选择那些可以反映真实情况的数据作为测试样本。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档