前面分析了 线性最小二乘 的解法

YcoFlegs:[数值计算] 数据拟合——线性最小二乘法​zhuanlan.zhihu.com

现在来看另一个问题:非线性最小二乘法

1. 定义

首先是如何定义这里这个“非线性”。为什么前面用多项式拟合就是线性了?

对于多项式拟合,每个数据样本,误差为:

,可以看到此处误差(希望绝对值缩小到0的那个函数)和
的关系是线性的,因此这个最小二乘问题被称为

线性最小二乘。虽然

与x的关系是非线性的,最终的优化函数为
也是非线性的。

那么 非线性最小二乘 就很容易理解了,误差函数r和参数b的关系是非线性的就行了。

2. 例子——发射器位置

在一片区域里

,存在10个接收器,分别位于
,和一个无线电发射器,位置
未知。这些接收器可以测量离发射器的距离,但存在误差。
Credit to http://iacs-courses.seas.harvard.edu/courses/am205/schedule/

此时,单个接收器数据对应的误差是

很容易证明非线性关系,即

3. 求导

和线性最小二乘一样,优化的目标函数为

。其中,前面的
系数只是为了方便后面推导的书写,

m是样本点的数量

其中n是待优化参数的维度

是r对b的雅可比矩阵。

b最优的条件就是

如果r与b是线性关系,那么

就是正规方程组(参考上一篇文章“线性最小二乘”),可以直接求解。证明的话只需要把
拆开。

此处因为r(b)的非线性,只能迭代求解这个优化问题。

4. 优化

4.1 牛顿法

先考虑一个简单的情况来引入牛顿法。

  • 一元函数,求一个x使得f(x)=0。假如我们先猜这个根是

    ,距离真实的根的距离是
    。使用泰勒展开
    。忽略高阶项,可以得到
    。所以
    ,如此循环。
  • 对于多元函数,形式完全类似:
    。对于over-constrained system,
    ,参考

    https://zhuanlan.zhihu.com/p/83269117,可以用伪逆

    求逆。

4.2 牛顿法在非线性最小二乘中的使用

上面Section3提到,希望求根的函数F(b)为

有必要在这里停下来理一下notation。注意此处:

  • r是误差函数,尺寸为

    ,m是样本点的个数
  • 是误差函数对b的雅可比矩阵,尺寸为
    ,n是b的维度,是待优化参数的个数
  • φ是目标函数,尺寸为
  • F是φ的导数,是待求根的函数,尺寸为
  • 是F对b的雅可比矩阵,尺寸为

所以为了得到

还得继续求一次导:

其中

是Eq.4的第i列的转置和r(b)列向量的点积。

下一步就是用Section4.1这个公式来迭代:

4.3 高斯牛顿法的推导 Gauss-Newton Method

Eq.6中的二阶导求解通常很麻烦,而且随着优化的进行,误差函数r(b)的值也在减小,因此决定忽略Eq.6的第二项求和:

把Eq.6 Eq.10代入到Eq.8里,得到最终的迭代公式:

观察下正规方程组的公式

可以发现,和上面的Eq.11形式上有很多相近之处。实际上高斯牛顿法实际上等价于在每个迭代步骤求解
。这种线性化非线性函数的思路在科学运算里很常见。

4.4 如何优雅地计算雅可比矩阵

  • 对于简单问题,比如上面Section2的

    ,可以手推求导。
  • 但对于复杂的函数,或者没有closed-form的黑盒函数,可以考虑有限差分+autograd

autograd: Efficiently computes derivatives of numpy code​github.com

4.5 高斯牛顿法小结

特点是:

  • 使用牛顿法求解

  • 忽略二阶项

缺点:

实际应用中收敛不稳定

4.6 高斯牛顿法的变种——Levenberg–Marquardt法

更新公式:

其中

,diag此处的意思是把除了对角线的元素直接归零,然后用heuristic选择

从形式上LM法比GM法只是多了一个正则项。

5. 回到求发射器位置的例子

这里用Python的scipy.optimize.root作为求解器

https://github.com/chr1shr/am205_examples/blob/master/1_data_fitting/nonlinlsq.py​github.com

sol

Credit to http://iacs-courses.seas.harvard.edu/courses/am205/schedule/

红色的点是b_init,红色的×是最终收敛的解,而黑色的×是真实的位置。

一圈一圈的是

的等高线图,而求解器想要找
的点。可以看到,此处的等高线图不是规则形状,也说明了这是一个非线性最小二乘的问题。

PS: 如果是线性最小二乘(

)的话,2D情况下(n=2)的轮廓图会长这个样子:
Credit to http://iacs-courses.seas.harvard.edu/courses/am205/schedule/

更高阶的情况下是hyperellipses。

