拟合算法之最小二乘法

拟合算法之最小二乘法拟合算法与插值问题不同 在拟合问题中不需要曲线一定经过给定的点

大家好,欢迎来到IT知识分享网。

拟合算法

与插值问题不同,在拟合问题中不需要曲线一定经过给定的点。拟合问题的目标是追求一个函数(曲线),使得该曲线在某种准测下与所有的数据点最为接近,即曲线拟合最好(最小化损失函数)。
在这里插入图片描述

最小二乘法

设这些样本点为(xi,yi),i=1,2,3,…,n
我们设置拟合的曲线为y=kx+b,求当k和b为何值时,样本点和拟合曲线最接近。
第一种定义: y ^ i = k x i + b \widehat{y}_i=kx_i+b y
i
=
kxi+b

k ^ , b ^ = a r g k , b m i n ( ∑ i = 1 n ∣ y i − y ^ i ∣ ) \widehat{k},\widehat{b}=arg_{k,b}min(\sum_{i=1}^n{|y_i-\widehat{y}_i|}) k
,b
=
argk,bmin(i=1nyiy
i
)

第二种定义: y ^ i = k x i + b \widehat{y}_i=kx_i+b y
i
=
kxi+b

k ^ , b ^ = a r g k , b m i n ( ∑ i = 1 n ( y i − y ^ i ) 2 ) \widehat{k},\widehat{b}=arg_{k,b}min(\sum_{i=1}^n{(y_i-\widehat{y}_i)^2}) k
,b
=
argk,bmin(i=1n(yiy
i
)2
)

第一种定义有绝对值,不容易求导,因此计算比较复杂。所以我们往往使用第二种定义,这也是最小二乘的思想。

为什么不用四次方?
① 避免极端数据对拟合曲线的影响。
② 最小二乘法得到的结果和MLE极大似然估计一致。
③ 奇数次方误差会正负相抵。

设这些样本点为 ( x i , y i ) , i = 1 , 2 , 3… , n (x_i,y_i),i=1,2,3…,n (xi,yi),i=1,2,3...,n
我们设置拟合的曲线为 y = k x + b y=kx+b y=kx+b。令拟合值为: y ^ i = k x i + b \widehat{y}_i=kx_i+b y
i
=
kxi+b

那么我们就可以得到:
k ^ , b ^ = a r g k , b m i n ( ∑ i = 1 n ( y i − y ^ i ) 2 ) = a r g k , b m i n ( ∑ i = 1 n ( y i − k x i − b ) 2 ) \widehat{k},\widehat{b}=arg_{k,b}min(\sum_{i=1}^n{(y_i-\widehat{y}_i)^2})=arg_{k,b}min(\sum_{i=1}^n{(y_i-kx_i-b)^2}) k
,b
=
argk,bmin(i=1n(yiy
i
)2
)=
argk,bmin(i=1n(yikxib)2)

L = ∑ ( y i − k x i − b ) 2 L=\sum{(y_i-kx_i-b)^2} L=(yikxib)2,要实现找到 k , b k,b k,b使得 L L L最小。( L L L在机器学习中被称为损失函数,在回归中也常被称为残差平方和)
接下来使 L L L k k k b b b进行求导

