美文网首页相机响应函数
线性最小二乘和非线性最小二乘

线性最小二乘和非线性最小二乘

作者: 皮皮蒋 | 来源:发表于2018-11-15 19:08 被阅读0次

    本文基于下面的博客,结合自己第一次看的时候的一些问题,重新梳理总结一下

    https://blog.csdn.net/wsj998689aa/article/details/41558945

    一:什么是最小二乘

    最小二乘:就是最小化\sum_{i = 0}^n (y_i - f_i(x))^2,

    其中:y_i是第i个实际观测到的值,也可以叫做真实值或者目标值;

              f_i(x)则可以看作是通过x这个参数预测得到的第i个值,是对y_i的一个预测(估计)。

    最小二乘就是为了使得观测值(真实值)和估计值之间的差距最小。

    二:什么是线性最小二乘

    所谓线性,指的是f_i(x)是x的线性函数,f_i(x) = x_0+t_1x_1+⋯+t_qx_q

    那么对于整个f(x)可以表示为图一:

    图一

    写成矩阵形式,为图二

    图二

    此时,我们有f(x) = Ax,此时最小二乘形式变为求x使得||Ax-y||最小化。(这里A是固定的,是需要自己寻找的,这也是线性的前提)

    三:如何求解线性最小二乘

    对于线性最小二乘,我们要求解min_x||Ax-y||,那么最理想的情况是求x使得Ax =y,这样||Ax-y|| = 0也就是最小了(别问我为什么0是最小的,因为平方和,当然0是最小值)

    此时,问题转换为求解A^TAx = A^Ty,最终得到x = (A^TA)^{-1}A^Ty的解析解形式,一步求解,不需要迭代,完美~

    这个具体的证明过程参考下面这篇博客,我就不当搬运工了:

    https://blog.csdn.net/u013007900/article/details/45933435

    四:什么是非线性最小二乘

    所谓非线性,就是f_i(x)无法表示为x的线性关系,即:f_i(x)
无法表示为x_0+t_1x_1+⋯+t_qx_q这种线性的关系,而是f_i(x) = e^{a_0x_0}+ e^{a_1x_1}+...+e^{a_nx_n}这种非线性关系(当然这里也不一定是指数形式,对数啥的,或者什么奇奇怪怪表示不出来的形式也有可能)

    f(x)x的非线性关系时,此时最小二乘就变为:非线性最小二乘

    五:如何求解非线性最小二乘

    非线性最小二乘问题无法构造出来一个矩阵线性方程组的,没有办法求一步求得解析解,那么我们怎么求解呢?

    思路:既然是非线性的,那么我们可不可以将其转换为线性的呢?或者近似线性的?

    答案当然是可以啦~~~~

    这就是大名鼎鼎的一阶泰勒展开:f_i(x) \approx  f_i(x_k)+\bigtriangledown f_i(x)(x-x_k)

    (一定要一阶泰勒展开,不能采用二阶以上,因为只有一阶泰勒展开才是线性函数,才能转换为线性最小二乘问题来直接求解。)

    此时min_x\sum_{i = 0}^n (y_i-f_i(x))^2变成了min_x\sum_{i = 0}^n (y_i-f_i(x_k)-\bigtriangledown f_i(x)(x-x_k))^2

    我们在将前两项合并就变成了

    min_x\sum_{i = 0}^n ((y_i-f_i(x_k))-\bigtriangledown f_i(x)(x-x_k))^2

    其中如果将(y_i-f_i(x_k))看作e_i,将\bigtriangledown f_i(x)看作一个矩阵的第i行(其实这里\bigtriangledown f_i(x)本来就是一个矩阵的第i行,也就是大名鼎鼎的雅各比矩阵J的第i行)

    那么就变成了min_x\sum_{i = 0}^n (e_i-J_i(x-x_k))^2对应着线性最小二乘的形式

    min_x\sum_{i = 0}^n (e_i-J_i(x-x_k))^2 =min_x||e-J(x-x_k)||

    此时,我们该怎么做呢~~当然是模仿线性最小二乘的解鸭:

    求解:J(x-x_k) = e

    照着抄:J^TJ(x-x_k) = J^Te

    最终:(x-x_k) = (J^TJ)^{-1}J^Te

    这样子我们就得到了关于当前x_k的一个更新值,这样,我们只需要不停的迭代更新x的值,直到e达到某一个精度即可~~是不是很简单呢^_^

    六:结语

    看到这里,你就入坑了鸭,你以为(x-x_k) = (J^TJ)^{-1}J^Te就这么好求解么~~

    这里有几个难点:

    1. J不会求~~肿么办?(这点我不知道,我只会逆运动学得求雅各比的方法)

    2.(J^TJ)^{-1}注意到了这一项么,哼哼,谁告诉你这东西一定有逆矩阵的?那么没有逆矩阵肿么办,这就是一个ill-condition的问题,他的condition number非常大。这时候,我们通常引入正则项来降低condition number,也可以理解为强行让(J^TJ)^{-1}这个逆矩阵存在。那就是~~(J^TJ + \lambda I)^{-1}直接加入一个带权重的单位矩阵就好了。

    3. 至于什么是ill condition 和condition number,等我后续有空了更新,或者大家自己搜一搜吧~我懒。

    相关文章

      网友评论

        本文标题:线性最小二乘和非线性最小二乘

        本文链接:https://www.haomeiwen.com/subject/hnayfqtx.html