繁体   English   中英

Scipy 优化curve_fit怪异行为

[英]Scipy optimize curve_fit weird behavior

我想将指数曲线拟合到数据点,但由于某种原因,我从 scipy 的 function curve_fit 得到了奇怪的结果。 这是我的代码:

from scipy.optimize import curve_fit
def f(x,lambda_):
    return 100*((1 - np.exp(-lambda_*np.array(x)))) 

x=[18.75, 30.75]
y=[48.69, 49.11]
lambda_ = curve_fit(f, x, y)[0]
plt.scatter(x, y, color='black')
xx=np.linspace(0, 40)
yy = f(xx, lambda_)
plt.plot(xx,yy)

导致这个 plot:

图片

虽然显然不是 lambda 可以最大限度地减少二次误差。 有谁知道为什么?

感谢帮助

它与curve_fit中的起点p0相关,默认设置为 1。

设置p0=[-0.6]可以找到更好的解决方案。

找到良好起点的一种简单方法是通过数字扫描,例如:

n_trials = 100

err_best = np.inf
lambda_best_ = None
p0_best = None
for _ in range(n_trials):
    p0 = np.random.default_rng().uniform(-10, 10)
    try:
        lambda_ = curve_fit(f, x, y, p0=[p0])[0]
        err = ((f(x, lambda_) - y)**2).sum()
        #print(err, lambda_)
        if err < err_best:
            err_best = err
            lambda_best_ = lambda_
            p0_best = p0
    except Exception:
        pass

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM