首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

机器学习的算法测试与验证:训练集、测试集、验证集以及交叉验证

开头语:电话簿是一个储存朋友的魔盒,假如我遇到困难,就要向他们发出求救信号。一种畏惧孤独的潜意识,像冬眠的虫子蛰伏在心灵的旮旯。人生一世,消失的是岁月,收获的是朋友。虽然我有时会几天不同任何朋友联络,但我知道自己牢牢地粘附于友谊网络之中。

我们知道机器学习是关于如何让机器可以更好的处理某些特定任务的理论,它可以从数据中学习,而不是像传统编程那样将规则进行清晰的编码。他可以分为监督式学习和非监督学习。现在有这么一个问题就是,当你训练好一个机器学习算法模型之后,你肯定不只是希望这个机器学习算法只是在训练集数据上效果好,更重要的是希望能够在实际的环境中取得很好的效果,也就是这个算法有良好的泛化能力。那么我们要怎么才能做到这一点呢?

机器学习的算法测试与验证:训练集、测试集、验证集以及交叉验证,一个不错的选择就是将你的数据分割成训练集和数据集两部分。顾名思义,训练集就是用来训练算法模型的,而测试集就是用来测试算法模型的。那么我们用什么来评估我们的算法模型是否能有良好的泛化能力,能够适应新的场景呢?我们可以通过泛化误差来评估你的模型。通过测试集来评估你的模型就可以得到泛化误差的评估,这个估值就可以告诉你,你的算法模型是否能良好的处理新的环境数据和处理能力如何?如果训练误差很低,但是相应的泛化误差很高,那么模型就是过拟合了。

一般来说,我们会用80%的数据进行训练,而20%的数据进行测试。

所以假设有两个算法模型具有相近的精度和处理速度,那么你应该选择哪一个模型呢?这时候就应该训练这两个模型,通过对比着着两个算法模型对测试集的泛化能力,自然选择高泛化能力的算法模型。

我们可能会遇到这样一个问题,当我们选择了一个有高泛化能力的算法模型后,为了避免过度拟合,我们使用了正则化技术,为了选择一个最佳的超参数,其中一个做法就是使用100个不同的超参数来训练100个不同的模型。这时候我们得到了最佳超参数,生成的泛化误差也是最小的。假设只有5%。当你满怀希望的将算法模型在生成环境中运行时,发现竟然误差高达了15%。这是怎么回事呢?

这是因为你对测试集的泛化误差进行了多次度量,并调整模型和超参数来得到拟合那个测试集的最佳模型。也就是说,你这个算法模型更多是为测试集准备的,因此在新的数据面前往往得不到良好的表现。

为了解决这个问题,我们的做法就是从数据中在分出一个验证集。这样,我们同样适用多个不同的超参数训练多个模型,然后通过验证集,选择最好的模型及其相应的超参数。最后使用测试集进行一遍测试,并得到泛化误差的估值。

为了避免验证集浪费太多的训练数据,我们常用的技术就是交叉验证。即将训练集分成若干个互补的子集,然后每个模型都通过这些子集的不同组合来训练,之后用剩余的子集进行验证。当我们选择了一个模型和超参数之后,在对整个训练集训练一次,最后再用测试集测量泛化误差。

小编写完一篇文章真的很不容易,好歹也是费劲了心思,就算不是最好的,但是肯定是最用心的,各位哥哥姐姐弟弟妹妹们,现编知道你们一定是最善良,最可爱的美男美女,一定会对小编的文章感动的,小编也别无所求,就是给小编点一个小小的关注和赞就行了,一边一定会在这里祝福大家的

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190209A0AOJA00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券