拟合算法之最小二乘法

这篇具有很好参考价值的文章主要介绍了拟合算法之最小二乘法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

拟合算法

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

插值算法中,得到的多项式f(x)要经过所有的样本点。但是如果样本点太多,那么这个多项式的次数过高,会造成龙格现象。
尽管我们可以选择分段的方法避免这种现象,但是更多时候我们更要倾向于得到一个确定的曲线,尽管这条曲线不能经过每一个样本点,但只要保证误差足够小即可,这就是拟合的思想。(拟合的结果是得到一个确定的曲线)

最小二乘法

设这些样本点为(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 iyˉ)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://www.toymoban.com/news/detail-444530.html

到了这里,关于拟合算法之最小二乘法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Matlab】最小二乘法拟合多项式

    在最近的电机项目中,有遇到有传感器数据并不线性的问题,然后想要用最小二乘法做个曲线拟合,反过来去校准不线性的传感器的数据,因此记录一下使用最小二乘法来拟合多项式的曲线的步骤。本篇从最小二乘法的原始公式入手编写M文件,目的是方便使用单片机实现,或

    2023年04月22日
    浏览(46)
  • 最小二乘法的几种拟合函数

    目录 1.最小二乘法的原理和解决的问题 2.最小二乘法的公式解法 2.1  拟合h(x) = a * x 2.2 拟合 h(x) = a0 + a1*x 2.3拟合 h(x) = a0 + a1 *x + a3 * x^3  因为采用矩阵法来进行最小二乘法的函数拟合时,会出现系数矩阵的逆矩阵不存在的情况有一定的局限性,所以本篇对公式法进行简单说明

    2024年02月13日
    浏览(42)
  • C语言编程:最小二乘法拟合直线

    本文研究通过C语言实现最小二乘法拟合直线。 最小二乘法,简单来说就是根据一组观测得到的数值,寻找一个函数,使得函数与观测点的误差的平方和达到最小。在工程实践中,这个函数通常是比较简单的,例如一次函数或二次函数。 汽车上的毫米波雷达可以探测到其他目

    2024年02月12日
    浏览(39)
  • 数值计算大作业:最小二乘法拟合(Matlab实现)

        作为研究生的入门课,数值计算的大作业算是所有研究生开学的重要编程作业。      我把最小二乘算法在MATLAB中整合成了一个M函数文件least square fitting.m,直线拟合函数lsf_linear.m,以及抛物线拟合函数lsf_parabolic.m。程序放在文章最后了,需要的同学自取。下文为作业详

    2024年02月07日
    浏览(41)
  • chatgpt赋能python:Python如何拟合直线:使用最小二乘法

    在数据分析和机器学习领域,拟合一个最佳的直线是很常见和有用的。Python中有很多库可以拟合直线,但最小二乘法是其中最常用的一种方法。在本文中,我们将介绍最小二乘法的原理和如何在Python中实现。 最小二乘法是一种常用的回归分析方法,目的是找到一条直线来拟合

    2024年02月08日
    浏览(60)
  • 3D点云处理:用SVD分解法和最小二乘法拟合平面点云,求解平面方程

    本文主要介如何用SVD分解法和最小二乘法拟合平面点云,包含原理推导和代码 将空间中的离散点拟合为一个平面,就是使离散点到某个平面距离和最小的问题,可以将求解过程看作最优化的过程。 一个先验知识为拟合平面一定经过离散点的质心(离散点坐标的平均值)。平

    2024年02月03日
    浏览(177)
  • 基于MATLAB的三维数据插值拟合与三次样条拟合算法(附完整代码)

    目录 一. 三维插值 例题1 二. 高维度插值拟合 格式一 格式二 格式三 格式四 格式五 例题2 三. 单变量三次样条插值 例题3 例题4 四. 多变量三次样条插值 例题6 首先三维网格生成是利用 meshgrid() 函数,在MATLAB中调用格式如下: 三维插值运算,主要利用griddata()函数与interp()函数

    2024年02月14日
    浏览(43)
  • 矩阵最小二乘法问题求解

    超定方程组是指方程个数大于未知量个数的方程组。对于方程组 A x = b Ax=b A x = b , A A A 为n×m矩阵,如果R列满秩,且nm。则方程组没有精确解,此时称方程组为超定方程组。 在实验数据处理和曲线拟合问题中,求解超定方程组非常普遍。比较常用的方法是 最小二乘法 。 如果

    2024年02月05日
    浏览(39)
  • 切比雪夫(最小区域法)平面拟合算法

    欢迎关注更多精彩 关注我,学习常用算法与数据结构,一题多解,降维打击。 本期话题:切比雪夫(最小区域法)平面拟合算法 相关背景和理论 点击前往 主要介绍了应用背景和如何转化成线性规划问题 10到631个点,全部采样自平面附近。 每个点3个坐标,坐标精确到小数点

    2024年03月28日
    浏览(88)
  • Python实现递归最小二乘法回归模型(RecursiveLS算法)项目实战

    说明:这是一个机器学习实战项目(附带 数据+代码+文档+视频讲解 ),如需 数据+代码+文档+视频讲解 可以直接到文章最后获取。 RLS主要是在误差平方和最小的原则基础上, 提出一种解析的拟合模型参数的迭代递推公式;可以实现在新的样本数据到来时, 利用新的样本数据以及

    2024年01月16日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包