【机器学习300问】92、训练集和测试集来自不同分布,如何构建模型?

        假设有一个团队想开发手机应用识别识别小猫图片。但由于深度学习算法对训练数据的要求很高。这个团队为了让训练集更大,会收集来自不同分布的数据进行训练。业余用户上传图片与专业高清图片有差异,这种做法虽然能获得大量的训练数据,但训练数据与实际使用时的测试数据不属于用一分布,会导致APP的识别准确率很低。

训练集和测试集来自不同分布如何构建模型?


一、数据预处理

(1)数据增强

        对专业高清图片进行多种变换,如旋转、缩放、剪切、色彩调整等,以模拟业余用户拍摄的图片效果。这有助于扩大训练集的多样性,减少过拟合,并使模型更加鲁棒。

(2)统一图片质量

        尽量将所有输入图片的质量和大小标准化,比如通过调整分辨率、亮度、对比度等,使得模型不会因为图片质量差异而产生偏见。

二、数据集构建

(1)平衡数据集

        确保训练集中业余用户和专业摄影师拍摄的图片比例接近实际应用场景中的预期分布。如果可能,收集更多样本以覆盖各种拍摄条件下的猫图片。

(2)分层抽样

        在划分训练集和测试集时,采用分层抽样的方法,确保每个类别和质量层次在训练集和测试集中都有代表性,避免某些类型的数据过度集中在某一部分。

        建议将数据集分成训练集、验证集和测试集,训练集包含来自网页下载的200000张图片和5000张手机上传的图片。验证集和测试集则都是2500张手机上传的图片。这样能更好地瞄准需要处理的目标数据分布,提高系统性能。虽然训练集和验证集、测试集分布不同,但长期来看这种设置能带来更好的性能。

专业照片爬虫获取,用户拍摄上传非专业照片
爬虫采集的图片(分布A)用户上传的图片(分布B)
200000张10000张
不同分布的数据构建数据集的方法
训练集200000(分布A) + 5000(分布B)
验证集2500(分布B)
测试集2500(分布B)

三、如何评估这样划分数据集训练出来的模型?

        在模型的误差评估中,需要同时考虑训练集误差和测试集误差,以便判断模型的方差、偏差问题和泛化能力。若训练数据和验证/测试数据来自不同分布,模型在不同数据集表现良好可能是因为模型只见过训练集数据,没见过测试集数据,而不因为模型方差问题。

        为避免因分布不同而出现误判,此时的做法是定义一个名为“训练-测试集”的子集,它的所有数据来自之前的训练集分布,但它里面的数据不参与模型训练。

数据集误差情况1误差情况2
train1%1%
train-dev9%1.5%
dev10%10%

        在情况1中,训练误差是1%,我们说训练-验证集上的误差是9%,然后验证集误差是10%,训练-验证集误差与训练误差相比,错误率真的很大。而训练数据和训练-验证数据的差异在于,你的神经网络能看到训练数据并直接在上面做了训练,但没有在训练-验证数据上直接训练,所以结论是模型存在方差问题。因为训练-验证集误差是在和训练集误差来自同一分布的数据中测得的。

        在情况2中,假设训练误差为1%,训练-验证误差为1.5%,验证集的错误率上升到10%。现在模型的方差问题很小,因为当模型从见过的训练数据转到训练-验证集数据,错误率只上升了一点。但当模型在验证集跑时,错误率就大大上升了,所以这是数据不匹配的问题。因为模型没有直接在训练-验证集或者验证集上训练过,但模型训练误差与训练-验证集相差不大,所以导致模型在测试集上误差变大的原因只能是这两个数据集来自不同的分布。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值