scipy curve_fit初始值过小致部分参数无法优化问题求助
Scipy curve_fit线性拟合参数优化异常问题求助
我正在用scipy的curve_fit工具做线性函数拟合时遇到参数优化异常:
- 为适配不同y变量,我将截距初始值设为前20个数据点的均值(x值已做偏移处理,起始值接近0),斜率初始值设为0(因不同变量可能有任意符号关系或无关联)
- 测试发现,当斜率初始值为0时,
curve_fit完全不调整斜率参数,仅通过修改截距拟合数据,导致截距偏离最优值 - 即使将斜率初始值改为极小非零值(如0.001、0.01),上述现象仍会出现,同时还会抛出“无法估计参数协方差”的警告
已排除数据类型问题:所有数据均为float64类型,排除了已知的类型相关问题。
以下是可复现问题的代码(使用scipy 1.11.3版本):
import numpy as np from scipy.optimize import curve_fit import matplotlib.pyplot as plt import pickle def fit1(x, alpha, beta_t): yhat = alpha + beta_t*x return yhat with open('example_data.pkl', 'rb') as handle: xs, ys = pickle.load(handle) plt.plot(xs, ys, color='blue') for guess in [0, 0.001, 0.01, 0.1, 1, 10]: init_guess = np.zeros(2) init_guess[0] = np.mean(ys[:20]) init_guess[1] = guess params, _ = curve_fit(fit1, xs, ys, p0=init_guess) plt.plot(xs, fit1(xs, *params), label=f'init_guess[1] = {init_guess[1]}') plt.legend()
拟合结果如下:
恳请帮忙分析问题原因!
内容的提问来源于stack exchange,提问作者chrisdwells
相关产品推荐
相关产品推荐

