gpt4 book ai didi

python - scipy.optimize.basinhopping 中基于 Levenberg-Marquardt 的自定义最小化器

转载 作者:太空宇宙 更新时间:2023-11-03 17:39:50 33 4
gpt4 key购买 nike

我在最小化 python 中的复杂非线性函数时遇到了麻烦。该函数实际上是用于拟合实验数据的拟合模型的卡方。为了获得全局最小值,我使用 scipy 中的 basshopping 函数。该函数是 minimum() 函数的包装,它添加一些扰动来寻找不同的局部最小值。现在我的问题是很难找到局部最小值。

有很多求解器可以在最小化()中使用,因为我使用的是边界,所以我在“L-BFGS-B”、“SLSQP”和“TNC”之间进行选择。他们都没有真正找到局部最小值。是否有一种基于流行的 Levenberg-Marquardt 算法的方法可用于最小化?也许这没有意义,否则它已经实现了,但我不明白为什么。

我最初的想法实际上是使用我知道的 lesssqbound 函数( https://pypi.python.org/pypi/leastsqbound ),它非常擅长提供准确的协方差矩阵,而不管边界如何,并将其包含在一个更大的算法中,该算法会寻找全局最小值(例如 basshopping功能)。你知道这样的东西是否已经存在吗?

非常感谢您的建议!

最佳答案

Scipy 有一个 Levenberg-Marquardt 实现:scipy.optimize.leastsq。它没有与 minimize 一起使用的正确返回类型(因此 basin_hopping)。然而,这似乎可以相当简单地解决。

虽然我还没有运行它,但这应该可以解决问题:

def leastsq_for_minimize( *args, **kwargs ):
results = leastsq( *args, **kwargs )
optimize_results = scipy.optimize.OptimizeResult()
# Some code here to correctly copy results to optimize results
return optimize_results

scipy.optimize.basinhopping(
# your arguments here
minimizer_kwargs=dict(method=leastsq_for_minimize),
)

关于python - scipy.optimize.basinhopping 中基于 Levenberg-Marquardt 的自定义最小化器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30727043/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com