这里,我们将使用合适的机器学习或时间序列预测模型,训练模型,评估模型性能,并进行超参数调优。我们选用 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. 模型训练与评估-大赛人网](https://www.dsrw.com/wp-content/uploads/2026/10/image-247.png)
评估模型性能
我们使用 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. 模型训练与评估-大赛人网](https://www.dsrw.com/wp-content/uploads/2026/10/image-248.png)
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. 模型训练与评估-大赛人网](https://www.dsrw.com/wp-content/uploads/2026/10/image-249.png)
结果对比
比较优化后的模型与之前模型的预测结果,看看优化后的模型是否带来了更好的预测效果。
# 可视化对比优化前后预测结果
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. 模型训练与评估-大赛人网](https://www.dsrw.com/wp-content/uploads/2026/10/image-250.png)
7.4 小结
- 模型训练:我们使用 SARIMA 模型进行训练,捕捉数据的趋势和季节性。
- 模型评估:使用 MAE 和 RMSE 作为评估指标,检查模型在训练数据上的表现。
- 模型优化:通过自动选择最佳超参数,进一步优化模型性能。
- 可视化:通过精美的图表展示训练数据与预测数据的对比,以及未来预测结果。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END













请登录后查看评论内容