5.3 递归最小二乘法

前面最小二乘法中数据是一次全部测量好,然后进行求解。但实际中有时存在测量数据是在线获得的,即时刻获得测量数据。比如无人驾驶车辆,需要实时判断前面车辆的运动状态,获取其加速度,所以每时每刻都需要进行测量。当每次获得新的测量数据后,需要进行最小二乘法以更新车辆状态。如果每次更新时,都采用公式 x^=(ATA)−1ATb\mathbf{\hat{x}} = (A^TA)^{-1}A^T\mathbf{b}x^=(ATA)−1ATb 进行更新,即采用所有数据进行计算,则当测量次数很多时,计算量很大,效率很低,且需要保存所有测量数据。我们可以采用递归方式,每次利用新测量数据对结果继续修正,极大减小计算量和存储量。

为了使记号简洁,我们令 x^m\mathbf{\hat{x}_m}x^m​ 表示用前 mmm 次测量数据得到的最优近似解。我们计算 ATAA^TAATA ,此时需要把矩阵 AAA 看作行向量组,即 A=[ar1Tar2T⋮armT]A = \left[ \begin{matrix} \mathbf{a^T_{r1}} \\ \mathbf{a^T_{r2}} \\ \vdots \\ \mathbf{a^T_{rm}} \end{matrix} \right]A=⎣⎢⎢⎢⎡​ar1T​ar2T​⋮armT​​⎦⎥⎥⎥⎤​ ,每一行对应一次测量数据,总共 mmm 次测量,则
ATA=[ar1,ar2,⋯,arm][ar1Tar2T⋮armT]=ar1ar1T+ar2ar2T+⋯+armarmTA^TA= \left[ \begin{matrix} \mathbf{a_{r1}} , \mathbf{a_{r2}}, \cdots , \mathbf{a_{rm}} \end{matrix} \right] \left[ \begin{matrix} \mathbf{a^T_{r1}} \\ \mathbf{a^T_{r2}} \\ \vdots \\ \mathbf{a^T_{rm}} \end{matrix} \right]= \mathbf{a_{r1}}\mathbf{a^T_{r1}} + \mathbf{a_{r2}}\mathbf{a^T_{r2}} + \cdots + \mathbf{a_{rm}}\mathbf{a^T_{rm}} ATA=[ar1​,ar2​,⋯,arm​​]⎣⎢⎢⎢⎡​ar1T​ar2T​⋮armT​​⎦⎥⎥⎥⎤​=ar1​ar1T​+ar2​ar2T​+⋯+arm​armT​

令 Pm=(ATA)m−1P_m = (A^TA)_m^{-1}Pm​=(ATA)m−1​ 表示用前 mmm 次测量数据得到的矩阵,则
Pm=(ar1ar1T+⋯+ar(m−1)ar(m−1)T+armarmT)−1=(Pm−1−1+armarmT)−1P_{m} = (\mathbf{a_{r1}}\mathbf{a^T_{r1}} + \cdots + \mathbf{a_{r(m-1)}}\mathbf{a^T_{r(m-1)}} + \mathbf{a_{rm}}\mathbf{a^T_{rm}} )^{-1}=(P_{m-1}^{-1}+\mathbf{a_{rm}}\mathbf{a^T_{rm}})^{-1} Pm​=(ar1​ar1T​+⋯+ar(m−1)​ar(m−1)T​+arm​armT​)−1=(Pm−1−1​+arm​armT​)−1

ATb=[ar1,ar2,⋯,arm][b1b2⋮bm]=b1ar1+b2ar2+⋯+bmarmA^T\mathbf{b} = \left[ \begin{matrix} \mathbf{a_{r1}} , \mathbf{a_{r2}}, \cdots , \mathbf{a_{rm}} \end{matrix} \right] \left[ \begin{matrix} b_1 \\ b_2 \\ \vdots \\ b_m \end{matrix} \right]= b_1\mathbf{a_{r1}} + b_2\mathbf{a_{r2}} + \cdots + b_m\mathbf{a_{rm}} ATb=[ar1​,ar2​,⋯,arm​​]⎣⎢⎢⎢⎡​b1​b2​⋮bm​​⎦⎥⎥⎥⎤​=b1​ar1​+b2​ar2​+⋯+bm​arm​

