1

我正在尝试使用 scipy 优化 4 维函数。到目前为止一切正常,除了我对解决方案的质量不满意。现在我有地面实况数据,我用它来验证我的代码。到目前为止,我得到的是:

End error:  1.52606896507e-05
End Gradient:  [ -1.17291295e-05   2.60362493e-05   5.15347856e-06  -2.72388430e-05]

Ground Truth:   [0.07999999..., 0.0178329..., 0.9372903878..., 1.7756283966...]
Reconstructed:  [ 0.08375729  0.01226504  1.13730592  0.21389899]

错误本身听起来不错,但由于值完全错误,我想强制优化算法(BFGS)执行更多步骤。

在文档中,我找到了“gtol”和“norm”选项,并尝试将它们都设置为非常小的值(如 0.0000001),但它似乎没有改变任何东西。

背景:问题是,我试图解调波,所以我有 sin 和 cos 项,并且可能有许多局部(或全局)最小值。我使用蛮力搜索来找到一个好的起点,女巫帮了很多忙,但目前似乎大部分工作都是由蛮力搜索完成的,因为优化通常只使用一个迭代步骤。所以我试图以某种方式改进计算的那部分。

4

2 回答 2

4

许多局部最小值+在蛮力搜索后几乎没有任何改善,这听起来很糟糕。很难说您在问题中提供的详细程度非常具体,所以这里有一些模糊的想法可以尝试(基本上,如果我怀疑我的最小化器卡住了我会怎么做):

  • 尝试从一堆不同的初始猜测中手动启动最小化器。
  • 尝试使用随机最小化器。您正在标记一个问题scipy,所以请尝试basinhopping
  • 如果最坏的情况出现在最坏的情况下,只需将随机点放入一个循环中,让它在午休时间(或通宵)工作

此外,波、正弦和余弦——如果您可以在傅立叶空间中重新表述您的问题,这可能会很有用。

于 2013-09-17T22:34:59.850 回答
2

我发现起点的梯度已经很平坦(值在 10^-5 中),所以我尝试缩放我已经提供的梯度函数。这似乎非常有效,我可以强制算法执行更多步骤,我的结果现在要好得多。虽然它们并不完美,但是对此问题的完整讨论超出了这个问题的范围,所以我可能会开始一个新的讨论,从下到上描述整个问题。

于 2013-09-18T17:40:16.163 回答