多项式曲线拟合之最小二乘法推导[通俗易懂]

多项式曲线拟合之最小二乘法推导[通俗易懂]1、多项式曲线拟合之最小二乘法1.1问题来源1801年,意大利天文学家朱赛普·皮亚齐发现了第一颗小行星谷神星。经过40天的跟踪观测后,由于谷神星运行至太阳背后,使得皮亚齐失去了谷神星的位置。随后全世界的科学家利用皮亚齐的已有观测数据开始寻找谷神星,但是根据大多数人计算的结果来寻找谷神星都没有结果。只有时年24岁的高斯所计算的谷神星的轨道,被奥地利天文学家海因里希·奥尔伯斯的观测所证实,使天文界从此可以预测到谷神星的精确位置。同样的方法也产生了哈雷彗星等很多天文学成果。高斯使用的方法就是最小二乘法,

大家好,又见面了,我是你们的朋友全栈君。

1、多项式曲线拟合之最小二乘法

1.1 问题来源

1801年,意大利天文学家朱赛普·皮亚齐发现了第一颗小行星谷神星。经过40天的跟踪观测后,由于谷神星运行至太阳背后,使得皮亚齐失去了谷神星的位置。随后全世界的科学家利用皮亚齐的已有观测数据开始寻找谷神星,但是根据大多数人计算的结果来寻找谷神星都没有结果。只有时年24岁的高斯所计算的谷神星的轨道,被奥地利天文学家海因里希·奥尔伯斯的观测所证实,使天文界从此可以预测到谷神星的精确位置。同样的方法也产生了哈雷彗星等很多天文学成果。高斯使用的方法就是最小二乘法,该方法发表于1809年他的著作《天体运动论》中。

1.2 数学本质

采用最小二乘法进行曲线拟合的本质是通过样本集构造范德蒙德矩阵,将一元n次多项式非线性回归问题转化为n元一次线性回归问题。

给定一组数据点p_i(x_i,y_i)$,其中i=1,2,...m 。求近似曲线 y=\varphi(x),使其与 y=f(x)的偏差最小。

常见的曲线拟合方法:

  • 使偏差绝对值之和最小

\mathop{min}_{\varphi}\sum_{i=1}^m{\left|\delta_i\right|} = \sum_{i=1}^m{\left|\varphi(x_i)-y_i\right|}

  • 使最大的偏差绝对值最小

\mathop{min}_{\varphi}\ \mathop{max}_{i}{\left|\delta_i\right|} = \left|\varphi(x_i)-y_i\right|

  • 使偏差平方和最小

\mathop{min}_{\varphi}\sum_{i=1}^m{\delta_i^2} = \sum_{i=1}^m(\varphi(x_i)-y_i)^2

其中按照偏差平方和最小的原则选取拟合曲线,并且采取二项式方程为拟合曲线的方法,称为最小二乘法。

1.3 问题定义

minimize \qquad \parallel{Ax-b}\parallel_2^2

1.4 问题特性

  • 已是一种成熟的工业技术
  • 已有可靠和高效的算法解决此类问题
  • 存在可解析解: x^* = ({\mathbf{A}^\mathrm{T}A)}^{-1}{\mathbf{A}^\mathrm{T}b}

1.5 数学推导

  • 设定拟合多项式为:y = a_0+a_1{x}+\dots+{a_k}{x^k}
  • 偏差平方和表示如下:

R^2 = \sum_{i=1}^n[y_i - (a_0+a_1{x_i}+\dots+{a_k}{x_i}^k)]^2

  • 对右侧等式求\alpha_i偏导数,以求的符合条件的\alpha值:

\alpha_0 求偏导:

-2\sum_{i=1}^n[y_i - (a_0+a_1{x_i}+\dots+{a_k}{x_i}^k)] = 0

\alpha_1求偏导:

-2\sum_{i=1}^n[y_i - (a_0+a_1{x_i}+\dots+{a_k}{x_i}^k)]{x_i} = 0

\alpha_2 求偏导:

-2\sum_{i=1}^n[y_i - (a_0+a_1{x_i}+\dots+{a_k}{x_i}^k)]{x_i}^2 = 0

\vdots

\alpha_k 求偏导:

-2\sum_{i=1}^n[y_i - (a_0+a_1{x_i}+\dots+{a_k}{x_i}^k)]{x_i}^k = 0

  • 等式化简

a_0{n}+a_1\sum_{i=1}^n{x_i}+\dots+a_k\sum_{i=1}^n{x_i}^k = \sum_{i=1}^n{y_i}

