Python 使用非常大或非常小的数字时,scipy.optimize.fmin_slsqp存在问题

Python 使用非常大或非常小的数字时,scipy.optimize.fmin_slsqp存在问题,python,scipy,histogram,gaussian,least-squares,Python,Scipy,Histogram,Gaussian,Least Squares,是否有人只在使用非常大或非常小的数字时遇到过fmin_slsqp(或scipy.optimize中的任何其他内容)问题 我正在编写一些python代码,以获取灰度图像和遮罩,生成直方图,然后将多个高斯值拟合到直方图。为了开发代码,我使用了一个小样本图像,经过一些工作,代码运行得非常出色。然而,当我首先规范化直方图时,生成bin值当基础数据发生显著变化时,您是否在更新初始猜测(“x0”)呢?对于任何迭代线性优化问题,如果您的初始猜测与您试图拟合的数据相去甚远,就会出现这些问题。这更像是一个优化问题

是否有人只在使用非常大或非常小的数字时遇到过fmin_slsqp(或scipy.optimize中的任何其他内容)问题


我正在编写一些python代码,以获取灰度图像和遮罩,生成直方图,然后将多个高斯值拟合到直方图。为了开发代码,我使用了一个小样本图像,经过一些工作,代码运行得非常出色。然而,当我首先规范化直方图时,生成bin值当基础数据发生显著变化时,您是否在更新初始猜测(“x0”)呢?对于任何迭代线性优化问题,如果您的初始猜测与您试图拟合的数据相去甚远,就会出现这些问题。这更像是一个优化问题,而不是一个小问题。

我也有过类似的优化问题。我需要处理的数据通常非常小,如1e-18之类,我注意到在这些情况下,leastsq不会收敛到最佳拟合参数。只有当我将数据扩展到更常见的范围(比如成百上千等,可以用整数保持分辨率和动态范围)时,我才能让leastsq收敛到非常合理的范围

我一直在尝试使用这些可选的公差参数,这样我就不必在优化之前缩放数据,但在这方面运气不太好


是否有人知道一个好的通用方法来避免scipy.optimize包中的函数出现此问题?我很感激你能和我分享。。。我认为OP的根本问题是相同的。

我也遇到了这个问题,但我在我的项目中解决了它。我不确定这是否是一个普遍的解决方案

原因是当参数
jac
设置为
False
或default时,
scipy.optimize.fmin_slsqp
通过近似方法计算梯度。近似方法产生的梯度未标准化(大规模)。在计算步长时,较大的梯度值会影响线搜索的性能和精度。这可能就是为什么我们得到了线搜索的正方向导数的原因

您可以尝试将雅可比矩阵的闭合形式实现到目标函数,并将其传递到
jac
参数。更重要的是,应该重新缩放雅可比矩阵的值(如归一化),以避免影响线搜索

最好的