【问题标题】:Initial guess and resnorm Issue in Matlab curve fittingMatlab曲线拟合中的初始猜测和重新规范问题
【发布时间】:2018-04-10 10:17:19
【问题描述】:

我正在将数据拟合到非线性 ODE 系统,以使用 Matlab lsqcurvefit 估计模型参数。
在这个拟合中,拟合很大程度上取决于我用于 lsqcurvefit 的初始猜测。
例如,如果我使用x0=5 作为初始猜测,我将得到 30 的残差范数,而如果我选择 x0=5.2,我得到的残差范数为 1.5。
1) Matlab 中的残差范数 (resnorm) 代表什么?它是平方误差的总和吗?有没有办法决定resnorm 的值范围是可以接受的。

2) 当拟合很大程度上取决于初始猜测时,有没有办法处理这些问题?我怎么知道是否可以从不同的初始猜测中获得更好的拟合?

3)在使用lsqcurvefit时需要检查残差是否正态分布?

【问题讨论】:

  • 第一个问题:resnorm 确实是sum((y_measured-y_calculated).^2)。因此 resnorm 本身并不是很有用,您可以将 resorm 除以测量点的数量以获得平均误差。在我看来,resnorm 没有好坏之分,这完全取决于所需的精度。

标签: matlab curve-fitting differential-equations estimation non-linear-regression


【解决方案1】:

lsqcurvefit 以最小二乘的方式拟合您的数据。因此,这一切都归结为最小化,并且由于您的数据是非线性的,因此您无法保证这是全局最小值,也不能保证它是唯一的。

例如考虑函数 sin(x),它的 x 值最小化了这个函数,所有的 x=2*pi*n + 3/2*pi for n=0,1,2,... 但是你的数值方法只能返回一种解决方案,这将取决于您最初的猜测。

进一步阐述问题。最简单的(在我看来)最小化算法被称为最速下降。它使用了从微积分中知道的想法,即最陡的下降方向是负梯度。因此,它发现建议点中的梯度在负方向上迈出了一步(按某个步长缩放)并继续这样做,直到步长/导数非常小。

然而,即使你考虑从 0.5 到无穷大的函数 cos(3 pi x)/x,它在 1 中确实有一个唯一的全局最小值,你也只有在你的猜测介于 0.7 和 1.3 之间(或左右)时才能找到它)。所有其他猜测都会找到它们各自的局部最小值。

有了这个,我们可以回答你的问题:

1) resnorm 是残差的 2 范数。可以接受特定规范意味着什么?该算法正在寻找最小值,如果您已经在最小值,继续搜索意味着什么?

2) 不是(伪)精确意义上的。通常所做的是利用您的知识提出一个合理的初步猜测。如果这不可能,您只需反复进行随机初始猜测,然后保持最佳状态。

3)取决于你想做什么,如果你想进行统计测试,这取决于正态分布的残差,那么是的。如果您只对拟合具有最低残差范数的函数感兴趣,那么没有。

【讨论】:

  • 我使用遗传算法差分进化来确定初始参数估计值,与纯粹的随机猜测相比,我发现了很好的结果。
  • @JamesPhillips 谢谢。你有什么参考资料可以用来学习微分进化
  • 我不使用 matlab,但是 google 搜索发现了 matlab 源代码、matlab 示例等。
  • @JamesPhillips 当然可以。使用您的知识提出初始条件通常比随机猜测要好。但它仍然不能保证一个独特的解决方案,也不能保证它是最好的。
  • 同意。据我所知,还没有发现任何非线性优化技术可以产生这样一个有保证的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
  • 2021-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多