【问题标题】:How to improve Levenberg-Marquardt's method for polynomial curve fitting?如何改进 Levenberg-Marquardt 的多项式曲线拟合方法?
【发布时间】:2020-09-25 14:57:44
【问题描述】:

几周前,我开始在 Matlab 中从头开始编写 Levenberg-Marquardt 算法。我对数据的多项式拟合很感兴趣,但我无法达到我想要的准确度。在我尝试了其他多项式之后,我使用了五阶多项式,这似乎是最好的选择。无论我尝试实施什么改进,该算法总是收敛到相同的函数最小化。到目前为止,我没有成功添加以下功能:

  • 测地线加速度项作为二阶校正
  • 更新阻尼参数的延迟满足
  • 接近高斯-牛顿方向的增益因子或 取决于迭代的最陡下降方向。
  • 有限差分法的中心差分和正差分

我没有非线性最小二乘的经验,所以我不知道是否有办法进一步最小化残差,或者这种方法是否没有更多改进空间。我在下面附上最后一次迭代的多项式行为的图像。如果我运行代码进行更多迭代,则曲线最终不会在迭代之间发生变化。据观察,从时间 = 0 到时间 = 12 非常适合。但我无法修复从时间 = 12 到时间 = 20 的函数行为。非常感谢任何帮助。

【问题讨论】:

  • 有代码可以分享吗?您对此方法使用的参考是什么?
  • 发布您的代码会有所帮助;否则,我们看不到发生了什么。
  • 据我所知,多项式拟合是一个线性问题,Levenberg-Marquardt 是矫枉过正。

标签: machine-learning regression numerical-methods non-linear-regression levenberg-marquardt


【解决方案1】:

拟合多项式似乎不是最好的主意。您的数据集看起来像一个指数瞬态,具有水平渐近线。强制一个多项式的效果会很差。

我宁愿尝试一个简单的模型,例如

A (1 - e^(-at)).

用肉眼,A ~ 15。你应该看看log(15 - y).的值

【讨论】:

  • 我尝试了一些指数函数,但它们似乎非常不稳定。如果初始条件不是非常接近精确解,则残差会在几次迭代后爆炸。
  • @Toni:你应该看看log(15 - y) 的值。不要过早下结论。放弃多项式模型。你也可以试试有理分数。
  • 查看 log(15-y) 的值是什么意思。您是否参考了经典的对数转换以将数据拟合到最小二乘的指数模型?
  • @toni:取数据点的纵坐标,然后从整数 15 中减去它们。然后取对数(任何底数)并观察曲线的形状。您可能有一些没有对数的负值;暂时忽略它们。
猜你喜欢
  • 1970-01-01
  • 2018-02-16
  • 2017-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-05
  • 2013-07-28
相关资源
最近更新 更多