令 Bm=(ATb)mB_m = (A^T\mathbf{b})_mBm​=(ATb)m​ 表示用前 mmm 次测量数据得到的向量,则
Bm=b1ar1+⋯+bm−1ar(m−1)+bmarm=Bm−1+bmarmB_{m} = b_1\mathbf{a_{r1}} + \cdots + b_{m-1}\mathbf{a_{r(m-1)}} + b_m\mathbf{a_{rm}} = B_{m-1} + b_m\mathbf{a_{rm}} Bm​=b1​ar1​+⋯+bm−1​ar(m−1)​+bm​arm​=Bm−1​+bm​arm​

根据公式 x^=(ATA)−1ATb\mathbf{\hat{x}} = (A^TA)^{-1}A^T\mathbf{b}x^=(ATA)−1ATb ,得利用 mmm 次测量数据的公式为

x^m=PmBm=(Pm−1−1+armarmT)−1(Bm−1+bmarm)\mathbf{\hat{x}_{m}} = P_{m}B_{m} = (P_{m-1}^{-1}+\mathbf{a_{rm}}\mathbf{a^T_{rm}})^{-1}(B_{m-1} + b_{m}\mathbf{a_{rm}}) x^m​=Pm​Bm​=(Pm−1−1​+arm​armT​)−1(Bm−1​+bm​arm​)

这就是获得第 mmm 次测量数据后的更新公式,不需要全部从零计算所有数据,只需保存前 m−1m-1m−1 次测量数据获得的矩阵 Pm−1−1P_{m-1}^{-1}Pm−1−1​ 和向量 Bm−1B_{m-1}Bm−1​ 即可,计算量也很少。

根据 x^m=PmBm\mathbf{\hat{x}_{m}} = P_{m}B_{m}x^m​=Pm​Bm​ 得 Bm−1=Pm−1−1x^m−1B_{m-1} = P_{m-1}^{-1}\mathbf{\hat{x}_{m-1}}Bm−1​=Pm−1−1​x^m−1​ ,Pm−1=Pm−1−1+armarmTP_{m}^{-1} =P_{m-1}^{-1}+\mathbf{a_{rm}}\mathbf{a^T_{rm}}Pm−1​=Pm−1−1​+arm​armT​ 带入上式得

x^m=Pm(Pm−1−1x^m−1+bmarm)=Pm((Pm−1−armarmT)x^m−1+bmarm)=x^m−1+Pmarm(bm−armTx^m−1)\mathbf{\hat{x}_{m}} = P_{m}(P_{m-1}^{-1}\mathbf{\hat{x}_{m-1}} + b_{m}\mathbf{a_{rm}})\\=P_{m}( (P_{m}^{-1}-\mathbf{a_{rm}}\mathbf{a^T_{rm}})\mathbf{\hat{x}_{m-1}} + b_{m}\mathbf{a_{rm}} )\\=\mathbf{\hat{x}_{m-1}}+P_{m}\mathbf{a_{rm}}(b_{m}-\mathbf{a^T_{rm}}\mathbf{\hat{x}_{m-1}}) x^m​=Pm​(Pm−1−1​x^m−1​+bm​arm​)=Pm​((Pm−1​−arm​armT​)x^m−1​+bm​arm​)=x^m−1​+Pm​arm​(bm​−armT​x^m−1​)

这就是最优近似解的递归公式。

递归公式中 Pm=(Pm−1−1+armarmT)−1P_{m} = (P_{m-1}^{-1}+\mathbf{a_{rm}}\mathbf{a^T_{rm}})^{-1}Pm​=(Pm−1−1​+arm​armT​)−1 需要计算逆矩阵,进一步化简,利用公式 (A+BCD)−1=A−1−A−1B(C−1+DA−1B)−1DA−1(A+BCD)^{-1}=A^{-1}-A^{-1}B(C^{-1}+DA^{-1}B)^{-1}DA^{-1}(A+BCD)−1=A−1−A−1B(C−1+DA−1B)−1DA−1 最后可得

