首页 > 编程知识 正文

多变量时间序列预测,spss时间序列预测步骤

时间:2023-05-05 20:53:34 阅读:272352 作者:1672

部分参考

《Multi-Horizon Time Series Forecasting with Temporal Attention Learning》《A Multi-Horizon Quantile Recurrent Forecaster》

这两篇文章考虑的是多步预测的情形,多步预测在有外部协变量且未来输入已知的情况下效果好一点,如果只有未知变量的历史值,还是考虑做单步预测吧!否则只能通过迭代地执行单步预测(导致误差累计)或者直接预测 h h h步之后的值(误差大),效果不好,意义不大!

单变量单步预测的分位点损失

单变量多步预测的分位点损失

多变量多步预测的分位点损失

结果可视化

模型

该模型可实现变量单步分位点预测

import torchimport torch.nn as nnimport torch.nn.functional as Fclass Model(nn.Module): def __init__(self, n_val, window, hidRNN, quantiles = [0.5]): super(Model, self).__init__() self.use_cuda = True self.P = window # 输入窗口大小 self.m = n_val # 列数,变量数 self.hidR = hidRNN self.quantiles = torch.tensor(quantiles) self.GRU = nn.GRU(self.m, self.hidR) self.linear = nn.Linear(self.hidR, self.m * len(quantiles)) def forward(self, x): x1 = x.permute(1, 0, 2).contiguous() # x1: [window, batch, n_val] _, h = self.GRU(x1) # h: [1, batch, hidRNN] h = torch.squeeze(h,0) # h: [batch, hidRNN] res = self.linear(h) # res: [batch, n_val * n_quantile] res = res.view(-1, len(self.quantiles), self.m) return res def MQLoss(self, pred, true): quantiles = self.quantiles.unsqueeze(1).expand(len(self.quantiles), self.m) true = true.view(-1, 1, self.m).expand(pred.shape) tau = torch.gt(pred, true).type(torch.FloatTensor) - quantiles loss = tau.mul(pred - true).sum() return loss

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。