引言

最小二乘法是经典的参数稳健估计方法。核心思想是使得估计出的模型与实际数据之间误差的平方和最小(趋于0)。直线参数的估计又是最常用的曲线参数估计,稳健估计方法有很多:RANSAC、BaySAC、极大似然法等,这篇博文主要讲解如何使用最小二乘法估计直线参数。


一群离散观测点,及其最小二乘估计直线方程

直线方程最优拟合

直线方程的形式比较多,粗略统计有10种之多,如:一般式、点斜式、截距式、斜截式 ⋯ \cdots。本博文采用直线斜截式,最小二乘拟合其方程系数。
斜截式: y=kx+b y = kx+b,适用于不垂直于 x x轴的直线。

  1. 斜率为kk

    • y y轴截距为bb
    • 根据最小二乘原理,误差平方和最小,得误差函数: f=∑ni=1(yi−k∗xi−b))2=0 f=\sum_{i=1}^{n}(y_i-k*x_i-b))^2=0。高数中极值定理可知,误差方程一阶导数等于0处取得极值,因此分别对其关于 k k和bb求导,解 k,b k,b值使得误差函数取最小值。但是直线斜截式无法表示垂直 x x轴的直线,如:x=3x=3。

      ⎧⎩⎨⎪⎪∂f∂k=∑ni=1[(yi−kxi−b)xi]=0∂f∂b=∑ni=1(yi−kxi−b)=0

      \begin{cases} \frac{\partial f}{\partial k}=\sum_{i=1}^n[(y_i-kx_i-b)x_i]=0\\ \frac{\partial f}{\partial b}=\sum_{i=1}^n(y_i-kx_i-b)=0 \end{cases}

      {∑ni=1(xiyi)−k∑ni=1(x2i)−b∑ni=1(xi)=0∑ni=1(yi)−k∑ni=1(xi)−nb=0

      \begin{cases} \sum_{i=1}^n(x_iy_i)-k\sum_{i=1}^n(x_i^2)-b\sum_{i=1}^n(x_i)=0\\ \sum_{i=1}^n(y_i)-k\sum_{i=1}^n(x_i)-nb=0 \end{cases}

      令, A=∑ni=1(x2i) A=\sum_{i=1}^n(x_i^2), B=∑ni=1(xi) B=\sum_{i=1}^n(x_i), C=∑ni=1(xiyi) C=\sum_{i=1}^n(x_iy_i), A=∑ni=1(yi) A=\sum_{i=1}^n(y_i),得

      {Ak+bB=CBk+nb=D

      \begin{cases} Ak+bB=C\\ Bk+nb=D \end{cases}

      {k=Cn−BDAn−BBb=AD−CBAn−BB

      \begin{cases} k=\frac{Cn-BD}{An-BB}\\ b=\frac{AD-CB}{An-BB} \end{cases}

      上面过程繁琐,只适用于直线的最小二乘解。下面将直线斜截式拓展导任意曲线,任意曲线方程 p(x)=p1xn+p2xn−1+⋯+pnx+pn+1 p(x)=p_1x^n+p_2x^{n-1}+\cdots+p_nx+p_{n+1}。可以看到直线斜截式即, n=1 n=1时的曲线方程。将曲线方程,写成矩阵乘积的形式:

      ⎛⎝⎜⎜⎜⎜x1x2⋮xn11⋮1⎞⎠⎟⎟⎟⎟⎛⎝⎜⎜⎜⎜p1p2⋮pn⎞⎠⎟⎟⎟⎟=⎛⎝⎜⎜⎜⎜y1y2⋮yn⎞⎠⎟⎟⎟⎟

      \left( \begin{array}{ccc} x_1 &1 \\ x_2 & 1\\ \vdots & \vdots\\ x_n & 1\\ \end{array} \right) \left( \begin{array}{ccc} p_1\\ p_2\\ \vdots\\ p_n\\ \end{array} \right)= \left( \begin{array}{ccc} y_1\\ y_2\\ \vdots\\ y_n\\ \end{array} \right)
      上面乘积形式,即 AX=B AX=B, X=(ATA)−1ATB X=(A^TA)^{-1}A^TB,解出的 X X就是最小二乘解。

      总结

      斜截式虽然并不能表示竖直直线,但是实际应用中也基本不太可能遇到完全竖直直线,竖直的直线也可以用尽量大的系数aa表示。上面列出了两种直线系数低最小二乘计算方法,具体使用哪一种可以根据使用环境确定。若模型单一,只有二维直线时候,建议使用第一种具有计算速度快的优点。

      参考

      [1]http://cn.mathworks.com/help/matlab/ref/polyfit.html?searchHighlight=polyfit&s_tid=doc_srchtitle
      [2]https://www.varsitytutors.com/hotmath/hotmath_help/topics/line-of-best-fit

最小二乘法求解直线方程系数相关推荐

  1. 最小二乘法求解傅里叶级数系数

    最小二乘法求解傅里叶级数系数 自己推导的,如有错误,请大家批评指出,谢谢! 题目 Solution 要求解x^\hat{x}x^, 相当于找到一个合适的x^\hat{x}x^使得估计的测量误差Hx^− ...

  2. 基于jupyter notebook的python编程-----利用梯度下降算法求解多元线性回归方程,并与最小二乘法求解进行精度对比

    基于jupyter notebook的python编程-----利用梯度下降算法求解多元线性回归方程,并与最小二乘法求解进行精度对比目录 一.梯度下降算法的基本原理 1.梯度下降算法的基本原理 二.题 ...

  3. 利用最小二乘法求解仿射变换参数

    仿射变换的定义 仿射变换(Affine Transformation或 Affine Map),是指在几何中,一个向量空间进行一次线性变换并接上一个平移,变换为另一个向量空间. 仿射变换可以由以下基本 ...

  4. 2021-04-24 Python 最小二乘法求解线性回归模型

    Python 最小二乘法求解线性回归模型 机器学习线性回归模型 线性回归(linear regression)是一种线性模型,它假设输入变量 x 和单个输出变量 y 之间存在线性关系 具体来说,利用线 ...

  5. 正交最小二乘法求解NARMAX

    1 简介 本文主要根据1988年<Orthogonal least squares methods and their application to non-linear system iden ...

  6. 最小二乘法求解一元线性回归

    最小二乘法求解一元线性回归 介绍线性回归模型以及简单一元线性回归模型的解法. 通过代码实现最小二乘法求解一元线性回归实例,并对结果进行预测. 一.线性回归 二.回归问题的解决 三.最小二乘法介绍 四. ...

  7. 最小二乘法求解线性回归模型

    最小二乘法求解线性回归模型 题目描述 计算公式 测试用主函数及其它 输入 输出 样例输入 样例输出 杂谈 代码 时间限制: 1 Sec 内存限制: 128 MB 题目描述 假设有一组观测数据(X,Y) ...

  8. python 进行一元线性回归并输出相关结果_荐一元线性回归利用最小二乘法求解原理代码及案例...

    1.线性回归的原理 基础定义 线性回归是利用数理统计中的回归分析,来确定两种或两种以上属性间相互依赖的定量关系的一种统计分析方法.举个例子,一套房子的具有面积.卧室数量.卫生间数量等三个属性,该房子的 ...

  9. 一元线性回归利用最小二乘法求解原理代码及案例

    目录 1.线性回归的原理 基础定义 公式推导 简单理解 2.最小二乘法PYTHON实现 0. 导入相关库 1. 导入数据 2. 定义损失函数 3. 定义算法拟合函数 4. 测试定义的函数 5. 画出拟 ...

最新文章

  1. Hibernate.Annotation注解
  2. 【初码干货】关于.NET玩爬虫这些事
  3. 【Numpy 学习记录】np.stack 和 np.concatenate
  4. 开发RESTful WebService
  5. the value of esp was not properly saved across a function call异常
  6. mysql 一行转多多行_JS 小工具 MYSQL WHERE IN条件 去掉换行符(列转行)
  7. atitit.商业版 源码保护 与 java本地原生代码转换 的方案总结
  8. MATLAB的最速下降法实现
  9. SVG_37_六一儿童节快乐-路径移动-火焰文字
  10. 技术分享 | show engine innodb status中Pages flushed up to 的含义
  11. Android SDK是什么意思?
  12. 电子科技大学格拉斯哥学院基础实践——共享单车的调查
  13. 旺店通·企业奇门和用友BIP接口打通对接实战
  14. native、方法区
  15. ffmpeg API FR NET
  16. office web apps安装部署 Win 2008 安装
  17. Android开发在路上:少去踩坑,多走捷径(上)
  18. 怎么查看html页面,网页浏览记录如何查看_怎样查历史网页浏览记录-win7之家
  19. 无法连接服务器——CMNET与CMWAP的区别
  20. 微信公共号消息推送给你心爱的她/他-Python3版本

热门文章

  1. 初级练手的小项目列表
  2. HELO TC Assault遥控直升机动手玩
  3. linux下awk命令详解,Linux文件处理awk命令-linux awk命令详解-嗨客网
  4. [Xcode]iOS代码签名(Code Signing)
  5. 2163: 舔狗的困难
  6. 清风水波说的一句话.
  7. 10分钟了解人工智能(最通俗的语言)
  8. 读书笔记-Icepak网格划分控制面板
  9. 中国移动宽带安装的光猫路由器,背面四个网口,只有一个网口能上网,怎样绕开此限制,并保证IPv6正常使用?
  10. JavaScript中Object.getOwnPropertyNames()与Object.keys(obj)的区别