a_0\sum_{i=1}^n{x_i}+a_1\sum_{i=1}^n{x_i}^2+\dots+a_k\sum_{i=1}^n{x_i}^{k+1} = \sum_{i=1}^n{x_i}{y_i}

a_0\sum_{i=1}^n{x_i}^2+a_1\sum_{i=1}^n{x_i}^3+\dots+a_k\sum_{i=1}^n{x_i}^{k+2} = \sum_{i=1}^n{x_i}^2{y_i}

a_0\sum_{i=1}^n{x_i}^k+a_1\sum_{i=1}^n{x_i}^{k+1}+\dots+a_k\sum_{i=1}^n{x_i}^{k+k} = \sum_{i=1}^n{x_i}^k{y_i}

  • 矩阵表示

\left[ \begin{array}{cccc} n & \sum_{i=1}^n{x_i} & \cdots & \sum_{i=1}^n{x_i}^k\\ \sum_{i=1}^n{x_i} & \sum_{i=1}^n{x_i}^2 & \cdots & \sum_{i=1}^n{x_i}^{k+1}\\ \vdots & \vdots & \ddots & \vdots\\ \sum_{i=1}^n{x_i}^k & \sum_{i=1}^n{x_i}^{k+1} & \cdots & \sum_{i=1}^n{x_i}^{k+k}\\ \end{array} \right] \left[ \begin{array}{cccc} a_0\\ a_1\\ \vdots\\ a_k\\ \end{array} \right] = \left[ \begin{array}{cccc} \sum_{i=1}^n{y_i}\\ \sum_{i=1}^n{x_i}{y_i}\\ \vdots\\ \sum_{i=1}^n{x_i}^k{y_i}\\ \end{array} \right]

  • 矩阵简化

X= \left[ \begin{array}{cccc} 1 & x_1 & x_1^2 & \cdots x_1^k \\ 1 & x_2 & x_2^2 & \cdots x_2^k \\ \cdots & \cdots & \cdots & \cdots \\ 1 & x_n & x_n^2 & \cdots x_n^k \\ \end{array} \right] \qquad Y= \left[ \begin{array}{cccc} y_1 \\ y_2 \\ \cdots \\ y_n \\ \end{array} \right]

上述矩阵可简化为: \mathbf{X}^\mathrm{T}Xa=\mathbf{X}^\mathrm{T}Y

  • 结果

a=(\mathbf{X}^\mathrm{T}*X)^{-1}*\mathbf{X}^\mathrm{T}*Y

矩阵a中对应的项则是拟合曲线的各项系数。

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/145554.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 最长回文子串——马拉车算法详解

    最长回文子串——马拉车算法详解马拉车算法(Manacher‘sAlgorithm)是用来解决求取一个字符串的最长回文子串问题的。此算法充分利用了回文字符串的性质,将算法复杂度降到了线性,非常值得一学。我将网上所有讲解马拉车算法的文章基本看了一遍,总结出了最通俗易懂的介绍,同时用python进行了实现。题目给定一个字符串s,找到s中最长的回文子字符串。所谓回文字符串,指的是无论从左往右读还是从右往左读,…

    2022年6月12日
    54
  • i686和x86_64的区别

    i686和x86_64的区别i686的解释:i代表intel系列的cpu。386几乎适用于所有的x86平台,不论是旧的pentum或者是新的pentum-IV与K7系列的CPU等等,都可以正常的工作!那个i指的是Intel兼容的CPU的意思,至于386不用说,就是CPU的等级啦!i586就是586等级的计算机,那是哪些呢?包括pentum第一代MMXC…

    2022年6月7日
    142
  • module ‘tensorflow’ has no attribute ‘placeholder’

    module ‘tensorflow’ has no attribute ‘placeholder’tensorflow2.0提示错误:module’tensorflow’hasnoattribute’placeholder’解决办法:不要使用:importtensorflowastf替换为:importtensorflow.compat.v1astftf.disable_v2_behavior()tensorflow的新变化,后续查到具体的文档,再补…

    2022年7月13日
    101
  • mysql show status详解

    mysql show status详解

    2021年8月1日
    67
  • DIV ID用途_纸的用途

    DIV ID用途_纸的用途我是超级链接这个例子是一个很简单的超级链接。用到了DIV,实际上DIV就相当于一个肉眼看不到盒子,盒子里边可以放入很多的文字、图片、flash等等。而盒子里边内容的样式,就全部靠DIV的id所对应的

    2022年8月1日
    6
  • JavaScript进阶之道

    JavaScript进阶之道

    2021年7月5日
    93

发表回复

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

关注全栈程序员社区公众号