【Matlab】LM迭代估计法

2023-11-18

简介

在最近的传感器校准算法学习中,有一些非线性的代价函数求解使用最小二乘法很难求解,使用LM算法求解会简单许多,因此学习了一下LM算法的基础记录一下。

LM 优化迭代算法时一种非线性优化算法,可以看作是梯度下降与高斯牛顿法的结合,综合了两者的优点。

对于一个最小二乘的问题,如下:

其中 y(i) 为第 i 组数据的真实值或理论真实值,fi(θ) 为第 i 组数据的预测值,目的就是找到一组 θ,使得代价函数达到最小值。通常,需要指定一个初始 θ0,不断优化迭代,产生 θ1,θ2 ,最终收敛到最优值 θ。

在收敛的过程中,需要两个参数,收敛方向与收敛步长:

h 为收敛方向

α 为收敛步长

雅可比矩阵

在后续 LM 的迭代计算中,需要用到雅可比矩阵,雅可比矩阵的简易理解过程如下:

在 n 维空间中的向量,假设 x 与 y 的映射关系为 y:

以上的映射关系用 F 表示。

那么雅可比矩阵就可以写作:

雅可比矩阵的意义就在于,假设 p 是向量中的一个点,F 在点 p 处是可微的,那么雅可比矩阵 J(p) 就是这点的导数,定义一个 x,当 x 足够接近 p 时,就可以得到:

F(x) ≈ F(p) + J(p) * (x - p)

F(x) - F(p) ≈ J(p) * (x - p)

即:

Δy ≈ J(p) * Δx

转化为微分:

dy = J(p) dx

将上述的微分与雅可比矩阵展开:

雅可比矩阵与 LM 代价函数的关系

LM 代价函数,对 θ 求偏导,就是一个雅可比矩阵,雅可比矩阵的更新在 LM 算法中,非常关键。

LM算法的步骤

LM算法的迭代公式

LM算法的迭代可以理解为结合了梯度下降与高斯牛顿的优点,因此其迭代公式可以对比观察。

梯度下降

dot(J) 就是 J 的一阶倒数

高斯牛顿

高斯牛顿在牛顿迭代的基础上,使用了雅可比矩阵的平方,使得求解更快,但如果初始值不在最优解附近,则求解就可能出错:

f 表示代价函数中的残差,J 表示雅可比矩阵

LM算法

由于 J_T*J 在某些情况下是不可逆的,因此 LM 增加了一个系数 λ*I (I 为单位矩阵) ,以此来保证等式左边是一定可逆的,就可以求解所有的情况:

1)当 λ 设置的比较大时,就相当于是梯度下降,适合当前的估计参数距离最优解比较远的情况

2)当 λ 设置的比较小时,就相当于高斯牛顿,适合估计参数距离最优解比较近的情况

因此在 LM 算法中,需要根据情况来调整 λ 的值来得到最优解

步骤

通常遵循以下步骤:

1.采样n组数据,定义代价函数,如下所示:

fi 表示模型对第 i 个样本的预测值, y 表示真实值或者理论真实值。

2.初始化参数向量,需要初始化模型的估计参数 θ,可以随机初始化或根据经验设置初值

3.计算雅可比矩阵,即代价函数关于估计参数向量 θ 的雅可比矩阵:

4.计算初始代价函数值,将初始估计参数 θ 带入

5.设置 LM 算法的参数,包括初始阻尼因子 λ ,最大迭代次数,迭代精度,收敛步长等

6.迭代更新参数向量,雅可比矩阵(有一些简单的情况雅可比矩阵只与采样值有关,就可以只计算一次),这里将收敛补偿设置为1,即α = 1

之后更新新的估计参数:

使用新的估计参数带入代价函数 F,计算新的代价函数是否更小,如果更小则接受更新,否则,拒绝更新,并增大 λ:

λ = 10 * λ

如果新的参数更优,则将 λ 减小:

λ = 0.1 * λ

7.更改估计参数之后,再次使用 n 组采样数据,重复 6 步骤,如果代价函数值变化小于设定的迭代精度,或达到最大迭代次数,则停止迭代,返回跌代后的参数向量 θ

使用多项式拟合例子验证

假设需要拟合一个二次多项式 f = a * x^2 + b * x + c,假设真实的多项式参数 a = 2,b = -3,c = -1,之后添加随机噪声。

按照 LM 算法的步骤,定义初始的参数估计矩阵为:

theta = [1,1,1]

收敛步长 alpha 定义为1,不变

迭代次数为 1000 次,采样 100 组 x,y 数据。