x^m=x^m−1+Kmϵmϵm=bm−armTx^m−1Km=PmarmPm=Pm−1−Pm−1armarmTPm−11+armTPm−1arm\mathbf{\hat{x}_{m}} =\mathbf{\hat{x}_{m-1}}+K_{m}\epsilon_{m}\\ \epsilon_{m} = b_{m}-\mathbf{a^T_{rm}}\mathbf{\hat{x}_{m-1}}\\ K_{m} = P_{m}\mathbf{a_{rm}}\\ P_{m} = P_{m-1} - \frac {P_{m-1}\mathbf{a_{rm}}\mathbf{a^T_{rm}}P_{m-1}}{1+\mathbf{a^T_{rm}}P_{m-1}\mathbf{a_{rm}}} x^m​=x^m−1​+Km​ϵm​ϵm​=bm​−armT​x^m−1​Km​=Pm​arm​Pm​=Pm−1​−1+armT​Pm−1​arm​Pm−1​arm​armT​Pm−1​​

时间衰减递归最小二乘法

递归最小二乘法中所有测量数据重要性都是一样的,这样可能会带来一个问题。还是以无人驾驶车辆实时判断前面车辆的运动状态为例,我们假设前面车辆做匀加速运动,实际上车辆运动状态时刻会发生变化,时而加速时而减速(这称为机动性),故为了准确获取车辆当前状态,当前数据的重要性,显然要大于历史数据,不能同等对待。而递归最小二乘法却同等对待,故最优近似解更新速度慢,不能实时反映车辆运作状态的改变,会慢半拍。如何提高当前数据的重要性,同时又不导致计算复杂度的增加,本节提出一种方法。根据 Pm=Pm−1−Pm−1armarmTPm−11+armTPm−1armP_{m} = P_{m-1} - \frac {P_{m-1}\mathbf{a_{rm}}\mathbf{a^T_{rm}}P_{m-1}}{1+\mathbf{a^T_{rm}}P_{m-1}\mathbf{a_{rm}}}Pm​=Pm−1​−1+armT​Pm−1​arm​Pm−1​arm​armT​Pm−1​​ 得

Km=Pmarm=Pm−1arm1+armTPm−1armK_{m} = P_{m}\mathbf{a_{rm}} = \frac {P_{m-1}\mathbf{a_{rm}}}{1+\mathbf{a^T_{rm}}P_{m-1}\mathbf{a_{rm}}} Km​=Pm​arm​=1+armT​Pm−1​arm​Pm−1​arm​​

最优近似解的更新量为 KmϵmK_{m}\epsilon_{m}Km​ϵm​ ,为了提高最新测量的权重,我们对 KmK_{m}Km​ 进行修正为

Km=Pm−1arm1/κ+armTPm−1arm,κ≥1K_{m} = \frac {P_{m-1}\mathbf{a_{rm}}}{1/\kappa+\mathbf{a^T_{rm}}P_{m-1}\mathbf{a_{rm}}} ,\kappa \ge 1 Km​=1/κ+armT​Pm−1​arm​Pm−1​arm​​,κ≥1

修正系数 κ\kappaκ 越大,最新测量的权重越大,历史数据的作用衰减越快,最优解能快速跟踪系统。但 κ\kappaκ 越大,如果车辆运作状态没有改变,则会增大最优近似解的误差;κ\kappaκ 小,如果车辆运作状态发生改变,则最优近似解不能快速跟随车辆状态的改变。所以最理想的情况是,先判断车辆运动状态是否发生改变,如果发生,则增大 κ\kappaκ ,否则可以令 κ=1\kappa=1κ=1 。

