关于用梯度下降或遗传算法拟合公式的基本问题。

问题描述 投票:0回答:1

我一直在尝试对以下问题进行编码。我已经定义了一个函数,取决于一些参数(在我的例子中,布拉格镜和X射线束的参数)。现在,我试图将结果与另一个程序使用相同公式建模的结果进行比较,但似乎我的一些参数不对,所以结果是 异曲同工.

如果我想找出正确的参数,我应该怎么做?我只有公式f (x1, x2,...),我比较结果的实验曲线,以及一些参数的概念(x1 +- dx1, x2 +- dx2,...)。

我用什么来最小化残差?我知道 多用途 使用 莱文伯格-马夸特算法我读到过关于这一点是可能的,与一个 遗传算法 或随机梯度下降(虽然据我所知,这些更多的是用于神经网络的任务)。我遇到了一些麻烦,不知道应该编写什么代码和如何编写代码:函数需要几分钟的时间来计算,所以遗传算法可能不是很理想,我承认我有点搞不清楚 我所知道的SCG可以在Python中实现。.

在我的简单案例中,你会建议我使用什么?如果除了使用GA模块外,还有其他的算法要实现,是否有明确的masic解释?我问这个问题的地方对吗?先谢谢你了。

python curve-fitting genetic-algorithm gradient-descent
1个回答
0
投票

我不熟悉GA,也不熟悉在神经网络以外的任何地方使用SGD。但是,看起来当 reflected energy 在Y轴下方 10^-4 配件难以胜任其工作。只是一些想法。

  1. 观察一下在梯度上发生了什么,在值为 y < 10^-4. 函数暴跌时是否会消失?它是否会返回奇怪的值?
  2. 检查 适宜蝈蝈的 优化器和拟合器,如果你还没有这样做。
  3. 检查你的函数是否在函数骤降或下降到小y值时返回NaN值。

0
投票

我同意sbjartmar提出的观点,但我怀疑有一个更简单的解释,可以解释两者之间的差异,以及走向修复你所得到的拟合的路线。 我应该说我不熟悉Multifitting软件,但我怀疑它正在做一些你没有做的事情,也应该尝试一下。

因为你是在对数尺度上绘制的 你强调的是非常低的强度值。 事实上,对高强度值的拟合非常好,而对低强度值的拟合则逐渐变差。 这是可以理解的--在高强度的情况下,小的拟合度对总拟合度的贡献要比在极低强度下的大拟合度大得多。

解决这个问题的一个好方法是 凑合. 也就是说,让你的模型计算出 log(Intensity) 并传入数据 log(Intensity).

这与用于解决问题的方法无关--它重铸了要解决的问题。 遗传算法在这里可能是有用的,但如果Levenberg-Marquardt(会快得多)像你展示的那样工作得很好,它可能已经足够好了,或者至少值得继续使用。 GAs通常能更好地确保解决方案不会卡在 "局部最小值 "中。 到目前为止,还没有证据表明这种情况会发生(但这总是要记住的)。 我认为你指出的那个SGD方法旨在解决不同类别的问题。

© www.soinside.com 2019 - 2024. All rights reserved.