使用风暴图像进行天气预测 3 :超参数调整和内核测试

55 阅读5分钟

高斯过程回归:拟合和预测

gp1.fit(X_train, y_train) 
GaussianProcessRegressor(alpha= 0.01 , 
kernel=WhiteKernel(noise_level= 0.09 ) + 1.41 ** 2 * ExpSineSquared(length_scale= 1 , periodicity= 40 ), 
n_restarts_optimizer= 10 , normalize_y= True ) 
# 生成预测. 
y_pred, y_std = gp1.predict(X, return_std= True ) 
data_df[ 'y_pred' ] = y_pred 
data_df[ 'y_std' ] = y_std 
data_df[ 'y_pred_lwr' ] = data_df[ 'y_pred' ] - 2 *data_df['y_std' ] 
data_df[ 'y_pred_upr' ] = data_df[ 'y_pred' ] + 2 *data_df[ 'y_std' ]

生成先验样本后,代码使用 gp1 的 fit() 函数拟合高斯过程。此函数在输入数据上训练高斯过程,以根据指定的内核生成预测。还打印了 GaussianProcessRegressor 对象,其中包含拟合高斯过程的超参数和内核。

拟合高斯过程后,代码使用 gp1 的 predict() 函数生成对整个数据集的预测。此函数返回高斯过程的预测平均值和标准差。预测均值存储在 data_df 的 y_pred 列中,标准差值存储在 y_std 列中。该代码还通过分别从预测均值加上和减去标准差的两倍来计算预测值的上限和下限。这些边界存储在 data_df 的 y_pred_lwr 和 y_pred_upr 列中。

绘制高斯过程回归模型的预测

此代码块正在生成高斯过程回归模型所做的预测图。该图包含代表不同变量的三条线。第一行是由变量 y1 表示的实际数据。第二行表示 GP 模型生成的预测值,标记为 y_pred。最后,上限和下限之间的阴影区域表示预测的 95% 可信区间。 image.png

为了生成可信区间,代码使用 Matplotlib 的“fill_between”方法来填充上下限之间的空间。这些边界是使用预测值及其标准差计算的,这些值由 GP 模型的“预测”方法返回。

该代码还在与训练数据末尾对应的索引处包含一条垂直线。此行将训练数据和测试数据分开,这些数据根据设置为 0.7 的“prop_train”参数进行拆分。总体而言,此代码块生成 GP 模型在给定数据集上的性能的可视化表示。它显示了模型的预测与实际数据的匹配程度,并提供了对这些预测中不确定性的估计。

超参数

在这段代码中,我们对高斯过程 (GP) 回归模型进行了超参数调整。我们使用 sklearn.gaussian_process.kernels 模块中的 WhiteKernel、ConstantKernel 和 ExpSineSquared 类定义了 GP 内核。我们为每个内核指定了超参数,并将它们组合起来创建一个复合内核。调整的超参数是 noise_level、constant_value、length_scale 和 periodicity。

我们还使用了 sklearn.gaussian_process 模块中的 GaussianProcessRegressor 类来使 GP 模型适合数据。我们指定了优化器重新启动的次数 n_restarts_optimizer 以及应用于目标值的规范化级别 normalize_y。最后,我们生成预测并计算预测值的标准差以获得可信区间。

GPR 模型的超参数是内核参数。

内核是衡量特征空间中两个输入点之间相似性的函数。在此代码中,内核被定义为两个内核的组合,即白色内核和指数正弦平方内核,它们相加在一起。White Kernel 负责对数据中的噪声进行建模。它有一个超参数 noise_level,它控制数据中的噪声量。此超参数初始化为 0.3²,并在 0.1² 和 0.5² 之间。

指数正弦平方核负责对数据的周期性建模。它有两个超参数,length_scale 和 periodicity。length_scale 参数控制内核的平滑度,而 periodicity 参数控制周期分量的频率。在此代码中,length_scale 参数初始化为 1.0,periodicity 参数初始化为 40,边界为 35 和 45。

除了内核超参数外,GPR 模型还有一个正则化超参数 alpha,它控制目标变量中噪声的大小。在这段代码中,alpha 参数被初始化为 0.0,这意味着没有应用正则化。

该模型在 70% 的数据上进行训练,总共有 70257 个数据点。前2500个数据点作为训练集,剩下的100个数据点作为测试集。GPR 模型使用 fit 方法拟合训练数据,使用 predict 方法为测试数据生成预测。

最后,模型预测与可信区间一起绘制,可信区间是预测中不确定性的度量。可信区间定义为高于和低于平均预测值的两个标准差。

失败的内核

image.png

对于 white kerner 和 constant kernel,MAE 误差太低,而且 R2 分数非常高。然而,一般来说,RBF 内核可能不适用于具有不连续性或数据急剧变化的数据集,因为它倾向于平滑这些特征。类似地,点积内核可能不适用于输入特征和输出之间具有非线性关系的数据集,因为它假设线性关系。

关于核函数中使用的参数,重要的是要根据数据的特性选择合适的值。例如,RBF 核中的长度尺度参数控制着函数的平滑度,因此如果数据非常嘈杂,较大的长度尺度可能是合适的。白噪声核中的噪声水平参数控制数据中的噪声量,应根据测量误差的方差进行设置。点积核中的周期性参数控制输入特征与输出特征之间线性关系的周期,应根据数据的周期性进行设置。在此代码中为这些参数选择的具体值基于实验,可能并非对所有数据集都是最佳的。

image.png

结论

总之,风暴风的卫星图像和风速图为监测和预报恶劣天气提供了有价值的信息。暴风数据集是一组卫星图像,捕捉风暴的不同阶段,包括风暴的形成、增强和消散,并提供对风暴结构、运动和强度的洞察。该数据集主要由气象学家和气候学家用来研究风暴系统的动态、改进天气预报以及开发更好的模型来预测风暴行为。Python 脚本使用各种库并执行与数据分析、机器学习和可视化相关的操作,以构建高斯过程回归模型。通过密切监测天气模式和使用数据集,我们可以更好地为恶劣天气事件做准备并减轻它们对我们社区的潜在影响。该数据集的可用性为气象学领域的重大进步做出了贡献,对于增进我们对地球气候系统的了解至关重要。