多项式函数拟合实验

为了理解模型复杂度和训练数据集大小对欠拟合和过拟合的影响,下面我们以多项式函数拟合为例来实验。首先导入实验需要的包或模块。

我们将生成一个人工数据集。在训练数据集和测试数据集中,给定样本特征xx,我们使用如下的三阶多项式函数来生成该样本的标签:

其中噪声项ϵϵ服从均值为0、标准差为0.01的正态分布。训练数据集和测试数据集的样本数都设为100。

这是我的数据集,随机200服从标准正态分布(0,1)的数据
欠拟合和过拟合,多项式函数实验

和线性回归一样,多项式函数拟合也使用平方损失函数。因为我们将尝试使用不同复杂度的模型来拟合生成的数据集,所以我们把模型定义部分放在fit_and_plot函数中。

三阶多项式函数拟合(正常)

我们先使用与数据生成函数同阶的三阶多项式函数拟合。实验表明,这个模型的训练误差和在测试数据集的误差都较低。训练出的模型参数也接近真实值:
线性函数拟合(欠拟合)
我们再试试线性函数拟合。很明显,该模型的训练误差在迭代早期下降后便很难继续降低。在完成最后一次迭代周期后,训练误差依旧很高。线性模型在非线性模型(如三阶多项式函数)生成的数据集上容易欠拟合。

欠拟合和过拟合,多项式函数实验
可以看到拟合效果很好

线性函数拟合(欠拟合)

我们再试试线性函数拟合。很明显,该模型的训练误差在迭代早期下降后便很难继续降低。在完成最后一次迭代周期后,训练误差依旧很高。线性模型在非线性模型(如三阶多项式函数)生成的数据集上容易欠拟合。

这是我把拟合函数从三阶变为一阶之后的效果,在足够大的样本情况下仍然拟合不好,特点是损失函数loss降不下去,说明模型不好
欠拟合和过拟合,多项式函数实验

训练样本不足(过拟合)

事实上,即便使用与数据生成模型同阶的三阶多项式函数模型,如果训练样本不足,该模型依然容易过拟合。让我们只使用两个样本来训练模型。显然,训练样本过少了,甚至少于模型参数的数量。这使模型显得过于复杂,以至于容易被训练数据中的噪声影响。在迭代过程中,尽管训练误差较低,但是测试数据集上的误差却很高。这是典型的过拟合现象。
这是我用三阶函数拟合,但是只给定两个数据训练。可以看出来拟合不好,特点是train的loss能降下去,但是test效果不好。解决方法之一是增加数据集
欠拟合和过拟合,多项式函数实验

我将数据集增加到4个:
欠拟合和过拟合,多项式函数实验
效果好了一些

增加到6个:

欠拟合和过拟合,多项式函数实验
已经差不多了,最后我增加到8个:

欠拟合和过拟合,多项式函数实验
可以看得出来,拟合得很好了。所以过拟合比欠拟合解决方法简单很多。欠拟合得话就得考虑是不是拟合函数复杂度(模型复杂度)不够,考虑换模型,或者增加网络深度。

相关文章:

  • 2021-12-13
猜你喜欢
  • 2021-12-13
  • 2021-12-23
相关资源
相似解决方案