区间预测 | MATLAB实现QGPR高斯过程分位数回归时间序列区间预测

news2025/1/11 12:32:03

区间预测 | MATLAB实现QGPR高斯过程分位数回归时间序列区间预测

目录

    • 区间预测 | MATLAB实现QGPR高斯过程分位数回归时间序列区间预测
      • 效果一览
      • 基本介绍
      • 模型描述
      • 程序设计
      • 参考资料

效果一览

1
2
3

基本介绍

MATLAB实现QGPR高斯过程分位数回归时间序列区间预测
1.基于高斯过程回归(QGPR)分位数时间序列区间预测,Matlab代码,单变量输入模型。
2.评价指标包括:R2、MAE、MSE、RMsE和区间覆盖率和区间平均宽度百分比等,代码质量极高,方便学习和替换数据。

高斯过程分位数回归是一种基于高斯过程的统计学习方法,用于对时间序列进行预测。在时间序列区间预测中,GPR可以用于预测一系列未来时间点的分位数,从而提供关于未来趋势的一些信息。
具体来说,GPR可以用于估计某个时间点的观测值在给定分位数水平下的概率分布。这个分布可以用来计算区间预测。GPR 的预测结果可以提供一些关于未来时间序列的不确定性信息,这对于决策者和风险管理者来说非常有用。

在应用 GPR进行时间序列区间预测时,需要首先选择合适的高斯过程模型,然后基于历史数据进行参数估计和模型训练。一旦模型训练完成,就可以用它来对时间序列进行预测和区间估计。

需要注意的是,GPR是一种复杂的统计学习方法,需要一定的数学和计算机技能才能进行有效的应用。此外,预测结果也受到历史数据的限制,因此在进行时间序列区间预测时需要谨慎选择样本数据,并且需要不断更新模型以反映新的数据和趋势。

模型描述

  • QGPR 的原理和基本思想与传统的高斯过程回归(GPR)类似,但是在预测分位数时,QGPR引入了一个分位数损失函数,来惩罚预测结果与真实观测值之间的偏差。QGPR 的预测结果是一个概率分布,可以用来计算区间预测。

  • 下面是 QGPR的主要公式:

  • 假设我们有一个时间序列数据集 ( X , y ) (\mathbf{X}, \mathbf{y}) (X,y),其中 X \mathbf{X} X n × d n \times d n×d 的矩阵,表示 n n n 个时间点的 d d d 个特征值, y \mathbf{y} y n × 1 n \times 1 n×1 的向量,表示相应的观测值。我们的目标是预测未来时间点 t ∗ t^* t 的观测值在给定分位数水平 τ \tau τ 下的概率分布。

  • QGPR 的预测结果是一个高斯分布,其均值和方差分别由以下公式给出:

y ^ t ∗ , τ = k T ( K + σ 2 I ) − 1 y \hat{y}_{t^*, \tau} = \mathbf{k}^T (\mathbf{K} + \sigma^2 \mathbf{I})^{-1} \mathbf{y} y^t,τ=kT(K+σ2I)1y

σ ^ t ∗ , τ 2 = k t ∗ t ∗ − k T ( K + σ 2 I ) − 1 k \hat{\sigma}^2_{t^*, \tau} = k_{t^* t^*} - \mathbf{k}^T (\mathbf{K} + \sigma^2 \mathbf{I})^{-1} \mathbf{k} σ^t,τ2=kttkT(K+σ2I)1k

  • 其中, k \mathbf{k} k t ∗ t^* t 与历史时间点的核函数向量, K \mathbf{K} K 是历史时间点之间的核函数矩阵, σ 2 \sigma^2 σ2 是噪声方差, I \mathbf{I} I 是单位矩阵。在 GPR-Q 中,核函数的选择通常使用径向基函数(RBF)核函数,其形式为:

k ( x i , x j ) = σ f 2 exp ⁡ ( − 1 2 l 2 ∣ ∣ x i − x j ∣ ∣ 2 ) k(x_i, x_j) = \sigma_f^2 \exp\left(-\frac{1}{2l^2}||x_i - x_j||^2\right) k(xi,xj)=σf2exp(2l21∣∣xixj2)

  • 其中, σ f 2 \sigma_f^2 σf2 是核函数的方差, l l l 是核函数的长度尺度。

  • QGPR引入了一个分位数损失函数,来惩罚预测结果与真实观测值之间的偏差。假设 y t ∗ y_{t^*} yt 是真实观测值, F τ ( y t ∗ ) F_{\tau}(y_{t^*}) Fτ(yt) 是给定分位数水平 τ \tau τ 下的累积分布函数, q τ ( y t ∗ ) q_{\tau}(y_{t^*}) qτ(yt) 是给定分位数水平 τ \tau τ 下的分位数点,分位数损失函数可以表示为:

L τ ( y t ∗ , y ^ t ∗ , τ ) = { τ ∣ y t ∗ − y ^ t ∗ , τ ∣ y t ∗ < q τ ( y ^ t ∗ , τ ) ( 1 − τ ) ∣ y t ∗ − y ^ t ∗ , τ ∣ y t ∗ ≥ q τ ( y ^ t ∗ , τ ) L_{\tau}(y_{t^*}, \hat{y}_{t^*, \tau}) = \begin{cases} \tau |y_{t^*} - \hat{y}_{t^*, \tau}| & y_{t^*} < q_{\tau}(\hat{y}_{t^*, \tau}) \\ (1-\tau) |y_{t^*} - \hat{y}_{t^*, \tau}| & y_{t^*} \geq q_{\tau}(\hat{y}_{t^*, \tau}) \end{cases} Lτ(yt,y^t,τ)={τyty^t,τ(1τ)yty^t,τyt<qτ(y^t,τ)ytqτ(y^t,τ)

  • 其中 q τ ( y ^ t ∗ , τ ) q_{\tau}(\hat{y}_{t^*, \tau}) qτ(y^t,τ) 表示在给定分位数水平 τ \tau τ 下,均值预测值的分位数点。QGPR 的目标是最小化预测结果的分位数损失函数,从而得到最优的预测结果。

程序设计

  • 完整程序和数据获取方式1:私信博主,同等价值程序兑换;

  • 完整程序和数据下载方式2(资源处直接下载):MATLAB实现QGPR高斯过程分位数回归时间序列区间预测

  • 完整程序和数据下载方式3(订阅《TSFM统计预测模型》专栏,数据订阅后私信我获取):MATLAB实现QGPR高斯过程分位数回归时间序列区间预测

%%  数据集分析
outdim = 1;                                  % 最后一列为输出
num_size = 0.7;                              % 训练集占数据集比例
num_train_s = round(num_size * num_samples); % 训练集样本个数
f_ = size(res, 2) - outdim;                  % 输入特征维度

%%  划分训练集和测试集
P_train = res(1: num_train_s, 1: f_)';
T_train = res(1: num_train_s, f_ + 1: end)';
M = size(P_train, 2);

P_test = res(num_train_s + 1: end, 1: f_)';
T_test = res(num_train_s + 1: end, f_ + 1: end)';
N = size(P_test, 2);

%%  数据归一化
[p_train, ps_input] = mapminmax(P_train, 0, 1);
p_test = mapminmax('apply', P_test, ps_input);

[t_train, ps_output] = mapminmax(T_train, 0, 1);
t_test = mapminmax('apply', T_test, ps_output);

%%  转置以适应模型
p_train = p_train'; p_test = p_test';
t_train = t_train'; t_test = t_test';

%%  模型创建
alpha = 0.10;
net = fitrgp(p_train, t_train);

%%  仿真测试


%%  数据反归一化
L_sim1 = mapminmax('reverse', l_sim1, ps_output);
L_sim2 = mapminmax('reverse', l_sim2, ps_output);

T_sim1 = mapminmax('reverse', t_sim1, ps_output);
T_sim2 = mapminmax('reverse', t_sim2, ps_output);

参考资料

[1] https://blog.csdn.net/kjm13182345320/article/details/127931217
[2] https://blog.csdn.net/kjm13182345320/article/details/127418340

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/538226.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

chatgpt赋能Python-pycharm怎么粘贴代码

PyCharm&#xff1a;如何在编辑器中粘贴代码 作为一个有多年 Python 编程经验的工程师&#xff0c;我可以说 PyCharm 是 Python 编辑器中的佼佼者&#xff0c;它凭借其智能化、强大的功能和用户友好的界面而受到广泛赞誉。在该编程软件中&#xff0c;如果你需要粘贴代码&#…

【我的C++入门之旅】(上)

前言 C的发展史 1979年&#xff0c;贝尔实验室的Bjarne等人试图分析unix内核的时候&#xff0c;试图将内核模块化&#xff0c;但是发现C语言有很多的不足之处&#xff0c;于是在C语言的基础上进行扩展&#xff0c;增加了类的机制&#xff0c;完成了一个可以运行的预处理程序&…

chatgpt赋能Python-pycharm备份

PyCharm备份——数据安全之道 在软件开发过程中&#xff0c;数据备份是一项至关重要的任务。特别是对于PyCharm这样的IDE来说&#xff0c;开发者在其中执行大量的代码编写、调试、测试、运行等操作&#xff0c;需要在相对固定的时间点 backup 数据&#xff0c;以防止数据丢失带…

【AFNetWorking源码一】

文章目录 前言一.原生的网络请求发送方式1.1 原生GET1.2 原生PSOT 二.AFN2.1 AFN的基本架构分析2.2 以GET为例分析AFN使用流程&#xff08;AFHTTPSessionManager2.2.1 AFN如何生生成对应的sessionManager2.2.2. AFURLSessionManager的初始化2.2.3 task的三种代理2.2.3.1 setDel…

力扣sql中等篇练习(二十二)

力扣sql中等篇练习(二十二) 1 坚定的友谊 1.1 题目内容 1.1.1 基本题目信息 1.1.2 示例输入输出 1.2 示例sql语句 # Write your MySQL query statement below # ①求出所有朋友关系的总表 WITH T as (SELECT user1_id ,user2_idFROM friendshipUNION SELECT user2_id user1…

前端学习--Vue(1)webpack

前端工程化 模块化&#xff08;js、css模块化、资源模块化&#xff09; 组件化&#xff08;复用现有的UI结构、样式、行为&#xff09; 规范化&#xff08;目录结构划分、编码规范化、接口文档规范化、git分支管理&#xff09; 自动化&#xff08;自动化构建、自动部署、自动化…

试用阿里云云拨测对Web网站的网页性能进行测试并分析

目录 前言 云拨测操作步骤 1.开通应用实时监控服务ARMS 2.成功登录后&#xff0c;在产品类别下选择中间件>应用实时监控服务&#xff0c;在云拨测卡片上单击立即试用。 3.登录ARMS控制台&#xff0c;在左侧导航栏中选择云拨测>定时拨测&#xff0c;在定时拨测页面右上…

chatgpt赋能Python-pycharm怎么与python关联

Pycharm怎么与Python关联&#xff1f; 介绍 对于Python开发人员来说&#xff0c;Pycharm是一个非常强大的IDE。它提供了各种工具和功能&#xff0c;用于快速开发和调试Python代码。但是&#xff0c;在开始开发之前&#xff0c;必须将Pycharm与Python关联起来。否则&#xff0…

chatgpt赋能Python-pulp_python

Pulp Python: 介绍与优点 在数据分析和决策优化领域&#xff0c;线性规划是一种非常有效的数学模型。而Pulp Python是一款优秀的线性规划库&#xff0c;它可以帮助用户快速进行线性规划求解&#xff0c;同时还具备可扩展性和易使用性等优点。 什么是线性规划&#xff1f; 线…

chatgpt赋能Python-pycharm_滚轮字体大小设置

Pycharm滚轮字体大小设置 Pycharm是一款非常流行的Python IDE&#xff0c;广泛用于Python编程。然而&#xff0c;每个开发者都有其自己的偏好设置&#xff0c;包括字体大小。此文将介绍如何使用滚轮控制Pycharm中编辑器的字体大小。 界面操作 在Pycharm中&#xff0c;您可以…

南京邮电大学Web技术双语实验二(Web服务端脚本编写)

文章目录 一、 实验目的和要求二、实验环境(实验设备)三、实验原理及内容1首先编写html页面2 html页面效果如下图所示3 编写服务端php脚本4 服务端页面显示如下 四、实验小结&#xff08;包括问题和解决方法、心得体会、意见与建议等&#xff09; 一、 实验目的和要求 1 显示一…

进程通信 — 管道

目录 进程通信前提进程间通信的目的进程间通信发展进程间通信分类管道认识管道匿名管道站在文件描述符角度&#xff0c;深度理解管道 管道读取规则读写规则 管道特点命名管道命名管道的打开规则 匿名管道与命名管道的区别命名管道的打开规则 匿名管道与命名管道的区别 进程通信…

chatgpt赋能Python-pycharm怎么关联python

PyCharm怎么关联Python PyCharm是一款非常流行的Python集成开发环境&#xff08;IDE&#xff09;&#xff0c;它经常被Python开发者用来编写、调试和测试他们的代码。为了让PyCharm正常工作&#xff0c;需要将其与Python相关联。在这篇文章中&#xff0c;我们将讨论如何在PyCh…

最小二乘法

本文结合对ChatGTP的提问&#xff0c;用自己的理解讲一讲最小二乘法。 最小二乘法&#xff1a; yi是实际值&#xff0c;yhat是理论值&#xff0c;就是拟合值&#xff0c;比方说一次函数做拟合&#xff0c;那就是在这个x点位置时的值。累加所有yi-yhat的平方&#xff0c;得到E并…

chatgpt赋能Python-pycharm怎么下载python

PyCharm怎么下载Python&#xff1f; PyCharm是一款非常流行的Python开发IDE&#xff0c;Python是一门流行的编程语言。所以&#xff0c;对于那些想要使用PyCharm进行Python编程的人们来说&#xff0c;下载Python是一个关键的步骤。 什么是Python&#xff1f; Python是一门流…

消息中间件概念

什么是消息队列 消息队列是消息中间件的一种实现方式。 什么是消息中间件&#xff1f; 将消息中间件需要理解一下什么是消息和中间件&#xff1f; 消息 消息是指软件对象之间进行交互作用和通讯利用的一种方式。 中间件 百度百科的介绍&#xff1a; ​ 中间件&#xff08;Mid…

改进YOLOv5 | 在 C3 模块中添加【Triplet】【SpatialGroupEnhance】【NAM】【S2】注意力机制 | 附详细结构图

文章目录 1. Triplet 注意力模块1.1 原理1.2 C3_Triplet 代码2. SpatialGroupEnhance 注意力模块2.1 原理2.2 C3_SpatialGroupEnhance 代码3. NAM 注意力模块3.1 原理3.2 C3_NAM 代码4. S2 注意力模块4.1 原理4.2 C3_S2 代码5. 添加方式💡6. C3_Attention 结构图 &#x

chatgpt赋能Python-pycharm怎么编译python

PyCharm怎么编译Python&#xff1f; Python是当今最流行的编程语言之一&#xff0c;其简单易学、高效实用的特性使其受到了广大开发者的欢迎。PyCharm是一款专业的Python集成开发环境&#xff0c;它提供了许多有用的功能和工具&#xff0c;可以极大地提高开发效率。本文将介绍…

C++ 端点检测(8领域检测)

直线曲线端点检测 一、代码二、结果适用于直线、曲线等线的端点检测。 方法是:通过判断一个点周围8个点的像素的值来判断该点是否为端点,若周围8个点中有且只有一个点像素不为0,则认为该点是线段上的一个端点。 一、代码 #include <opencv2/opencv.hpp> using name…

lwip的路由表

在lwIP中&#xff0c;路由表被实现为一个以链表形式组织的数据结构&#xff0c;每个表项都包含一个目的网络地址和一个指向输出接口的指针。当需要将数据包发送到某个目的地址时&#xff0c;lwIP会遍历路由表&#xff0c;并找到最佳匹配的表项&#xff0c;然后将数据包发送到相…