之后按照这个简化步骤,就可以迭代计算出多项式的值:

1)更新雅可比矩阵

2)计算迭代步长 h

3)判断是否更新估计参数(根据新的代价值是否变得更小),如果要更新,则将迭代步长加到上一次的估计参数矩阵 theta 中,并减小 lambda ;反之,则拒绝更新,并加大 lambda

(lambda 越小,越适合接近最优解的时候,lambda越大,越适合距离最优解较远的时候)

更新雅可比矩阵

针对此例子,雅可比的通式为:

其中,n 表示估计参数矩阵的维度,m 表示采样次数,f 表示代价函数中的预测方程:

计算之后,此多项式的雅可比矩阵为:

只是恰好这个例子的雅可比矩阵偏导求解出来是不包含代预估变量的,可以只更新一次,正常是每次迭代都需要更新的。

最终的拟合效果如下:

拟合出的估计参数与实际值也是接近的

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Matlab】LM迭代估计法 的相关文章

  • MATLAB 在 MATLAB 7.10.0 学生版中似乎找不到 csaps()

    我有一些代码使用csaps Matlab的三次平滑样条拟合函数 http www mathworks com help toolbox curvefit csaps html我想将其提供给使用 MATLAB 7 10 0 R2010a 的学
  • 将输出从符号数学 (sym) 转换为浮点型

    我的问题类似于这个问题 https stackoverflow com questions 11114101 how to convert mupad symbol i sqrt 1 to i in matlab 11114959 1111
  • 在 matlab/octave 中将数据集分成两个子集 [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 将数据集分为两个子集 例如 训练 和 测试 其中 训练集包含 80 的数据 测试集包含剩余的 20 分裂的意思是生成一个长度等于的逻辑索引
  • 如何建立数据流挖掘的滑动窗口模型?

    我们遇到的情况是 流 来自传感器的数据或服务器上的点击流数据 采用滑动窗口算法 我们必须将最后 例如 500 个数据样本存储在内存中 然后 这些样本用于创建直方图 聚合并捕获有关输入数据流中异常的信息 请告诉我如何制作这样的滑动窗 如果您询
  • 如何读取 10 位原始图像?其中包含 RGB-IR 数据

    我想知道如何从我的 10 位原始 它有 rgb ir 图像数据 数据中提取 RGB 图像 如何使用 Python 或 MATLAB 进行阅读 拍摄时的相机分辨率为 1280x720 室内照片图片下载 https drive google c
  • 使用 java 执行 Matlab 函数

    我正在编写一个应用程序 它使用 matlab 进行图像处理 然后使用 Java 接口显示结果 由于某些原因 我必须同时使用 Java 和 Matlab 如何在java中使用matlab函数 如何创建和访问界面 MATLAB控制 http m
  • 如何获取活动对象 MATLAB GUI 的句柄

    我正在尝试使用 MATLAB GUI 创建日历 我有两个Edit Text对象 edittext1 and edittext2 我想做这个 我把光标放在edittext1然后在日历中选择日期 它会进入文本字段edittext1 同样对于ed
  • 在 C/C++ 中调用 MATLAB API

    我刚刚从某处听说 对于数值计算 MATLAB 确实提供了一些用户友好的 API 如果你在 C C 代码中调用这些 API 你可以显着加快计算速度 但我在MATLAB文档中没有找到这样的信息 例如http www mathworks com
  • 将组合字符串和数字输入的元胞数组写入文本文件

    考虑以下 DateTime 2007 01 01 00 00 2007 02 01 00 00 2007 03 01 00 00 Headers Datetime Data Dat 100 200 300 Data DateTime num
  • 如何以编程方式指定 MATLAB 编辑器键绑定

    我想将键盘键绑定设置为Windows 默认设置我想在启动时使用startup m因为我希望在大量系统上设置此设置 首选项对话框中的等效设置是 MATLAB gt Keyboard gt Shortcuts gt Active Setting
  • 估算缺失数据,同时强制相关系数保持不变

    考虑以下 excel 数据集 m r 2 0 3 3 0 8 4 0 1 3 2 1 5 2 2 3 1 9 2 5 1 2 3 0 2 0 2 6 我的目标是使用以下条件填充缺失值 将上述两列之间的成对相关性表示为 R 大约 0 68 将
  • MATLAB:比较两个不同长度的数组

    我有两个长度不同的数组 由于采样率不同 需要比较 我想对较大的数组进行下采样以匹配较小的数组的长度 但是该因子不是整数而是小数 举个例子 a 1 1 375 1 75 2 125 2 5 2 875 3 25 b 1 2 3 有什么方法可以
  • 同时重新排序和旋转图像的高效方法

    为了快速加载 jpeg 我为turbojpeg 实现了一个 mex wrapper 以有效地将 大 jpeg 读入 MATLAB 对于 4000x3000px 的图像 实际解码只需要大约 120 毫秒 而不是 5 毫秒 然而 像素顺序是 R
  • 频域和空间域的汉明滤波器

    我想通过在 MATLAB 中应用汉明滤波器来消除一维信号中的吉布斯伪影 我所拥有的是k1这是频域中的信号 我可以通过应用 DFT 来获取时域信号k1 s1 ifft ifftshift k1 该信号具有吉布斯伪影 现在 我想通过 A 乘以汉
  • 作为动画的八度情节点

    我有以下八度脚本 TOTAL POINTS 100 figure 1 for i 1 TOTAL POINTS randX rand 1 randY rand 1 scatter randX randY hold on endfor 当我运
  • 如何每次使用按钮将数据添加到 MATLAB 中的现有 XLSX 文件?

    我有一个函数可以生成一些变量 例如分数 对 错 未回答 使用按钮调用此功能 问题是如何每次将函数生成的这些值添加 附加到 XLSX 文件中 或者 如何创建 MAT 文件以便可以添加它 可能的解决方案是什么 附加到 xls 文件所涉及的挑战是
  • 在Matlab中选择图像上的像素时,索引指的是什么?

    当在Matlab中查看图像的单个像素时 该索引指的是什么 X Y 指的是像素的坐标 RGB 指的是颜色 但是关于索引是什么有什么想法吗 为了澄清一下 当我在 Matlab 中查看图形并使用数据光标选择一个点时 显示的三行是 X Y 指数 R
  • Matlab颜色检测

    我试图一致地检测同一场景的图像之间的某种颜色 这个想法是根据颜色配置文件识别一组对象 因此 例如 如果给我一个带有绿色球的场景 并且我选择绿色作为我的调色板的一部分 我想要一个具有反映它检测到球的矩阵的函数 任何人都可以为这个项目推荐一些
  • 如何在向量中的所有点之间绘制线?

    我有一个包含二维空间中一些点的向量 我希望 MATLAB 用从每个点到每个其他点绘制的线来绘制这些点 基本上 我想要一个所有顶点都连接的图 你能用情节来做到这一点吗 如果可以 怎么做 一种解决方案是使用该函数为每个点组合创建一组索引MESH
  • 在 matlab 代码中使用 dll 文件

    我需要使用 Matlab 中由 dll 文件定义的函数 我有一个例子 那个家伙将 dll 转换为 mexw32 文件 但我知道我是如何做到这一点的 我尝试使用加载库但它没有创建任何文件 我怎样才能做到这一点 loadlibrary http

随机推荐

  • Requests

    REQUESTS的基本操作 参考崔庆才爬虫 GET请求 import requests r requests get http www gdsgj com r encoding r apparent encoding 根据从返回内容中解析的
  • 构造函数不能被继承

    构造函数不同于其他类方法 因为他创建新的对象 而其他类方法只是被现有的对象调用 这是构造函数不被继承的原因之一 继承意味着派生类对象可以使用基类的方法 然而 构造函数在完成工作之前 对象并不存在 构造函数不能是虚函数 创建派生类对象时 将调
  • springboot项目获取真实用户ip(不是虚拟ip)

    最近在工作中遇见一个业务场景是获取用户真实的ip地址 就跟现在网上评论展示ip一样的业务场景 然后自己就去了解了一下 1 pom依赖配置
  • 数据库模式分解(应该比较易懂吧)

    数据库模式分解 部分函数依赖 函数依赖的确定 1对1的关系时 有两个函数依赖 1对多时 有一个函数依赖 多对多时 没有函数依赖 函数依赖类型 右 边 不 为 左 边
  • DVWA-XSS (Reflected)

    大约 跨站点脚本 XSS 攻击是一种注入问题 其中恶意脚本被注入到原本良性和受信任的网站上 当攻击者使用 Web 应用程序发送恶意代码 通常以浏览器端脚本的形式 时 就会发生 XSS 攻击 给其他最终用户 允许这些攻击成功的缺陷非常普遍 并
  • 机器学习论文总结

    作者简介 洪亮劼 Etsy数据科学主管 前雅虎研究院高级经理 长期从事推荐系统 机器学习和人工智能的研究工作 在国际顶级会议上发表论文20余篇 长期担任多个国际著名会议及期刊的评审委员会成员和审稿人 责编 何永灿 欢迎人工智能领域技术投稿
  • csgo修改服务器时间,csgo热身时间参数指令 热身时间怎么改

    反恐精英 全球攻势 简称CS GO 是一款由VALVE与Hidden Path Entertainment合作开发的第一人称射击游戏 游戏中可以更改相关控制命令 下面带来csgo热身时间参数指令 热身时间怎么改方法 csgo热身时间参数指令
  • 多系统集成:vue大型项目之分模块运行/打包

    本文以vue cli3 为例 实现多系统集成下的分模块打包 分模块打包方式多种多样 下文可适用于多系统之间互不干扰 主系统可集成各子系统 各子系统又可单独运行的业务场景 一 目标 我们要实现什么 所谓分模块打包 那么各个模块内就必须得有自己
  • 使用Arthas排查问题

    简介 Arthas 是Alibaba开源的Java诊断工具 深受开发者喜爱 当你遇到以下类似问题而束手无策时 Arthas可以帮助你解决 这个类从哪个 jar 包加载的 为什么会报各种类相关的 Exception 我改的代码为什么没有执行到
  • ThreadLocal详解

    如果有兴趣了解更多相关内容 欢迎来我的个人网站看看 瞳孔空间 一 基本介绍 ThreadLocal类能提供线程内部的局部变量 这种变量在多线程环境下访问时能保证各个线程的变量相对独立于其他线程内的变量 ThreadLocal实例通常来说都是
  • 关于java.lang.UnsatisfiedLinkError的小案例

    在许多项目中我们都会用到第三方动态库 so文件 但是往往会引来很多烦恼 比如 java lang UnsatisfiedLinkError 06 17 15 52 08 097 7876 7916 com ishow scan E Andr
  • 前端js和jq中select下拉框

    获取select选中的option的值 ddlRegType find option selected val 获取select选中的text ddlRegType find option selected text 获取select选中的
  • 03-postgresql报错ERROR: operator does not exist: numeric = character varyin

    现在要把数据库换成postgresql 但在转换过程中发现postgresql对传入的参数类型匹配相当严格 如select from user where a b 假设a类型为numeric 而传入的b为string的话postgresql
  • wifi类物联产品配网前言

    文章目录 1 SmartConfig配网 仅支持2 4G 2 web方式配网 3 一键配网 BLE 传统蓝牙和wifi 3 1 BLE方式 3 2 传统蓝牙方式 3 3 wifi方式 3 4 4G 网口或其他直连设备 3 5 其他配网方式
  • Linux 以root用户登录无法启动VSCode

    Linux 以root用户登录无法启动VSCode 环境 Ubuntu18 04 VSCode 复现 以root用户登录Ubuntu后单机VSCode图标打开VSCode BUG 无法打开VSCode 原因 VSCode默认不允许以root
  • vc扩展名

    APS 存放二进制资源的中间文件 VC把当前资源文件转换成二进制格式 并存放在APS文件中 以加快资源装载速度 资源辅助文件 BMP 位图资源文件 BSC 浏览信息文件 由浏览信息维护工具 BSCMAKE 从原始浏览信息文件 SBR 中生成
  • NoSql的四大类型

    NoSQL Not Only Sql 泛指非关系型的数据库 区别于关系数据库 它们不保证关系数据的ACID特性 NoSQL是一项全新的数据库革命性运动 其拥护者们提倡运用非关系型的数据存储 相对于铺天盖地的关系型数据库运用 这一概念无疑是一
  • 【扩散模型】3、DDIM

    文章目录 一 背景 二 DDIM 如何改进 2 1 DDPM 的原理回顾 2 2 DDIM 的非马尔科夫前向扩散过程 2 3 非马尔科夫扩散逆过程的采样 2 4 加速采样 Respacing 三 效果 论文 Denoising Diffus
  • 3D CG软件blender入门教程:手把手教你使用方法

    翻译 BeforeDawn大家好 我是bpm 目前在做一些设计师与技术总监相关的工作 这篇文章主要以blender这个软件作为切入点来为大家讲解一下3D CG软件blender相关概要以及使用的方法 blender是什么那么 大家知道这个名
  • 【Matlab】LM迭代估计法

    简介 在最近的传感器校准算法学习中 有一些非线性的代价函数求解使用最小二乘法很难求解 使用LM算法求解会简单许多 因此学习了一下LM算法的基础记录一下 LM 优化迭代算法时一种非线性优化算法 可以看作是梯度下降与高斯牛顿法的结合 综合了两者