基于LevenbergMarquardt的自定义最小化scipy.optimize.basinhopping公司

2024-10-08 23:28:40 发布

您现在位置:Python中文网/ 问答频道 /正文

在python中,我很难最小化一个复杂的非线性函数。这个函数实际上是用来拟合实验数据的拟合模型的chiSquare。为了得到全局最小值,我使用了scipy中的basinhopping函数。此函数是minimize()函数的包装器,该函数添加了一些扰动以查找不同的局部极小值。现在我的问题是找到局部极小值有困难。在

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

我最初的想法是使用leastsqbound函数(https://pypi.python.org/pypi/leastsqbound),我知道这个函数很擅长提供精确的协方差矩阵,并且将其包含在一个更大的算法中,该算法将寻找全局最小值(如basinhopping函数)。你知道这样的事情是否已经存在吗?在

非常感谢你的建议!在


Tags: 数据函数模型pypi算法局部scipy全局
1条回答
网友
1楼 · 发布于 2024-10-08 23:28:40

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),
    )

相关问题 更多 >

    热门问题