首页 > 解决方案 > Scipy curve_fit 卡在边界上?

问题描述

(这与其说是一个技术性的操作问题,不如说是试图了解幕后发生的事情以及我遇到的问题是否是一个常见问题。请不要标记我!)

我一直在运行一些非线性回归,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% 的时间会卡在边界上,这两者都不是我所期望的。

我发现这个答案似乎curve_fit有时表现得很奇怪,所以我想知道 - 优化器curve_fit卡在边界上是否很常见?这是一个已知问题吗?是否有任何好的方法可以通过调整任何设置或其他解决方法来解决它?

标签: pythonoptimizationscipyscipy-optimize

解决方案


推荐阅读