5.3 递归最小二乘法相关推荐

  1. 递归最小二乘法、增广最小二乘法、带遗忘因子的递归增广最小二乘法

    一.递归最小二乘法 递推最小二乘法:当矩阵维数增加时,矩阵求逆运算计算量过大,而且不适合在线辨识.为了减少计算量,并且可以实时地辨识出动态系统的特性,可以将最小二乘法转换成参数递推的估计. 取前N组数 ...

  2. RLS递归最小二乘法(Recursive Least Squares)

    RLS递归最小二乘法(Recursive Least Squares) 感谢B站Up 凩子白的讲解视频, 大多数的RLS算法介绍都是从各种专业领域角度讲解的(比如滤波器等角度), 对于缺乏专业背景的同 ...

  3. 捷联惯导系统学习5.2(递归最小二乘法 )

    采用递推方式求解最小二乘法(Recursive Least Square RLS)可以有效减小数据存储量. 测量方程 Z‾k=H‾kX+V‾k\overline Z_k=\overline H_kX+ ...

  4. rls最小二乘法 c语言,RLS递归最小二乘(最新整理)

    <RLS递归最小二乘(最新整理)>由会员分享,可在线阅读,更多相关<RLS递归最小二乘(最新整理)(4页珍藏版)>请在人人文库网上搜索. 1.实验二:实现自适应的递归最小二乘法 ...

  5. 几种最小二乘法及python代码:ELS、TLS、RLS

    1.ARMAX模型 下面各章节,我就是使用上面公式的符号,其中y是输出,u是输入,e是噪声.有m个输出y,r个输入u. 进一步精简为: Y=Pθ+E 其中:Y为要预测的部分,P为已知数据(包括y的t- ...

  6. 古典最小二乘估计,加权最小二乘估计,递归最小二乘估计以及卡尔曼滤波

    古典最小二乘估计,加权最小二乘估计,递归最小二乘估计以及卡尔曼滤波 古典最小二乘估计,以测量误差的平方和作为损失函数. 根据高斯-马尔可夫定理,古典最小二乘估计在线性测量系统中,在测量噪声为零均值,同 ...

  7. 5.13 卡尔曼滤波

    5.13 卡尔曼滤波 卡尔曼滤波和递归最小二乘法形式上极其相似.递归最小二乘法最优解更新公式为 x^m=x^m−1+Kmϵmϵm=bm−armTx^m−1\mathbf{\hat{x}_{m}} =\ ...

  8. Coursera自动驾驶课程第13讲:Least Squares

    在上一讲<Coursera自动驾驶课程第12讲:Semantic Segmentation>我们学习了深度学习的另一个重要应用:语义分割.至此,本课程的视觉感知模块就介绍完了. 从本讲开始 ...

  9. Python数模笔记-StatsModels 统计回归(1)简介

    1.关于 StatsModels statsmodels(http://www.statsmodels.org)是一个Python库,用于拟合多种统计模型,执行统计测试以及数据探索和可视化. 欢迎关注 ...

最新文章

  1. 微前端在美团外卖的实践
  2. 超强实操!手把手教学Kinect深度图与RGB摄像头的标定与配准
  3. linux script 命令
  4. css裁剪clip-path画多边形
  5. 如何在linux下yum安装mysql_linux下使用yum安装mysql详解
  6. 计算机操作系统第三章测试题及答案
  7. 华为认证IE太难,先考IP好找工作吗?
  8. amd用不了android studio,解决AMD无法使用Android studio问题
  9. 【天下有春】七日之书
  10. emac 64位 for windows下载
  11. 决策树(三)--完整总结(ID3,C4.5,CART,剪枝,替代)
  12. php怎么改字体大小,phpstorm修改字体和大小
  13. 软件测试——功能测试(缺陷)2
  14. codeforces 1669F
  15. 系统集成项目管理工程师备考资料(口袋应试第二版)2
  16. 【2016读书】4月读书笔记
  17. Unity 不使用ScrollView实现有限物体的无限循环
  18. js上传图片 识别条形码
  19. VS2012C语言有编译按钮在哪,VS2012的使用
  20. 密室逃脱18 迷宫题

热门文章

  1. C/C+语言struct深层探索
  2. CTFHub-Web-信息泄露
  3. at java.net.urlclassloader.findclass_如何使用URLClassLoader加载* .class文件?
  4. vue移动端弹框组件
  5. Chrome 控制台console的用法
  6. 如何实现同一个页面里面两个页面的相互切换(window.onscroll)
  7. java中HashMap遍历详解
  8. Some Essential JavaScript Questions And Answers(5)
  9. Vue2.0+vuex+H5实现音乐播放及歌曲切换功能的方法及原理解释
  10. matlab中的@函数