本文基于下面的博客,结合自己第一次看的时候的一些问题,重新梳理总结一下
https://blog.csdn.net/wsj998689aa/article/details/41558945
一:什么是最小二乘
最小二乘:就是最小化,
其中:是第i个实际观测到的值,也可以叫做真实值或者目标值;
则可以看作是通过x这个参数预测得到的第i个值,是对的一个预测(估计)。
最小二乘就是为了使得观测值(真实值)和估计值之间的差距最小。
二:什么是线性最小二乘
所谓线性,指的是是x的线性函数,。
那么对于整个可以表示为图一:
图一写成矩阵形式,为图二
图二此时,我们有,此时最小二乘形式变为求x使得最小化。(这里A是固定的,是需要自己寻找的,这也是线性的前提)
三:如何求解线性最小二乘
对于线性最小二乘,我们要求解,那么最理想的情况是求x使得,这样也就是最小了(别问我为什么0是最小的,因为平方和,当然0是最小值)
此时,问题转换为求解,最终得到的解析解形式,一步求解,不需要迭代,完美~
这个具体的证明过程参考下面这篇博客,我就不当搬运工了:
https://blog.csdn.net/u013007900/article/details/45933435
四:什么是非线性最小二乘
所谓非线性,就是无法表示为的线性关系,即:无法表示为这种线性的关系,而是这种非线性关系(当然这里也不一定是指数形式,对数啥的,或者什么奇奇怪怪表示不出来的形式也有可能)
当是的非线性关系时,此时最小二乘就变为:非线性最小二乘
五:如何求解非线性最小二乘
非线性最小二乘问题无法构造出来一个矩阵线性方程组的,没有办法求一步求得解析解,那么我们怎么求解呢?
思路:既然是非线性的,那么我们可不可以将其转换为线性的呢?或者近似线性的?
答案当然是可以啦~~~~
这就是大名鼎鼎的一阶泰勒展开:
(一定要一阶泰勒展开,不能采用二阶以上,因为只有一阶泰勒展开才是线性函数,才能转换为线性最小二乘问题来直接求解。)
此时变成了
我们在将前两项合并就变成了
其中如果将看作,将看作一个矩阵的第i行(其实这里本来就是一个矩阵的第i行,也就是大名鼎鼎的雅各比矩阵的第i行)
那么就变成了对应着线性最小二乘的形式
此时,我们该怎么做呢~~当然是模仿线性最小二乘的解鸭:
求解:
照着抄:
最终:
这样子我们就得到了关于当前的一个更新值,这样,我们只需要不停的迭代更新x的值,直到e达到某一个精度即可~~是不是很简单呢^_^
六:结语
看到这里,你就入坑了鸭,你以为就这么好求解么~~
这里有几个难点:
1. J不会求~~肿么办?(这点我不知道,我只会逆运动学得求雅各比的方法)
2.注意到了这一项么,哼哼,谁告诉你这东西一定有逆矩阵的?那么没有逆矩阵肿么办,这就是一个ill-condition的问题,他的condition number非常大。这时候,我们通常引入正则项来降低condition number,也可以理解为强行让这个逆矩阵存在。那就是~~直接加入一个带权重的单位矩阵就好了。
3. 至于什么是ill condition 和condition number,等我后续有空了更新,或者大家自己搜一搜吧~我懒。
网友评论