
上QQ阅读APP看书,第一时间看更新
3.2.1 最小二乘法(LS算法)详解
LS算法是一种数学优化技术,也是一种机器学习常用算法。它通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和最小。最小二乘法还可用于曲线拟合。其他一些优化问题也可通过最小化能量或最大化熵用最小二乘法来表达。
最小二乘法不是本章的重点内容,笔者只通过一个图示(见图3.5)演示一下LS算法的原理。

图3.5 最小二乘法原理
从图3.5可以看到,若干个点依次分布在向量空间中,如果希望找出一条直线和这些点达到最佳匹配,那么最简单的一个方法就是希望这些点到直线的值最小,即最小二乘法实现公式最小。

这里直接引用的是真实值与计算值之间的差的平方和,具体而言,这种差值有一个专门的名称,即“残差”。基于此,表达残差的方式有以下3种:
- ∞-范数:残差绝对值的最大值
,即所有数据点中残差距离的最大值。
- L1-范数:绝对残差和
,即所有数据点残差距离之和。
- L2-范数:残差平方和
。
可以看到,所谓的最小二乘法也就是L2-范数的一个具体应用。通俗地说,就是看模型计算出的结果与真实值之间的相似性。
因此,最小二乘法的定义可有如下定义:
对于给定的数据,在取定的假设空间H中,求解f(x)∈H,使得残差的L2-范数最小。
实际上函数f(x)是一条多项式函数曲线:

所谓的最小二乘法就是找到这么一组权重w,使得最小。那么问题又来了,如何能使得最小二乘法值最小呢?
对于计算最小二乘法的最小化,可以通过数学上的微积分处理方法,这是一个求极值的问题,只需要对权值依次求偏导数,最后令偏导数为0即可求出极值点。

具体实现了最小二乘法的代码如下所示(简化起见,这里使用了一元一次方程组进行演示拟合)。
【程序3-1】

最终结果如图3.6所示。

图3.6 最小二乘法拟合曲线