宜宾新闻网

宜宾新闻网、市政府以新闻为主的宜宾新闻门户网站,下设宜宾新闻网、掌上宜宾客户端、宜宾党政快讯、互动宜宾论坛、宜宾发布政务新媒体等平台。



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

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

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

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

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

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

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

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

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

 标签: none

作者  :  admin



关于我

about me

admin

联系我

标签云