【pytorch】时间序列预测——同时预测多个分位点自信的故事
部分参考
《Multi-Horizon Time Series Forecasting with Temporal Attention Learning》
经典黑白电影
《A Multi-Horizon Quantile Recurrent Forecaster》
这两篇⽂章考虑的是多步预测的情形,多步预测在有外部协变量且未来输⼊已知的情况下效果好⼀点,如果只有未知变量的历史值,还是考
h
虑做单步预测吧!否则只能通过迭代地执⾏单步预测(导致误差累计)或者直接预测步之后的值(误差⼤),效果不好,意义不⼤!
单变量单步预测的分位点损失
单变量多步预测的分位点损失
多变量多步预测的分位点损失
dme模型
该模型可实现多变量单步的多分位点预测
import torch
as nn
functional as F
class Model(nn.Module):
def__init__(lf, n_val, window, hidRNN, quantiles =[0.5]):
super(Model, lf).__init__()
lf.u_cuda =True
lf.P = window # 输⼊窗⼝⼤⼩
lf.m = n_val # 列数,变量数
补发英文lf.hidR = hidRNN
bubly
lf.quantiles = sor(quantiles)
lf.GRU = nn.GRU(lf.m, lf.hidR)
ticklingtv
lf.linear = nn.Linear(lf.hidR, lf.m *len(quantiles))
def forward(lf, x):
x1 = x.permute(1,0,2).contiguous()# x1: [window, batch, n_val]
_, h = lf.GRU(x1)# h: [1, batch, hidRNN]
h = torch.squeeze(h,0)# h: [batch, hidRNN]
res = lf.linear(h)# res: [batch, n_val * n_quantile]
res = res.view(-1,len(lf.quantiles), lf.m)
lacross
return res
redemptionperiod
def MQLoss(lf, pred, true):
quantiles = lf.quantiles.unsqueeze(1).expand(len(lf.quantiles), lf.m) true = true.view(-1,1, lf.m).expand(pred.shape)
tau = (pred, true).type(torch.FloatTensor)- quantiles
loss = tau.mul(pred - true).sum()christmas lights
return loss
性感英文