PRML系列:1.1 多项式函数拟合

前言

此系列关于Pattern Recognition and Machine Learning的总结,博文记录一些在阅读过程中遇到的难点和自己的感悟。话不多说,直接进入正题吧。

正文

第一章第一节的内容关于多项式函数的拟合,假设我们给出了一系列的坐标点(x,y)们,可能是某个函数生成的,比如:y=sin(2πx)y = \sin(2 \pi x),如下图:

模式识别的目标是,根据给定的坐标点,去预测背后可能的假设(函数),即由蓝色点去预测绿色曲线 y=sin(2πx)y = \sin(2 \pi x)。后续的主题都围绕这个最基本的目标,但如何去预测呢?一个办法是通过假设一个函数f(x,w)f(x, w),其中ww是该函数的参数,然后让它去拟合图中每个蓝色点。

泰勒展开式告诉我们,任何函数都可以由任意M个多项式产生,所以可以用多项式和来进行拟合,于是有:

只要根据给定的点的集合(x, y)求出所有的ww即可。于是我们定义误差函数,直观上可以理解为,当前参数w∗w^*对数据的拟合程度,拟合程度越高(误差越小),那么它就有可能越接近真实的函数y=sin(2πx)y = \sin(2 \pi x).

误差函数如下:

tnt_n表示第n个样例的真实值,而f(xn,w)f(x_n, w)表示第n个样例的预测值。最小二乘法损失函数连续可微,在求导上有很好的性质,为了求得每个参数wiw_i,我们可以对其求导

求偏导的好处在于:对于每个参数wiw_i而言,偏导为0,代表损失函数取得极值。在E(w)E(w)中,我们显然需要极小值,即损失越小,拟合程度越高。

于是对于M个参数,可以求得M个偏导,M个方程,自然能够求得一个解析解,我也很好奇为啥是解析解,自己推导了一波,发现对于第i个参数wiw_i,都有形如:

\lambda_{1i} w_1 + \lambda_{2i} w_2 + \cdots + \lambda_{Mi} w_m = c_i

所以书中的一维多项式能够通过求偏导的方式得到全局唯一的最优解。

那是否意味着M越大越好?直观上来看,泰勒展开式如果M的值越大,那么对真实函数的近似能力越强,但在数据推得假设f(x)f(x)时,并不是如此。如书中所示:

需要指出的是,在这些由

函数生成的点中,还有个别点是噪声,所谓噪声可以理解为随机夹杂在数据集中的搅屎棍。它们的出现或多或少将影响分类器的学习性能。

从图中可以看出:M较小时,如M = 0,1时,函数的拟合程度很弱,当M = 9时,也出现了拟合程度较弱(why?)。这是很有趣的现象,机器学习界叫这现象为过拟合。我给个定义吧:由于函数的表达能力太强(模型复杂),它的表达能力远超真实数据所表现的这种“结构”,甚至把噪声的特性都学进来,从而离真实函数相差甚远。

产生的原因? 我很难从数学的角度去解释为什么M大,就会产生过拟合现象。但从直观上来看,可以这么理解,M的个数就好比一条长度为M的绳子,M越大,绳子越长(代表的是模型描述点的能力)。在一定的长度内,比如M = 3,为了让绳子尽可能符合大多数样本的规律,只能舍弃某些跳脱的很厉害的点(大多数这样的点为噪声)。而当M = 9时,因为绳子对于数据集而言太长了,它有这样的能力使得模型去符合每个点,自然就把噪声点给考虑进来了。

所以书中给出了一个很重要的结论:

We see that, for a given model complexity, the over-fitting problem become less severe as the size of the data set increases.

如果所给的数据集越庞大(噪声比例降低!),同样的M = 9时,则不会出现过拟合现象。如下图所示:

所以本节提出了三种解决方案: 1. 增大数据集的量 2. 采用交叉验证的方法(机器学习中常用来避免过拟合) 3. 采用正则化方法来约束参数

第一种在前面已经提过了,就不再赘述了。交叉验证的思想是把所给数据集分成训练集和测试集,在训练集训练的模型,拿到测试集去测量误差,两者的误差都很小时,则认为假设模型离真实函数越接近。

测试误差函数为RMS: ERMS=2√E(w∗)/NE_{RMS} = \sqrt 2 E(w^*) / N

其中N表示数据集中样例的个数,目的是为了归一化,因为训练集和测试集的个数常常不等,且E(w∗)E(w*) 没做归一化处理,所以在ERMSE_{RMS}中做掉。其余的系数2和开根号是为了得到真实的“线性”的误差,貌似没啥特别作用,不加也可以。测试结果如下图所示:

