从零开始机器学习-7 训练集和测试集

本文由 沈庆阳 所有,转载请与作者取得联系!
在继续下去之前,我们需要提一下泛化。

泛化和过拟合

泛化(Generalization),指的是模型可以很好地拟合新的数据(以前不曾出现过的)。针对某些问题,我们可以仅仅使用一条直线来分类。虽然有一些数据可能不会很好地将所有的样本都正确分类,但我们提倡这样做。
如果将样本用十分复杂的模型进行分类,也许会产生十分复杂的曲线,这些曲线可以做到百分百地将样本中的所有样本进行正确的分类。但这样就是最好的么?当我们对新的数据进行预测的时候,往往会发现并不如此。这个复杂的模型对新的数据预测或许会十分糟糕,这就是过拟合。
机器学习的目标是对真实的概率分布做出正确的预测。我们在训练的过程中,这个概率分布是未知的。在机器学习领域,奥卡姆剃刀定律解释如下:
机器学习模型越简单,良好的结果就越可能不仅仅基于样本的特性。
奥卡姆剃刀定律

对于机器学习来说,我们需要使用以前从未见过的数据来进行预测。那么如何获得这些数据呢?目前通常采用的方法是将数据集划分为训练集和测试集。

训练集和测试集

我们在前面完成Object Detection的项目,训练自己的模型的时候获取过大量的照片,这些照片就是我们的数据集(DataSet)。同时,我们将数据集分为了训练集(Training Set)和测试集(Test Set)。让我们再来回顾一下训练集和测试集的概念。
数据集的划分

训练集:用于训练模型的子集。
测试集:用于测试训练后模型的子集。

当把数据集划分为训练集和测试集的时候,我们的模型训练的流程是这样的。在每一次迭代的过程中,我们先通过训练集的数据对模型进行训练,而后通过测试集来对该模型进行测试,并以测试结果作为指导来调整模型的各种超参数。
请大家根据这个流程思考一下该流程可能存在哪些问题?还有没有可以改进的空间?
划分训练集和测试集的工作流程
对于训练集,训练集的规模越大,我们训练的模型的学习效果就越好。对于测试集,测试集的规模越大,我们对于评估指标的信息就越充足。通常,测试集与训练集的比例在1:9左右。但这个比例仅仅提供参考,在实际应用中仍然要应变。
对于测试集的选择有如下要求:1、规模足够大 2、能代表整个数据集
此外,千万不要将测试集的数据混入训练集当中,也就是说错误地对测试集进行了训练。如果发现训练模型测试的准确度达到了100%,请不要开始庆祝,先找一下你的训练集中是不是混入了测试集的数据吧。

验证:另一种划分

对于仅仅将数据集分为训练集和测试集的流程,我们可以发现,通过一次次的使用测试集对模型进行测试,会造成不自觉地过拟合测试集数据的风险(毕竟是以测试集的测试结果来作为参考调整模型的超参数)。那么有没有一种更好的划分方法呢?
有!那就是引入另一个名为验证集的数据集,这些数据成为验证数据。
加入验证集的划分方法

在这个流程中,我们暂且不使用任何测试数据。在每一次迭代的时候,每一次验证的时候,每一次调整超参数的时候仅根据验证数据来得到较好的结果。此时再根据验证集得到的模型来代入测试集的数据进行测试。如果这时候模型通过了测试集的测试(与验证集测试的结果同样好)。那么这次训练便是成功地。如果通过了验证集的测试,却没有通过测试集的测试,那么便可知我们对验证集进行了过拟合。
引入了验证集的工作流程

后继

在后续的几篇文章中,我们将通过Tensorflow的实战,从头开始几个机器学习的小项目,并在实战中讲解前几堂课所学习的知识。

觉得写的不错的朋友可以点一个 喜欢♥ ~
谢谢你的支持!

猜你喜欢

转载自blog.csdn.net/sqy941013/article/details/80528255