【PyTorch入门】之模型选择、过拟合与欠拟合介绍

我自己的公众号【拇指笔记】,每天写写我自己学习中记下的笔记,欢迎各位大神关注一下~

1. 模型选择

机器学习过程中,评估候选模型并从中选择模型的过程叫做模型选择。模型选择的对象不仅是不同的模型也可以是有着不同超参数的同一模型。

1.1 训练误差与泛化误差

​ 训练误差与泛化误差都可以使用损失函数求得。训练误差是指模型在训练数据集上表现出的误差;泛化误差是指模型在测试数据集上表现出的误差。训练误差的期望小于或等于泛化误差(训练集训练出来的模型在训练集上的表现会优于或等于模型在测试集上的表现),因此一味降低训练误差并不一定会降低泛化误差,机器学习模型应主要关注泛化误差。

1.2 验证数据集

为了得到有效的模型,我们需要使用验证数据集(验证集)来对不同模型进行评估。验证数据集通常是预留在训练数据集和测试数据集以外的数据。

选取的方法:从给定的训练集中选取出一部分作为验证集,其余部分作为真正的训练集。在实践中,验证集与测试集的界限比较模糊

1.3 K折交叉验证

由于数据通常是有限的,在训练数据中预留大量不参与训练的验证集有些不切实际。因此引入一种改善的方法:KK折交叉验证。

KK折交叉验证:把原始训练集分割成KK个不重合的子数据集,然后对模型做KK次训练和验证。每一次我们都选其中一组子集作为验证集,其他子集作为训练集,最后对这KK次训练误差和验证误差求平均值。

2. 过拟合和欠拟合

在对模型进行训练的过程中,经常会出现两种常见的问题过拟合和欠拟合。过拟合是模型无法得到较低的训练误差;欠拟合是模型的训练误差远远小于它的泛化误差。造成这两种问题的原因主要是模型复杂度和训练数据集大小。

2.1 影响因素

2.1.1 模型复杂度

为了解释模型复杂度,我们以多项式函数拟合为例。
y^=b+k=1Kxkwk \hat{y} = b+\sum_{k=1}^Kx^kw_k
对于阶数越高(K值更大)的多项式,模型的参数更多,模型的选择空间也就越大,所以高阶多项式与低阶多项式相比更容易在相同训练集上获得更低的训练误差。

对于给定的训练集,模型复杂度与误差之间的关系如下图所示

【PyTorch入门】之模型选择、过拟合与欠拟合介绍

如果模型的复杂度过低,则容易出现欠拟合;如果模型过于复杂,则容易出现过拟合。因此,应对模型过拟合与欠拟合问题的一个办法就是选取复杂度适宜的模型。

2.1.2 训练集大小

一般来说,训练数据集中样本过少(特别是比模型参数更少时)容易出现过拟合;但泛化误差不会随着训练集样本数增加而增加。因此数据集样本数多多益善。


欢迎各位关注【拇指笔记】,每天更新我的学习笔记~
【PyTorch入门】之模型选择、过拟合与欠拟合介绍