随笔 - 934, 文章 - 0, 评论 - 249, 阅读 - 345万

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

最小二乘直线拟合

Posted on   蝈蝈俊  阅读(5947)  评论(0编辑  收藏  举报

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

推导过程

问题

以直线拟合为例,已知有一组平面上的点集:x1,y1,(x2,y2),...(xn,yn)
基于这些点拟合一条直线,设直线方程为: y=ax+b
那么算法的输入就是这些点集,需要求取的为直线方程的参数a,b

这些点距离直线的平方偏差之和为

Sϵ2=i=1n(yiy)2=i=1n(yi(axi+b))2

以上公式已知的是xi,yi, 未知且要求取的是ab

不同的ab会得到不同的Sϵ2,求取的是在Sϵ2最小的时候求取ab

多元函数的极值与最值问题

这是一个二元a,b函数,此问题实际上就是多元函数的极值与最值问题,要求解函数极值时二元变量数值,这里要用到二元函数取极值的必要条件,即下面这个定理。

那么对 Sϵ2 求偏导且使得偏导为0,此时 Sϵ2 取得极值点最小值:

下面公式已知的是xi,yi, 未知且要求取的是ab

aSϵ2=ai=1n(yi(axi+b))2=0bSϵ2=bi=1n(yi(axi+b))2=0

求偏导过程

这里主要用到下面几个求导规则

加减规则

函数 f(x)±g(x) 的导数 f(x)±g(x) 所以 可以直接拆解。

bi=1n(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=yibaxibbb=001=1

如果是求 a的偏导数,b认为是常数;

(yi(axi+b))a=yiaaxiaba=0xi0=xi

基于上面的推理,我们可以得出

aSϵ2=i=1n(yi(axi+b))(xi)=0bSϵ2=i=1n(yi(axi+b))(1)=0

a,b 的值

继续往下推,我们可以得到

(i=1nxi2)a+(i=1nxi)b=i=1nxiyi(i=1nxi)a+nb=i=1nyi

参考: 最小二乘直线拟合

从上面,我们可以推理出 a,b的值

a=n(xiyi)(xi)(yi)n(xi2)(xi)2b=(xi2)(yi)(xi)(xiyi)n(xi2)(xi)2

参考:最小二乘法拟合直线

这样实际计算时,我们只需要计算出

t1=xit2=yit3=xiyit4=xi2a=nt3t1t2nt4t12b=t4t2t1t3nt4t12

相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
历史上的今天:
2016-04-14 Maven项目中,编译proto文件成Java类
2010-04-14 ANT 的安装和配置
2010-04-14 Java环境的搭建
点击右上角即可分享
微信分享提示