{ ∂ L ∂ k = − 2 ∑ i = 1 n x i ( y i − k x i − b ) = 0 ∂ L ∂ k = − 2 ∑ i = 1 n x i ( y i − k x i − b ) = 0 \left\{ \begin{aligned} \frac{\partial L}{\partial k }=-2\sum_{i=1}^nx_i(y_i-kx_i-b)=0 \\ \frac{\partial L}{\partial k }=-2\sum_{i=1}^nx_i(y_i-kx_i-b)=0 \\ \end{aligned} \right. kL=2i=1nxi(yikxib)=0kL=2i=1nxi(yikxib)=0
得到:
k ^ = n ∑ i = 1 n x i y i − ∑ i = 1 n y i ∑ i = 1 n x i n ∑ i = 1 n x i 2 − ∑ i = 1 n x i ∑ i = 1 n x i \widehat{k}=\frac{n\sum\limits_{i=1}^nx_iy_i-\sum\limits_{i=1}^ny_i\sum\limits_{i=1}^nx_i}{n\sum\limits_{i=1}^nx_i^2-\sum\limits_{i=1}^nx_i\sum\limits_{i=1}^nx_i} k
=
ni=1nxi2i=1nxii=1nxini=1nxiyii=1nyii=1nxi

b ^ = ∑ i = 1 n x i 2 ∑ i = 1 n y i − ∑ i = 1 n x i ∑ i = 1 n x i y i n ∑ i = 1 n x i 2 − ∑ i = 1 n x i ∑ i = 1 n x i \widehat{b}=\frac{\sum\limits_{i=1}^nx_i^2\sum\limits_{i=1}^ny_i-\sum\limits_{i=1}^nx_i\sum\limits_{i=1}^nx_iy_i}{n\sum\limits_{i=1}^nx_i^2-\sum\limits_{i=1}^nx_i\sum\limits_{i=1}^nx_i} b
=
ni=1nxi2i=1nxii=1nxii=1nxi2i=1nyii=1nxii=1nxiyi

这里我们给出一组数据,使用matlab,来用最小二乘法拟合一下
在这里插入图片描述

clear;clc load data1 plot(x,y,'o') % 给x和y轴加上标签 xlabel('x的值') ylabel('y的值') 

得到散点图:在这里插入图片描述
接下来利用公式得到k和b的值,并利用匿名函数画出拟合后的函数图像:

clear;clc load data1 %事先将x和y保存到data1中,也可以直接输入 plot(x,y,'o') % 给x和y轴加上标签 xlabel('x的值') ylabel('y的值') n = size(x,1); k = (n*sum(x.*y)-sum(x)*sum(y))/(n*sum(x.*x)-sum(x)*sum(x)) b = (sum(x.*x)*sum(y)-sum(x)*sum(x.*y))/(n*sum(x.*x)-sum(x)*sum(x)) hold on % 继续在之前的图形上来画图形 grid on % 显示网格线 % 匿名函数的基本用法。 % handle = @(arglist) anonymous_function % 其中handle为调用匿名函数时使用的名字。 % arglist为匿名函数的输入参数,可以是一个,也可以是多个,用逗号分隔。 % anonymous_function为匿名函数的表达式。 f=@(x) k*x+b; fplot(f,[2.5,7]); legend('样本数据','拟合函数','location','SouthEast') 

就可以得到我们最小二乘法拟合的图像了:在这里插入图片描述

拟合好坏的评价:拟合优度

如何来评价拟合的程度,我们使用拟合优度(可决系数) R 2 R^2 R2。首先我们引入几个定义:
总 体 平 方 和 S S T : S S T = ∑ i = 1 n ( y i − y ˉ ) 2 总体平方和SST:SST=\sum\limits_{i=1}^n(y_i-\bar{y})^2 SST:SST=i=1n(yiyˉ)2
误 差 平 方 和 S S E : S S E = ∑ i = 1 n ( y i − y ^ i ) 2 误差平方和SSE:SSE=\sum\limits_{i=1}^n(y_i-\widehat{y}_i)^2 SSE:SSE=i=1n(yiy
i
)2

回 归 平 方 和 S S R : S S R = ∑ i = 1 n ( y ^ i − y ˉ ) 2 回归平方和SSR:SSR=\sum\limits_{i=1}^n(\widehat{y}_i-\bar{y})^2 SSR:SSR=i=1n(y
i
yˉ)2

可以证明: S S T = S S E + S S T SST=SSE+SST SST=SSE+SST(用到我们求导得到的两个等式)
拟 合 优 度 : 0 ≤ R 2 = S S R S S T = S S T − S S E S S T = 1 − S S E S S T ≤ 1 拟合优度:0\leq R^2=\frac{SSR}{SST}=\frac{SST-SSE}{SST}=1-\frac{SSE}{SST}\leq 1 0R2=SSTSSR=SSTSSTSSE=1SSTSSE1
R 2 R^2 R2越接近1,说明误差平方和越接近0,误差越小说明拟合的越好。
(注: R 2 R^2 R2只能用于拟合参数线性函数,拟合结果的评价)
线性函数和其他函数(例如指数函数)比较拟合的好坏,直接看 S S E SSE SSE即可(越小越好),未来还可能遇到 R 2 R^2 R2是负数的情况。
使用matlab计算 R 2 R^2 R2:

y_hat = k*x+b; % y的拟合值 SSR = sum((y_hat-mean(y)).^2) % 回归平方和 SSE = sum((y_hat-y).^2) % 误差平方和 SST = sum((y-mean(y)).^2) % 总体平方和 SST-SSE-SSR % 5.6843e-14 = 5.6843*10^-14 matlab浮点数计算的一个误差,可以忽略不计,说明SST=SSE+SSR R_2 = SSR / SST 

:mean是平均值
最小二乘法的拟合到这里就结束啦,喜欢的小伙伴可以点个关注,下一讲:使用matlab进行图像拟合。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/141859.html

(0)
上一篇 2025-05-14 15:20
下一篇 2025-05-14 15:26

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信