Levenberg-Marquardt迭代(LM算法)-改进Newton法

                  1、前言

                                   a、对于工程问题,一般描述为:从一些测量值(观测量)x 中估计参数 p?即x = f(p),

                                其中,x为测量值构成的向量,参数p为待求量,为了让模型能适应一般场景,这里p也为向量。

                                这是一个函数求解问题,可以使用Guass-Newton法进行求解,LM算法是对Newton法的改进。

                            c、如果函数f为线性函数,那这个问题就变成了最小二乘问题(请参阅我另一篇博客:最小二乘法),

                            d、这篇博客中讲解的LM法、Newton法主要用于函数f为非线性函数的情况。

                       2、x = f(p)问题的Newton法求解

                                  当迭代到第k次的时候得到参数,其中为残差:

                                               

                            对f(p)进行一阶泰勒公式展开,J为Jacobi(雅可比)矩阵,因为参数p是个向量,因此对p的求导即对p逐个元素求偏导:

                                               

                            计算第k+1次的残差:

                                               

                            通过第k次到第k+1次的迭代,

                            可以发现已经把非线性问题转化为线性求解,则最小二乘解为:

                                               

                                               

                            则k+1次的参数p为:

                                               

                   3、加权Newton迭代

                                    在Newton法中,所有的因变量都是等量加权的,除此之外,可以使用一个加权的矩阵对因变量进行加权。

                             例如,当测量矢量 x 满足一个协方差矩阵为的高斯分布,且希望最小化Mahalanobis距离

                                     当这个协方差矩阵可以是对角的,则表示 x 各坐标之间相互独立。

                                     当协方差矩阵为正定对称矩阵时,正规变为:

                                               

                                               

                                     备注:马氏距离

                    4、Levenberg-Marquardt迭代(LM算法)

                                     LM算法是对Newton迭代的改进。

                            (4)式的正规方程可以简化写成:

                             LM算法将上式改为:,其中,即N的对角线元素乘以,非对角线元素不变

                             的设定策略为:在初始化时,通常设定为

                                                 如果通过解增量正规方程得到的导致误差减小,那么接受该增量并在下一次迭代前将除以10。

                                                 反之,如果值导致误差增加,那么将乘以10并重新解增量正规方程,继续这一过程直到求出的一个误差下降的为止。

                                                 对不同的重复地解增量正规方程直到求出一个可以接受的

                             LM算法的直观解释:当非常小时,该方法与Newton迭代本质相同。

                                                      当非常大时(本质上大于1),此时的非对角线元素相对于对角元素而言变得不重要,此时算法倾向于下降法。

                                                      LM算法在Newton迭代和下降方法之间无缝地移动,Newton法将使得算法在解的领域附近快速收敛,下降法使得算法在

                                                      运行困难时保证代价函数是下降的。

                         5、Newton法(LM法)两个适用场景的转换

                                    a、在上一篇博客Newton法(牛顿法 Newton Method)中讲述了牛顿法适用的两个场景:1、函数求解;2、目标函数的最优化求解

                                 上一篇博客中的f(x)相当于这篇博客中的 x –f(p),上一篇博客中是为了求x,这篇博客中是已知x,求p,只是表述不同。

                             b、这两个场景有时候是可以相互转换的:

                                 例如:函数求解问题 f(x) = 0,那也可以认为是求解 min||f(x)||,其中||.||表示二范数,即

                                 例如:目标函数优化问题 min ||f(x)||,当这个优化问题的理论最优解就是为 0 时,那么这个问题也可以转化为求解 f(x) = 0

时间: 2024-10-13 12:45:03

Levenberg-Marquardt迭代(LM算法)-改进Newton法的相关文章

非线性最小二乘法之lm算法的c代码

函数:f=2*jn*(atan((b + o - x)/h) + atan((b - o + x)/h)) - 2*jn*(atan((b + o - x)/(h + 1)) + atan((b - o + x)/(h + 1))) 这是一个实际的工程应用公式.参数为jn,o,b,h. //main函数,写的比较粗糙,但是可以运行,实际工程应用结果也比较理想. //如果想提高精度,将float换成double,结果将与matlab库函数的结果一致. float data_1[N] = {-63.

聚类算法之层次法

