Scipy曲线拟合在边界处卡住了?

2024-05-15 01:39:46 发布

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

(与其说这是一个技术性的问题,不如说这是一个试图了解引擎盖下发生了什么以及我遇到的是否是一个常见问题的问题。请不要标记我!)

我已经用scipy.optimize.curve_fit运行了一些非线性回归,并且注意到优化似乎经常卡在参数边界上。就上下文而言,我已经用其他软件做了相当多的非线性优化,尽管我不擅长算法;这是我第一次使用scipy来实现它,它只是。。。比我想象的要困得多

我输入到curve_fit的函数示例-这里tdn是各种数据系列,长度约为100-150:

def dynamic(exogs, alpha_0, delta, theta, beta):
    t, dn = exogs
    alpha_f = alpha_0 * delta
    return np.log(beta) - (alpha_0 + (1 - np.exp(-t/theta)) * (alpha_f - alpha_0)) * dn

non_bds = ([1e-02, 0.1, 5, 0], 
           [1e02, 10, 1e03, 10])

fit_non = curve_fit(dynamic, [df['t'], df['dn']], Y, bounds=non_bds, loss='huber', max_nfev=1e06)

在这种情况下,delta大约90%的时间在边界(0.1或10)处卡住,而theta大约50%的时间在边界处卡住,这两种情况我都没有预料到

我发现this answer在某些地方curve_fit的行为确实很奇怪,所以我想知道curve_fit的优化器在边界上卡住是不是很常见?这是一个已知的问题吗?有没有好的方法可以通过调整任何设置或使用其他解决方法来解决这个问题


Tags: alphadfnpdynamicscipybetafit边界

热门问题