Все в порядке, я понял, что пошло не так. Было 2 проблемы, и я объясню, что случилось. Оригинальный DataFrame CO2 имеет несколько временных столбцов. Когда я пересекал время, я должен был использовать колонку «время», а не «годы». В DF «время» состоит из дробных лет. Для x_val я должен был минус co2_train ['year']. Значения, чтобы получить правильный срок. С данными CO2 и соответствующими столбцами - «Год» (год CE) и «CO2» (в PPM). Данные варьируются с 1959 по 2024 год, и это мои наблюдаемые данные. Я разделил данные на два раздела и помещаю данные 1959–2004 гг. ранее. Однако, когда я планирую прогнозируемые данные по наблюдаемым данным, я получаю прямые линии для прогнозируемых данных, когда ожидал синусных кривых (см. Картинки, чтобы увидеть, что я имею в виду) < /p>
Это мое Код < /p>
# Build model based on equation
def co2_model(x, a, b, A, phi, c):
# Model containing linear, quadratic and sinusoidal component
return (a*x) + (b*(x**2)) + (A*np.sin((2*np.pi*x)+ phi)) + c
x = (co2['time']).values - co2['time'].values[0]
y = co2['co2'].values
# Split data into training and validation periods
co2_train = co2[co2['year'] 2004]
# Rescaling time periods and specifying dependent variable
x_train = co2_train['year'].values - co2_train['year'].values[0]
y_train = co2_train['co2'].values
x_val = co2_val['year'].values - co2_val['year'].values[0]
y_val = co2_val['co2'].values
# Fit the co2 model to the training data
params_train, covar_train = curve_fit(co2_model, x_train, y_train)
a, b, A, phi, c = params_train # Extract fitted parameters
#Calculate predicted values for the training and validation data
y_train_predict = co2_model(x_train, a, b, A, phi, c)
y_val_predict = co2_model(x_val, a, b, A, phi, c)
# Plot the original data with the predictions
plt.figure(figsize=(15, 6))
plt.scatter(x, y, color='grey', label='Observed temperature', alpha=0.5)
# Plot the training period predictions
plt.plot(x_train, y_train_predict, label='Training Period', color='blue', linestyle='--')
# Plot the validation period predictions
plt.plot(x_val, y_val_predict, label='Validation Period', color='red', linestyle='--')
plt.xlabel('Year (CE)')
plt.ylabel('CO$_2$ (ppm)')
# Show the plot
plt.show()
< /code>
Это то, что я получаю
график, который я получаю < /p>
Но я ожидал чего-то похожего, кроме половины красного и красного и Другая синяя кривая
Пожалуйста, дайте мне знать, если я просто совершаю глупую ошибку
Подробнее здесь: https://stackoverflow.com/questions/794 ... -a-non-lin
Попытка создать прогнозируемые кривые CO2 с использованием наблюдаемых данных и использования нелинейного уравнения, но ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Не найдено решение для простого нелинейного моделирования с использованием Gekko.
Anonymous » » в форуме Python - 0 Ответы
- 12 Просмотры
-
Последнее сообщение Anonymous
-