7. 模型训练与评估

这里,我们将使用合适的机器学习或时间序列预测模型,训练模型,评估模型性能,并进行超参数调优。我们选用 SARIMA 模型进行时间序列预测,因为它适合处理季节性和趋势性的数据。

7.1 模型训练

模型选择:SARIMA

首先,我们需要对 LandAverageTemperature 或 LandAndOceanAverageTemperature 数据进行训练,使用 statsmodels 库中的 SARIMAX 模型来进行拟合。

from statsmodels.tsa.statespace.sarimax import SARIMAX

# 选择训练数据:以 'LandAverageTemperature' 为例
train_data = data_features['LandAverageTemperature']

# 创建并训练 SARIMA 模型
model = SARIMAX(train_data, 
                order=(1, 1, 1),  # ARIMA 部分的参数 (p, d, q)
                seasonal_order=(1, 1, 1, 12),  # 季节性部分的参数 (P, D, Q, s)
                enforce_stationarity=False,
                enforce_invertibility=False)

sarima_result = model.fit()

# 输出模型结果
print(sarima_result.summary())

7.2 模型评估

使用训练数据进行预测

我们使用训练数据来预测未来的值,并通过与实际值进行比较来评估模型的表现。

# 使用训练数据进行预测
pred_train = sarima_result.predict(start=0, end=len(train_data)-1)

# 可视化训练数据与预测值
plt.figure(figsize=(10, 6))
plt.plot(train_data, label='Actual Land Average Temperature', color='blue')
plt.plot(pred_train, label='Predicted Land Average Temperature', color='red', linestyle='--')
plt.title('Land Average Temperature: Actual vs Predicted (Training Data)', fontsize=16)
plt.xlabel('Time', fontsize=12)
plt.ylabel('Temperature (°C)', fontsize=12)
plt.legend()
plt.show()
图片[1]-7. 模型训练与评估-大赛人网

评估模型性能

我们使用 Mean Absolute Error (MAE) 和Root Mean Squared Error (RMSE) 来评估模型的预测性能。

from sklearn.metrics import mean_absolute_error, mean_squared_error
import numpy as np

# 计算 MAE 和 RMSE
mae = mean_absolute_error(train_data, pred_train)
rmse = np.sqrt(mean_squared_error(train_data, pred_train))

print(f'Mean Absolute Error (MAE): {mae}')
print(f'Root Mean Squared Error (RMSE): {rmse}')
  • MAE:衡量预测值与实际值之间的平均绝对误差。
  • RMSE:衡量预测值与实际值之间的均方根误差,能更好地反映大误差的影响。

预测未来值

接下来,我们使用训练好的模型来预测未来的气温变化

# 预测未来 10 年的数据(120个月)
forecast_steps = 120
forecast = sarima_result.get_forecast(steps=forecast_steps)

# 获取预测的均值和置信区间
forecast_mean = forecast.predicted_mean
forecast_conf_int = forecast.conf_int()

# 为预测结果创建连续的日期索引
forecast_index = pd.date_range(start=train_series.index[-1] + pd.DateOffset(months=1),
                               periods=forecast_steps, freq='MS')

# 可视化未来预测
plt.figure(figsize=(10, 6))
plt.plot(train_series.index, train_series, label='Actual Land Average Temperature', color='blue')
plt.plot(forecast_index, forecast_mean, label='Forecasted Land Average Temperature', color='green', linestyle='--')
plt.fill_between(forecast_index, forecast_conf_int.iloc[:, 0], forecast_conf_int.iloc[:, 1],
                 color='green', alpha=0.2)
plt.title('Land Average Temperature: Forecasted vs Actual', fontsize=16)
plt.xlabel('Time', fontsize=12)
plt.ylabel('Temperature (°C)', fontsize=12)
plt.legend()
plt.show()
图片[2]-7. 模型训练与评估-大赛人网

7.3 模型优化:超参数调优

网格搜索优化 SARIMA 超参数

我们使用 GridSearchCV 来搜索最佳的 SARIMA 模型超参数。通过调节p, d, q 和季节性部分的P, D, Q, s,找到最佳的模型。

from pmdarima import auto_arima

# 使用 auto_arima 自动选择最佳模型
auto_model = auto_arima(train_series, seasonal=True, m=12, trace=True, suppress_warnings=True)
print(auto_model.summary())

# 使用最佳模型进行预测
forecast_auto = auto_model.predict(n_periods=forecast_steps)

# 可视化优化后的预测结果
plt.figure(figsize=(10, 6))
plt.plot(train_series.index, train_series, label='Actual Land Average Temperature', color='blue')
plt.plot(forecast_index, forecast_auto, label='Optimized Forecasted Land Average Temperature', color='orange', linestyle='--')
plt.title('Optimized Forecasted Land Average Temperature', fontsize=16)
plt.xlabel('Time', fontsize=12)
plt.ylabel('Temperature (°C)', fontsize=12)
plt.legend()
plt.show()
图片[3]-7. 模型训练与评估-大赛人网

结果对比

比较优化后的模型与之前模型的预测结果,看看优化后的模型是否带来了更好的预测效果。

# 可视化对比优化前后预测结果
plt.figure(figsize=(10, 6))
plt.plot(train_series.index, train_series, label='Actual Land Average Temperature', color='blue')
plt.plot(forecast_index, forecast_mean, label='Forecasted (SARIMA)', color='green', linestyle='--')
plt.plot(forecast_index, forecast_auto, label='Optimized (auto_arima)', color='orange', linestyle='--')
plt.title('Comparison of Forecasted Land Average Temperature', fontsize=16)
plt.xlabel('Time', fontsize=12)
plt.ylabel('Temperature (°C)', fontsize=12)
plt.legend()
plt.show()
图片[4]-7. 模型训练与评估-大赛人网

7.4 小结

  1. 模型训练:我们使用 SARIMA 模型进行训练,捕捉数据的趋势和季节性。
  2. 模型评估:使用 MAE 和 RMSE 作为评估指标,检查模型在训练数据上的表现。
  3. 模型优化:通过自动选择最佳超参数,进一步优化模型性能。
  4. 可视化:通过精美的图表展示训练数据与预测数据的对比,以及未来预测结果。
© 版权声明
THE END
喜欢就支持一下吧
点赞6 分享
评论 抢沙发
头像-大赛人网
欢迎您留下宝贵的见解!
提交
头像-大赛人网

昵称

取消
昵称

    请登录后查看评论内容