RuntimeError:未找到最佳参数:函数调用数已达到maxfev=600

2024-09-30 20:35:24 发布

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

这是代码的一部分,但不起作用,原因可能是什么

population = float(46750238)
country_df = pd.DataFrame()
country_df['ConfirmedCases'] = train.loc[train['Country_Region']=='Spain'].ConfirmedCases.diff().fillna(0)
country_df = country_df[10:]
country_df['day_count'] = list(range(1,len(country_df)+1))
 
ydata = [i for i in country_df.ConfirmedCases]
xdata = country_df.day_count
ydata = np.array(ydata, dtype=float)
xdata = np.array(xdata, dtype=float)
 
N = population
inf0 = ydata[0]
sus0 = N - inf0
rec0 = 0.0
 
def sir_model(y, x, beta, gamma):
    sus = -beta * y[0] * y[1] / N
    rec = gamma * y[1]
    inf = -(sus + rec)
    return sus, inf, rec
 
def fit_odeint(x, beta, gamma):
    return integrate.odeint(sir_model, (sus0, inf0, rec0), x, args=(beta, gamma))[:,1]
 
popt, pcov = optimize.curve_fit(fit_odeint, xdata, ydata)
fitted = fit_odeint(xdata, *popt)
 
plt.plot(xdata, ydata, 'o')
plt.plot(xdata, fitted)
plt.title("Fit of SIR model for Spain infected cases")
plt.ylabel("Population infected")
plt.xlabel("Days")
plt.show()
print("Optimal parameters: beta =", popt[0], " and gamma = ", popt[1])

给出一个错误说明:RuntimeError Traceback(最近一次调用last) 在里面 24返回integrate.odeint(sir_模型,(sus0,inf0,rec0),x,args=(beta,gamma))[:,1] 25 ---&燃气轮机;26 popt,pcov=优化曲线拟合(拟合、扩展数据、ydata) 27已安装=安装(扩展数据,*popt) 二十八

C:\ProgramData\Anaconda3\lib\site packages\scipy\optimize\minpack.py曲线拟合(f、扩展数据、ydata、p0、西格玛、绝对西格玛、检查有限、边界、方法、jac、**kwargs) 746成本=总成本(infodict['fvec']**2) 747如果ier不在[1,2,3,4]中: --&燃气轮机;748 raise RUNTIMERROR(“未找到最佳参数:”+errmsg) 749其他: 750#如果指定,将maxfev(leastsq)重命名为max_nfev(最小二乘)

RuntimeError:未找到最佳参数:函数调用数已达到maxfev=600


Tags: dfpltfloatcountrybetafitgammaxdata