可以看到M = 9在测试集上表现相当糟糕,在M 在3到8表现都不错,根据奥卡姆剃刀原则,可以选择简单模型M = 3作为最终的模型。

那么为什么采用交叉验证能够有效的解决模型过拟合问题呢?我的思考,仅供参考。

因为噪声的产生,越复杂的模型的学习能力越强,所以函数出现过拟合现象是因为学得了每个点的特性(包括噪声),在图中反映的就是该函数忽上忽下,所以测试集中稍微有一些偏移就能导致极大的偏差。从训练的w∗w^*也可以观察得到:

M = 9时,大多数的wiw_i都特别大,所以xx的稍微扰动都可能产生一个极大极小的值。

这也就产生了第三种解决方案,利用正则化。说白了,正则化是给定M来约束参数ww的学习,即让ww尽量不要出现特别大的值,如上表所示。所以有了新的损失函数定义:

其中

,让损失函数和每个wiw_i相关。对M = 9, 但不同的λ\lambda能够得到如下图所示的结果:

对应的w∗w^*也有了变化:

不过值得思考的并不是这些表面结果,而是为什么让w∗w^*尽可能小,能够有更好的拟合效果?

我的猜测是大多数真实数据都会产生或多或少的左右偏移和上下偏移,以及跟采集器的周遭环境相关,有少量噪声产生。正如前文所说,由于上下偏移,越复杂的模型在小数据集中表达的更精准,那么求局部导数来看,它们更有可能产生一个冲击(无穷大的导数值),而无穷大是由所有w∗w*来表示的,那么自然w∗w^*中都可能存在非常大或者非常小的值。所以w∗w^*越大,假设函数的振幅越明显,所以才会选择更小的w∗w^*来让假设函数更平滑(而非突变)。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏人工智能LeadAI

零基础入门深度学习 | 第四章:卷积神经网络

无论即将到来的是大数据时代还是人工智能时代,亦或是传统行业使用人工智能在云上处理大数据的时代,作为一个有理想有追求的程序员,不懂深度学习这个超热的技术,会不会感...

4647
来自专栏专知

【干货】计算机视觉实战系列05——用Python做图像处理

【导读】专知成员Hui上一次为大家介绍讲解图像的缩放、图像均匀操作和直方图均衡化,这一次为大家详细讲解主成分分析(PCA)、以及其在图像上的应用。 【干货】计算...

3717
来自专栏JasonhavenDai

统计学习方法之K近邻法1.k近邻法(k-nearest neighbor,k-NN)2.k近邻模型3.k近邻算法的实现

1.k近邻法(k-nearest neighbor,k-NN) k近邻算法是一个基本分类和回归方法,k-NN的输入时实例的特征向量,对应于特征空间的点,输出是...

2835
来自专栏计算机视觉战队

前馈神经网络和BP算法简单教程

吴立德老师亲自讲解前馈神经网络和BP算法,让初学者对基础更加了解,对以后网络的改建和创新打下基础,值得好好学习!希望让很多关注的朋友学习更多的基础知识,打下牢固...

3226
来自专栏IT派

【无监督学习】DBSCAN聚类算法原理介绍,以及代码实现

主要包括:K-means、DBSCAN、Density Peaks聚类(局部密度聚类)、层次聚类、谱聚类。

1304
来自专栏人工智能

机器学习笔记

基本术语 数据集(data set): 一组数据的集合 样本/示例(instance/sample):数据集中的一个事件或对象 属性/特征(attribute/...

1749
来自专栏数据科学与人工智能

【机器学习】聚类算法总结

聚类的目标是使同一类对象的相似度尽可能地小;不同类对象之间的相似度尽可能地大。目前聚类的方法很多,根据基本思想的不同,大致可以将聚类算法分为五大类:层次聚类算...

3179
来自专栏FD的专栏

贝叶斯分类器

贝叶斯决策论是一种基于概率的决策理论。当所有相关的概率都已知的理想情况下,贝叶斯决策论考虑如何基于这些概率和误判损失来选择最优的类别标记。

862
来自专栏PaddlePaddle

卷积神经网络的基本结构

深度学习基础理论-CNN篇 卷积神经网络的基本结构 ? 总体来说,卷积神经网络是一种层次模型(hierarchical model),其输入是原始数据(ra...

36913
来自专栏人工智能

机器学习算法Python实现

目录 一、线性回归 1、代价函数 2、梯度下降算法 3、均值归一化 4、最终运行结果 5、使用scikit-learn库中的线性模型实现 二、逻辑回归 1、代价...

2887

扫码关注云+社区