首先介绍聚类中的层次聚类算法.层次法又分为凝聚的层次聚类和分裂的层次聚类. 凝聚的方法:也称自底向上的方法,首先将每个对象作为单独的一个聚类,然后根据性质和规则相继地合并相近的类,直到所有的对象都合并为一个聚类中,或者满足一定的终止条件.经典的层次凝聚算法以AGNES算法为代表,改进的层次凝聚算法主要以BIRCH,CURE,ROCK,CHAMELEON为代表.(后面详细介绍) 分裂的方法:也称自顶向下的方法,正好与凝聚法相反,首先将所有的对象都看作是一个聚类,然后在每一步中,上层类被分裂为下层更

多相机颜色校正算法之一---基于LM算法的颜色变换参数求解

问题背景 在多视角视频系统中,会用多个相机拍摄同一个场景.但是因为不同相机之间的特性参数不一样,会产生色彩一致性(color consistency)和色感一致性(color constancy)的问题.由于色感是人的主观感受,不易进行量化比较.所以这里只解决色彩不一致性的问题. 如下图所示,左右两张图片就出现色彩不一致的问题. 颜色校正模型 相机有很多固有参数,这些参数会影响到拍摄到的画面呈现出的色彩.其中主要影响的有三个元素. 求解出Gain, offset,gamma三个参数,就可得到校准

排序算法之冒泡法

package chap02_Basic_Algorithms; import static org.junit.Assert.*; import java.util.Arrays; import org.junit.Test; public class SortAlgorithms { /** * 冒泡法排序 * * @param n */ static void bubbleSort(int[] n) { int j = n.length - 1; int i; int tmp; while

算法:Astar寻路算法改进,双向A*寻路算法

早前写了一篇关于A*算法的文章:<算法:Astar寻路算法改进> 最近在写个js的UI框架,顺便实现了一个js版本的A*算法,与之前不同的是,该A*算法是个双向A*. 双向A*有什么好处呢? 我们知道,A*的时间复杂度是和节点数量以及起始点难度呈幂函数正相关的. 这个http://qiao.github.io/PathFinding.js/visual/该网址很好的演示了双向A*的效果,我们来看一看. 绿色表示起点,红色表示终点,灰色是墙面.稍浅的两种绿色分别代表open节点和close节点:

k-近邻算法改进约会网站配对效果

k-近邻算法改进约会网站配对效果 一.理论学习 1. 阅读内容 请务必仔细阅读<机器学习实战>书籍第1章及第2章,本节实验通过解决约会网站配对效果问题来实战 k-近邻算法(k-Nearest Neighbour,KNN) 2. 扩展阅读 本节推荐内容可以辅助书中理论知识,比书中内容更容易理解,可以加深理论知识,请仔细阅读: 酷壳 - K Nearest Neighbor 算法 数据挖掘十大算法--K近邻算法 二.在线实验 1. 分析需求 我在约会网站看到的人,分为三类: 不喜欢的 一般喜欢的

公交车路线查询系统后台数据库设计--换乘算法改进与优化

在<查询算法>一文中已经实现了换乘算法,但是,使用存储过程InquiryT2查询从“东圃镇”到“车陂路口”的乘车路线时,发现居然用了5分钟才查找出结果,这样的效率显然不适合实际应用.因此,有必要对原有的换乘算法进行优化和改进.在本文中,将给出一种改进的换乘算法,相比原有的算法,改进后的算法功能更强,效率更优. 1. “压缩”RouteT0 假设RouteT0有以下几行 如下图所示,当查询S1到S4的二次换乘路线时,将会产生3×2×4=24个结果 从图中可以看出,第1段路线中的3条线路的起点和站

基础算法之三——递归法

基础算法之三--递归法"汉诺塔问题" 题目描述 古代有一座汉诺塔,塔内有三个座A.B.C,A座上有n个盘子,盘子大小不等,大的在下,小的在上,如图所示.有一个和尚想把这n个盘子从A座移到C座,但每次只能移动一个盘子,并且在移动过程中,3个座上的盘子始终要保持大盘在下,小盘在上.在移动过程中可以利用B座来放盘子.要求输出移动的步骤. 输入数据 汉诺塔内的盘子个数n.(1<n<64) 输出要求 输出移动的步骤,每行一步,如从A座移动到C座,输出"A->C&quo

图处理算法-Kosaraju&#39;s-算法

1.写了算法课关于有向图的作业. 用c++开辟大数组容易出segment fault,后来改用堆开辟.图的邻接表用了链表表示. long int numVertexes = 875714; long int numEdges; VertexNode* adjList = new VertexNode[875714]; 2.关于图的存储,用了邻接链表存储(用链表比vector数组存储速度快多了). 2.1 边表 /********边表***********/ class EdgeNode { pu