python 最小二乘回归 高斯核_[数值计算] 数据拟合——非线性最小二乘法相关推荐

  1. python 最小二乘回归 高斯核_「机器学习」一文读懂线性回归、岭回归和Lasso回归...

    点击上方蓝色字体,关注AI小白入门哟 作者 | 文杰 编辑 | yuquanle 本文介绍线性回归模型,从梯度下降和最小二乘的角度来求解线性回归问题,以概率的方式解释了线性回归为什么采用平方损失,然后 ...

  2. python 最小二乘回归 高斯核_数据科学中最简单也最重要的算法:线性回归

    全文共1794字,预计学习时长15分钟 线性回归是数据科学中最简单也是最重要的算法.无论面试的工作领域是数据科学.数据分析.机器学习或者是量化研究,都有可能会遇到涉及线性回归的具体问题.要想熟练掌握线 ...

  3. python 最小二乘回归 高斯核_机器学习技法6-(支持向量回归)

    一.核岭回归 线性分类模型加入了L2正则化以后,最佳解是w关于z的线性组合,因此带有L2正则化的线性分类模型能引入核函数,也就是把线性模型变成核函数的形式. 在线性回归模型中,损失函数为: 当给线性回 ...

  4. python 最小二乘回归 高斯核_从简单数学建模开始:08最小二乘准则的应用(附python代码)...

    模型拟合一般来说有这么三种: 切比雪夫近似准则 极小化绝对偏差之和 最小二乘准则 这几个原则各有各的适用范围.其中最小二乘准则是比较容易计算的.接下来我将简要的介绍最小二乘准则以及举例说明如何用pyt ...

  5. python 最小二乘回归 高斯核_最经典的回归模型参数估计算法—最小二乘

    首先,我们要明白最小二乘估计是个什么东西?说的直白一点,当我们确定了一组数的模型之后,然后想通过最小二乘的办法来确定模型的参数.举个两变量(一个自变量.一个因变量)线性回归的例子来说明一下,如下面所示 ...

  6. 非线性最小二乘法 python_[数值计算] 数据拟合——非线性最小二乘法

    前面分析了 线性最小二乘 的解法YcoFlegs:[数值计算] 数据拟合--线性最小二乘法​zhuanlan.zhihu.com 现在来看另一个问题:非线性最小二乘法 1. 定义 首先是如何定义这里这 ...

  7. Python小白的数学建模课-23.数据拟合全集

    拟合是用一个连续函数(曲线)靠近给定的离散数据,使其与给定的数据相吻合. 数据拟合的算法相对比较简单,但调用不同工具和方法时的函数定义和参数设置有所差异,往往使小白感到困惑. 本文基于 Scipy 工 ...

  8. 数据拟合的最小二乘法 python实现

    数据拟合的最小二乘法 <计算机科学计算>张宏伟 第二版 第五章习题13 用最小二乘法求拟合下列数据的二次多项式 xi yi 1 10 3 5 4 4 5 2 6 1 7 1 8 2 9 3 ...

  9. python拟合统计分布_将数据拟合到分布?

    这是一个复杂的问题,没有完美的答案.我将试着给你一个主要概念的概述,并为你指出一些有用的阅读方向. 假设你有一组一维的数据,并且你有一组有限的概率分布函数,你认为这些数据可能是从中产生的.您可以独立地 ...

  10. python 线性回归回归 缺失值 忽略_机器学习 第3篇:数据预处理(使用插补法处理缺失值)...

    插补法可以在一定程度上减少偏差,常用的插补法是热卡插补.拟合插补和多重插补.拟合插补,要求变量间存在强的相关性:多重插补(MCMC法),是在高缺失率下的首选插补方法,优点是考虑了缺失值的不确定性. 一 ...

最新文章

  1. 构建自主操作系统,阿里为何失败了?
  2. Electron中打开和关闭子窗口以及子窗口向父窗口传值
  3. 对于 Netty ByteBuf 的零拷贝(Zero Copy) 的理解
  4. Spring Boot2整合Shiro(1):身份认证
  5. svn利用钩子脚本功能实现代码同步到web目录
  6. 一夜上手uni-app
  7. 2018年7-8月学习有效反馈
  8. dynamipsgui 模拟器模块详细介绍
  9. 分析:谷歌不会退出中国市场的8大理由
  10. 5W1H 图书管理系统
  11. ftp 227 entering passive mode
  12. 使用scrapy框架爬取携程旅行数据
  13. 【JAVA字符串最详细讲解】
  14. [时间复杂度]为什么采用二叉排序树查找的平均查找长度为O(log2n)
  15. cluster_acc计算
  16. 世界排名第 3 的滴滴裁员,开春求职必知的独角兽排行榜
  17. linux cadaver 命令,screen命令用法与cadaver
  18. 创基MIFI扩展坞自带4G上网功能扩展坞
  19. FPGA中的LUT LUTRAM BRAM DSP FF
  20. 模拟一个火车站售票小例子

热门文章

  1. Scala 深入浅出实战经典 第91讲:Akka第一个案例动手实战架构设计
  2. linux kernel 本地提权漏洞CVE-2013-1763 exploit 代码分析
  3. 36.MySQY 常用工具
  4. 5. laravel 路由(2)
  5. css3中的perspective与perspective-origin
  6. Project Aposs
  7. JS中var和let
  8. SpringBoot 1.快速搭建一个 SpringBoot Maven工程
  9. Ubuntu 14.04 Ruby 2.3.3 安装
  10. Android 高仿微信支付密码输入控件