You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Scikit-learn的Gaussian Process实现时间序列预测并求示例代码

基于scikit-learn高斯过程的时间序列预测示例

高斯过程做时间序列预测的核心逻辑是将时间步(或额外的时序滞后特征)作为模型输入,时序观测值作为拟合目标,以下是可直接运行的概念性实现:


依赖导入

import numpy as np
import matplotlib.pyplot as plt
from sklearn.gaussian_process import GaussianProcessRegressor
from sklearn.gaussian_process.kernels import Matern, WhiteKernel, ExpSineSquared

构造时序数据集

这里用带噪声的正弦波模拟时序,可直接替换为自己的真实数据集

# 生成200个时间步作为输入特征
time_steps = np.linspace(0, 10, 200).reshape(-1, 1)
# 生成带噪声的正弦观测值
y = np.sin(time_steps).ravel() + 0.1 * np.random.randn(len(time_steps))

# 划分训练集、测试集:前150个点训练,后50个点做预测验证
train_X = time_steps[:150]
train_y = y[:150]
test_X = time_steps[150:]
test_y = y[150:]

定义并训练高斯过程模型

核函数可根据时序特征调整,示例用Matern核适配非光滑时序,加白噪声核拟合观测噪声

# 周期性强的时序可额外叠加ExpSineSquared核
kernel = Matern(length_scale_bounds=(1e-2, 1e2), nu=1.5) + WhiteKernel(noise_level_bounds=(1e-5, 1e1))
gpr = GaussianProcessRegressor(kernel=kernel, random_state=42)

# 训练模型
gpr.fit(train_X, train_y)

未来观测值预测

直接预测测试集所有时间步结果

# return_std设为True可同时返回预测的标准差,用于计算置信区间
y_pred, y_std = gpr.predict(test_X, return_std=True)

基于部分测试集已知观测值迭代预测更远未来

如果已经拿到测试集的部分真实观测值,可将其加入训练集提升后续预测精度

# 假设已拿到测试集前10个点的真实观测值
known_test_num = 10
# 扩充训练集
extended_train_X = np.vstack([train_X, test_X[:known_test_num]])
extended_train_y = np.hstack([train_y, test_y[:known_test_num]])
# 重新拟合模型(小数据集可直接重训,大数据集可改用稀疏高斯过程优化)
gpr.fit(extended_train_X, extended_train_y)
# 预测后续20个时间步的结果
future_X = test_X[known_test_num:known_test_num+20]
future_pred, future_std = gpr.predict(future_X, return_std=True)

结果可视化验证

plt.figure(figsize=(12, 6))
plt.plot(train_X, train_y, c='blue', label='训练集观测值')
plt.plot(test_X, test_y, c='green', label='测试集真实值')
plt.plot(test_X, y_pred, c='red', label='测试集预测值')
# 绘制95%置信区间
plt.fill_between(test_X.ravel(), y_pred - 1.96*y_std, y_pred + 1.96*y_std, color='pink', alpha=0.3, label='95%置信区间')
plt.xlabel('时间步')
plt.ylabel('观测值')
plt.legend()
plt.show()

优化建议

  • 预测精度不足时可加入滞后特征作为输入,即将t时刻前k个观测值也作为输入特征的维度,比仅用时间步拟合效果更好
  • 超过1000个样本的时序数据集不建议直接用原生sklearn GPR,计算复杂度为O(n^3),可改用稀疏高斯过程实现降低开销
  • 周期性强的时序可在核函数中叠加ExpSineSquared核捕捉周期规律

内容的提问来源于stack exchange,提问作者myselfesteem

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 11:36:03