MLY -- 5.your development and test sets

让我们回想一下猫图片那个例子:你们公司运行一个手机app,用户往app上上传许多不同物体的图片,而你想从这些图片中让机器自动找到猫图片。
你的团队从不同的网站上获得了包含猫的图片(正样例)和不包含猫的图片(负样例)。然后将70%的图片用作训练集,30%的图片用作测试集。使用这些图片,你的团队构建了一个猫检测器,这个检测器在训练集和测试集上表现很好。
但是,当你将这个分类器发布到移动端app时,其表现却很差。

为什么会这样?
你发现用户上传的图片与组成训练集的图片有不同的外观:用户上传的图片是用手机拍摄的,因此图片分辨率较低,模糊,并且光线不太理想。因你的训练/测试集都是由网站上的图片组成的,所以由训练集训练除的算法不能很好地泛化到手机图片的分布
在大数据时代之前,在机器学习中,随机70%/30%分割数据集为训练集和测试集是一个常见规则。这种规则可行,但是,在越来越多的“训练时的分布(例如上例网站图片)和最终关心的问题的分布(上例的手机图片)是不同的”应用上, 这种规则却不是一个好主意。
我们通常定义:

  • 训练集 – 用来训练你的学习算法
  • 开发集(development set) – 用来调整参数,选择特征,根据学习算法做出其他决定。有时也叫hold-out交叉验证集
  • 测试集 – 用来评价学习算法的表现,不能将其用于对学习算法和算法参数的选择。

一旦你们定义里开发集和测试集,你的团队就可以尝试不同的ideas(例如,不同的学习算法参数),从而发现哪种ideas表现最好。开发集和测试集能使你的团队快速地看到你们的学习算法表现的怎么样。
换句话来说,开发集和测试集能指引你的团队对机器学习系统做出最重要的改变
所以,你应该做到:
  选择的开发集和测试集能够反映你期望将来能得到的并且算法在上面表现不错的数据的特点。
换句话说,你的测试集不应该只是可利用的数据的30%,特别是将来的数据(移动端app图像)和你的训练数据(网站图像)不同时。
如果你还没有发布app,没有用户的你可能不能得到能够精确反映算法将来处理的数据的数据集。但是,你可以尝试得到一些近似数据。例如,拉上你的亲朋好友,让他们用手机拍照片并传给你。一旦你的app发布了,你就能够根据用户的数据更新你的开发/测试数据集啦!
假如,你没有任何途径能够得到一些近似数据,你也可以使用网站图像先开始。但你应该意识到,这会导致系统的泛化能力不好。
我们需要判断一下,在构建很棒的开发集和测试集上应该投资多少。但是不要妄想训练时的分布和测试的分布相同。尝试挑选能够反映“算法最终能在其上表现好的数据”的样例,而不是你碰巧得到的什么数据(这里的for training应该理解成整个训练过程,包括训练,交叉验证和测试)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值