Вот часть кода, но не работает. В чем может быть причина?
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 (последний вызов последним) в 24 return integration.odeint (sir_model, (sus0, inf0, rec0), x, args = (beta, gamma)) [:, 1] 25 ---> 26 popt, pcov = optimize.curve_fit (fit_odeint, xdata, ydata) 27 fit = fit_odeint (xdata, * popt) 28
C: \ ProgramData \ Anaconda3 \ lib \ site-packages \ scipy \ optimize \ minpack.py в curve_fit (f, xdata, ydata, p0, sigma, absolute_sigma, check_finite, bounds, method, ja c, ** kwargs) 746 cost = np.sum (infodict ['fve c'] ** 2) 747, если ier не в [1, 2, 3, 4]: -> 748 поднять RuntimeError ("Оптимальные параметры не найдены:" + errmsg) 749 else: 750 # Переименовать maxfev (leastsq) в max_nfev (less_squares), если указано.
RuntimeError: Оптимальные параметры не найдены: Число вызовов функции достигло maxfev = 600.