详解最小二乘法:数学推理+举例说明

目录

一、最小二乘法原理

二、举例说明

一、最小二乘法原理

想象一下,你在散点图上画了一些数据点,想找一条直线(或曲线)来大致描述这些点的趋势。最小二乘法的目标就是找到这样一条线,使得所有数据点到这条线的“误差平方和”最小。

为什么是“平方和”呢?

  1. 避免正负抵消:数据点可能分布在线的上下方,距离有正有负。如果直接相加,正负可能会抵消,无法真实反映总的误差。

  2. 放大误差:平方操作会使较大的误差变得更大。这使得最小二乘法会极力避免出现非常大的误差,从而找到一条“整体上最接近”所有点的线,对异常值比较敏感。

  3. 数学上好处理:平方函数是可微的,这使得我们可以用求导来找到最小值点。

本文以最小二乘法拟合三次多项式曲线为例来进行数学推导和验证。情景如下:

假设在二维坐标系中有十个坐标点(x_1,y_1),(x_2,y_2),...,(x_{10},y_{10}),我们需要找到一条三次多项式曲线:f(x)=a_0 + a_1*x + a_2*x^2 + a_3*x^3,满足所有点与该曲线的误差平方和\sum (y_i-f(x_i))^2最小,应该怎么实现呢?

二、举例说明

给定十个二维坐标点 (x_i,y_i),其中 i\in [1,10],需要拟合曲线:

f(x)=a_0+a_1*x+a_2*x^2+a3*x^3

最小二乘法的目标是找到参数 a_0,a_1,a_2,a_3,使得误差平方和 S 最小:

S=\sum_{i=0}^{10} (y_i-(a_0+a_1*x_i+a_2*x_i^2+a_3*x_i^3))^2

可以看出S是一个关于参数a_0,a_1,a_2,a_3的二次函数,且二次项系数为正(平方项总是非负),因此 S 是一个凸函数(convex function)。凸函数的一个重要性质是:任何驻点都是全局最小值点。也就是说,如果偏导数为零,那么该点一定使 S 达到最小。因此,通过设置偏导数为零,我们可以找到全局最小值。

为了找到驻点,我们对 S分别关于a_0,a_1,a_2,a_3求偏导数,并令其为零:

\frac{\partial S}{\partial a_0}=0,\frac{\partial S}{\partial a_1}=0,\frac{\partial S}{\partial a_2}=0,\frac{\partial S}{\partial a_3}=0

关于a_0求偏导可得:

\frac{\partial S}{\partial a_0}=2*[a_0*10+a_1*\sum_{i=0}^{10}(x_i)+a_2*\sum_{i=0}^{10}(x_i^2)+a_3*\sum_{i=0}^{10}(x_i^3)-\sum_{i=0}^{10}(y_i)]

关于a_1求偏导可得:

\frac{\partial S}{\partial a_1}=2*[a_0*\sum_{i=0}^{10}(x_i)+a_1*\sum_{i=0}^{10}(x_i^2)+a_2*\sum_{i=0}^{10}(x_i^3)+a_3*\sum_{i=0}^{10}(x_i^4)-\sum_{i=0}^{10}(y_i*x_i)]

关于a_2求偏导可得:

\frac{\partial S}{\partial a_2}=2*[a_0*\sum_{i=0}^{10}(x_i^2)+a_1*\sum_{i=0}^{10}(x_i^3)+a_2*\sum_{i=0}^{10}(x_i^4)+a_3*\sum_{i=0}^{10}(x_i^5)-\sum_{i=0}^{10}(y_i*x_i^2)]

关于a_3求偏导可得:

\frac{\partial S}{\partial a_3}=2*[a_0*\sum_{i=0}^{10}(x_i^3)+a_1*\sum_{i=0}^{10}(x_i^4)+a_2*\sum_{i=0}^{10}(x_i^5)+a_3*\sum_{i=0}^{10}(x_i^6)-\sum_{i=0}^{10}(y_i*x_i^3)]

综上可得线性方程组如下:

\left\{\begin{matrix} a_0*10&a_1*\sum_{i=0}^{10}(x_i) &a_2*\sum_{i=0}^{10}(x_i^2) &a_3*\sum_{i=0}^{10}(x_i^3) &\sum_{i=0}^{10}(y_i) \\ a_0*\sum_{i=0}^{10}(x_i)&a_1*\sum_{i=0}^{10}(x_i^2) &a_2*\sum_{i=0}^{10}(x_i^3) &a_3*\sum_{i=0}^{10}(x_i^4) &\sum_{i=0}^{10}(y_i*x_i) \\ a_0*\sum_{i=0}^{10}(x_i^2)&a_1*\sum_{i=0}^{10}(x_i^3) &a_2*\sum_{i=0}^{10}(x_i^4) &a_3*\sum_{i=0}^{10}(x_i^5) &\sum_{i=0}^{10}(y_i*x_i^2) \\ a_0*\sum_{i=0}^{10}(x_i^3)&a_1*\sum_{i=0}^{10}(x_i^4) &a_2*\sum_{i=0}^{10}(x_i^5) &a_3*\sum_{i=0}^{10}(x_i^6) &\sum_{i=0}^{10}(y_i*x_i^3) \end{matrix}\right.

那么问题就变成了求该线性方程组的解。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

10710

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值