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

use*_*538 5 python gaussian histogram scipy least-squares

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

我正在研究一些python代码来拍摄灰度图像和蒙版,生成直方图,然后将多个高斯拟合到直方图.为了开发代码,我使用了一个小样本图像,经过一些工作后,代码运行得非常出色.但是,当我首先对直方图进行标准化,生成bin值<< 1时,或者当我对巨大的图像进行直方图编码时,生成数十万的bin值,fmin_slsqp()会偶尔失败.它仅在约5次迭代后退出,通常只返回我给它的初始猜测的略微修改版本,并返回退出模式8,这意味着"linesearch的正方向导数".如果我在开始时检查bin计数的大小并将它们缩放到~100-1000附近,fmin_slsqp()将照常工作.我只是在返回结果之前取消缩放.我想我可以这样离开,但感觉就像一个黑客.

我环顾四周,发现人们在谈论epsilon值,这基本上是用于近似衍生物的dx,但调整没有帮助.除此之外我还没有找到任何有用的东西.任何想法将不胜感激.提前致谢.

詹姆士

Tar*_*ato 5

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

我一直在尝试使用这些可选的容差参数,这样我就不需要在优化之前缩放数据,但是没有太多运气...

有没有人知道一个很好的通用方法来避免scipy.optimize包中的函数出现这个问题?我很感激你可以分享......我认为OP的根源是同样的问题.


Car*_* F. 4

当您的基础数据规模急剧变化时,您是否会更新您的初始猜测(“x0”)?对于任何迭代线性优化问题,如果您的初始猜测与您尝试拟合的数据相距甚远,就会出现这些问题。它更像是一个优化问题,而不是一个 scipy 问题。