最小二乘法(英文:least square method)是一种常用的数学优化方法,所谓二乘就是平方的意思。这平方一词指的是在拟合一个函数的时候,通过最小化误差的平方来确定最佳的匹配函数,所以最小二乘、最小平方指的就是拟合的误差平方达到最小。

推导过程
问题
以直线拟合为例,已知有一组平面上的点集:(x1,y1),(x2,y2),...(xn,yn) 。
基于这些点拟合一条直线,设直线方程为: y=ax+b
那么算法的输入就是这些点集,需要求取的为直线方程的参数a,b。
这些点距离直线的平方偏差之和为
S2ϵ=n∑i=1(yi−y)2=n∑i=1(yi−(axi+b))2
以上公式已知的是xi,yi, 未知且要求取的是a、b。
不同的a、b会得到不同的S2ϵ,求取的是在S2ϵ最小的时候求取a、b。
多元函数的极值与最值问题
这是一个二元a,b函数,此问题实际上就是多元函数的极值与最值问题,要求解函数极值时二元变量数值,这里要用到二元函数取极值的必要条件,即下面这个定理。

那么对 S2ϵ 求偏导且使得偏导为0,此时 S2ϵ 取得极值点最小值:
下面公式已知的是xi,yi, 未知且要求取的是a、b。
∂∂aS2ϵ=∂∂an∑i=1(yi−(axi+b))2=0∂∂bS2ϵ=∂∂bn∑i=1(yi−(axi+b))2=0
求偏导过程
这里主要用到下面几个求导规则
加减规则
函数 f(x)±g(x) 的导数 f′(x)±g′(x) 所以 ∑ 可以直接拆解。
∂∂bn∑i=1(yi−(axi+b))2=∂∂b[(y0−(ax0+b))2]+∂∂b[(y1−(ax1+b))2]+...+∂∂b[(yn−(axn+b))2]
后面我们只需要看相加的每一项
乘法规则
函数 f(x)∗g(x) 的导数等于 f′(x)∗g(x)+f(x)∗g′(x)
所以
∂∂b[(yi−(axi+b))2]=∂[yi−(axi+b)]∂b∗(yi−(axi+b))+(yi−(axi+b))∗∂(yi−(axi+b))∂b=2(yi−(axi+b))∗∂(yi−(axi+b))∂b
常量导数是0,一元函数导数是斜率
下面公式 xi,yi 是常数;
由于是求b的偏导数,a也认为是常数;
∂(yi−(axi+b))∂b=∂yi∂b−∂axi∂b−∂b∂b=0−0−1=−1
如果是求 a的偏导数,b认为是常数;
∂(yi−(axi+b))∂a=∂yi∂a−∂axi∂a−∂b∂a=0−xi−0=−xi
基于上面的推理,我们可以得出
∂∂aS2ϵ=n∑i=1(yi−(axi+b))∗(−xi)=0∂∂bS2ϵ=n∑i=1(yi−(axi+b))∗(−1)=0
求 a,b 的值
继续往下推,我们可以得到
(n∑i=1x2i)∗a+(n∑i=1xi)∗b=n∑i=1xi∗yi(n∑i=1xi)∗a+n∗b=n∑i=1yi
参考: 最小二乘直线拟合
从上面,我们可以推理出 a,b的值
a=n∗(∑xiyi)−(∑xi)∗(∑yi)n∗(∑x2i)−(∑xi)2b=(∑x2i)∗(∑yi)−(∑xi)∗(∑xiyi)n∗(∑x2i)−(∑xi)2
参考:最小二乘法拟合直线
这样实际计算时,我们只需要计算出
t1=∑xit2=∑yit3=∑xiyit4=∑x2ia=n∗t3−t1∗t2n∗t4−t12b=t4∗t2−t1∗t3n∗t4−t12
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
2016-04-14 Maven项目中,编译proto文件成Java类
2010-04-14 ANT 的安装和配置
2010-04-14 Java环境的搭建