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

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

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

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

1. 定义

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

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

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

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

2. 例子——发射器位置

在一片区域里

,存在10个接收器,分别位于
,和一个无线电发射器,位置
未知。这些接收器可以测量离发射器的距离,但存在误差。

python 最小二乘回归 高斯核_[数值计算] 数据拟合——非线性最小二乘法_第1张图片
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
python 最小二乘回归 高斯核_[数值计算] 数据拟合——非线性最小二乘法_第2张图片

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

python 最小二乘回归 高斯核_[数值计算] 数据拟合——非线性最小二乘法_第3张图片
Credit to http://iacs-courses.seas.harvard.edu/courses/am205/schedule/

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

一圈一圈的是

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

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

)的话,2D情况下(n=2)的轮廓图会长这个样子:

python 最小二乘回归 高斯核_[数值计算] 数据拟合——非线性最小二乘法_第4张图片
Credit to http://iacs-courses.seas.harvard.edu/courses/am205/schedule/

更高阶的情况下是hyperellipses。

你可能感兴趣的:(python,最小二乘回归,高斯核,R,加权最小二乘,代码,R中怎么做加权最小二乘,数学建模最小二乘法拟合,最小二乘法建模例题,线性分组码的最小汉明距为6)