文章目录
前言
这篇文章首先介绍了什么是训练集、验证集和测试集,举了一个例子来说明三者间的区别。紧接着提出了什么是训练误差和泛化误差。然后讨论了当训练数据稀缺时K折交叉验证的使用。最后说明了什么是欠拟合和过拟合以及是否过拟合或欠拟合可能取决于模型复杂性和可用训练数据集的大小。
什么是训练集、验证集和测试集?
训练集
训练集:机器学习模型用于训练和学习的数据集。
训练集用于训练模型的参数。模型通过训练集来学习数据的特征,并产生一个模型,以便在之后的预测中使用。
验证集
验证集(评估集):用于评估模型性能的数据集,以便选择和调整合适的超参数。
验证集的作用是帮助开发人员调整模型,避免模型过拟合或欠拟合。
测试集
测试集:用于测试模型最终性能的数据集。
测试集的作用是测试模型在未见过的数据上的性能,并判断模型是否足够准确和鲁棒。
一个简单的例子
假设一个大学生正在努力准备期末考试,他手里的复习资料有练习题和往年真题。该大学生通过练习题的训练之后,想检验一下自己的备考效果,于是通过完成往年真题,根据在往年真题中得到的分数情况来调整自己的备考状态,最终在真实的期末考卷上测试自己的水平。
什么是训练误差和泛化误差?
错分率
在给定数据集上,模型预测错误的样本所占的比例。
训练误差
训练误差:模型在训练数据集上计算得到的误差。即在训练集上训练完毕后在训练集本身上进行预测得到了错分率。
泛化误差
泛化误差:模型应用在同样从原始样本的分布中抽取的无限多数据样本时,模型误差的期望。即模型在新数据集(训练集上没见过的数据)上的错分率。
问题是,我们永远不能准确地计算出泛化误差。这是因为无限多的数据样本是一个虚构的对象。在实际中,我们只能通过将模型应用于一个独立的测试集来估计泛化误差,该测试集由随机选取的、未曾在训练集中出现的数据样本构成。
一个简单的例子
每当期末考试来临时,我都会整理本学期的作业习题和历年考试真题,通过大量的刷题,在短时间内掌握了大量的题目和答案。尽管如此,在考试中,并不能保障每次都很考出好的成绩。因为我只是尝试死记硬背,如果考题正好在我的记忆中,我就会考出好成绩,反之,如果考试中出现了我没有见过的题目,我就无法准确地回答。在这种情况下,即使遇到了记忆中的题目,我仍有可能做错,我所犯的错误可以被称为“训练误差”,因为这些错误反映了我对训练数据的掌握程度。
后来我意识到,仅仅依赖记忆是不够的。我开始尝试通过做题来理清知识点之间的逻辑关系,构建起完整的知识体系。这样,即使在考试中遇到了我之前没有见过的题目,我也能通过已有的知识框架来分析和解决问题。但是,即便如此,我还是有可能犯错,这时候所犯的错误就可以被称为“泛化误差”,因为这些错误反映了我对未知数据的预测能力。
K K K折交叉验证
当训练数据稀缺时,我们甚至可能无法提供足够的数据来构成一个合适的验证集。这个问题的一个流行的解决方案是采用 K K K折交叉验证。这里,原始训练数据被分成K个不重叠的子集。然后执行K次模型训练和验证,每次在K−1个子集上进行训练,并在剩余的一个子集(在该轮中没有用于训练的子集)上进行验证。最后,通过对K次实验的结果取平均来估计训练和验证误差。
算法步骤
- 将训练数据分成 K 块大小相等的子集
- For i = 1, 2, ··· , K
- 使用第 i 块作为验证数据集,其余 k-1 个子集作为训练数据集
- 执行完上述过程 K 次,每次将不同的子集作为验证集
- 取 K 次测试结果的平均值作为最终的性能评估指标
优缺点
优点:
- 保证每个样本都有机会作为验证集的一部分,从而使得模型的评估更为全面和均衡。
- 经过多次划分,大大降低了结果的偶然性,从而提高了模型的准确性。
- 对数据的使用效率更高。
缺点:
- 对数据随机均等划分,不适合包含不同类别的数据集。
比如:数据集有5类数据(ABCDE各占20%),抽取出来的刚好也是按照类别划分的5类,第一折全是A,第二折全是B……在这种情况下,模型用BCDE训练的模型去测试A类数据、ACDE的模型测试B类数据,这样会导致准确率很低。
什么是欠拟合和过拟合?
欠拟合(underfitting)
欠拟合是指模型在训练集、验证集和测试集上均表现不佳的情况。即模型过于简单(表达能力不足),无法捕捉到数据中的基本模式。
过拟合(overfitting)
过拟合是指模型在训练集上表现很好,到了验证和测试阶段就很差,即模型的泛化能力很差。
举一个简单的例子
- 图一的模型是一条线型方程。 可以看到,所有的红点都不在蓝线上,所以导致了错误率很高,这是典型的不拟合的情况。
- 图二 的蓝线则更加贴近实际的红点,虽然没有完全重合,但是可以看出模型表示的关系是正确的,拟合效果较好。
- 所有点都在蓝线上,这时候模型计算出的错误率很低,(甚至将噪音都考虑进去了)。这个模型只在训练集中表现很好,在验证集和测试集中的表现就不行。 这是典型的过拟合情况。
过拟合和欠拟合产生的原因
- 模型复杂性
- 可用训练数据集的大小
模型复杂度
当模型的复杂度过高时,模型容易过拟合,即在训练数据上表现良好,但在测试数据上表现较差。因为模型过于复杂,它可以拟合数据集中的任何细节和噪声,从而导致模型对数据集中的噪声产生过度敏感,无法很好地泛化到新数据集上。
当模型的复杂度过低时,模型容易欠拟合,即在训练数据和测试数据上表现都较差。因为模型太简单,无法很好地拟合数据集中的规律和特征,从而导致无法很好地泛化到新数据集上。
数据集的大小
- 训练数据集中的样本越少,我们就越有可能(且更严重地)过拟合。
- 随着训练数据量的增加,泛化误差通常会减小。
- 一般来说,更多的数据不会有什么坏处。给出更多的数据,我们可能会尝试拟合一个更复杂的模型。能够拟合更复杂的模型可能是有益的。如果没有足够的数据,简单的模型可能更有用。