區間預測 | MATLAB實現QRBiLSTM雙向長短期記憶神經網絡分位數回歸時間序列區間預測
目錄
- 區間預測 | MATLAB實現QRBiLSTM雙向長短期記憶神經網絡分位數回歸時間序列區間預測
- 效果一覽
- 基本介紹
- 模型描述
- 程序設計
- 參考資料
效果一覽
基本介紹
區間預測 | MATLAB實現QRBiLSTM雙向長短期記憶神經網絡分位數回歸時間序列區間預測
QRBiLSTM是一種雙向長短期記憶(QR-LSTM)神經網絡的變體,用于分位數回歸時間序列區間預測。該模型可以預測時間序列的不同分位數的值,并且可以提供置信區間和風險評估等信息。
QR-LSTM是一種基于LSTM模型的分位數回歸方法,可以通過學習分位數回歸損失函數來預測不同分位數的值。而QRBiLSTM則是在QR-LSTM的基礎上加入了雙向傳輸的結構,可以捕捉更多的時間序列信息。
模型描述
QRBiLSTM模型的輸入包括歷史數據,輸出為分位數值和置信區間。通常情況下,可以使用訓練數據來擬合模型參數,并使用測試數據來評估模型的預測性能。
總之,QRBiLSTM是一種非常有用的時間序列預測模型,可以應用于許多領域,如金融、股票、氣象學等,可以提供更全面的時間序列預測信息,有助于提高決策的準確性。
-
下面給出QRBiLSTM模型的具體公式,其中 X \textbf{X} X表示輸入序列, Y \textbf{Y} Y表示輸出序列, H \textbf{H} H表示隱藏狀態, C \textbf{C} C表示記憶狀態, f θ f_{\theta} fθ?表示神經網絡模型, q q q表示分位數:
-
正向傳播:
H t f , C t f = L S T M θ ( X t , H t ? 1 f , C t ? 1 f ) \textbf{H}^{f}_{t},\textbf{C}^{f}_{t} = LSTM_{\theta}(\textbf{X}_{t},\textbf{H}^{f}_{t-1},\textbf{C}^{f}_{t-1}) Htf?,Ctf?=LSTMθ?(Xt?,Ht?1f?,Ct?1f?)
H t b , C t b = L S T M θ ( X t , H t + 1 b , C t + 1 b ) \textbf{H}^{b}_{t},\textbf{C}^{b}_{t} = LSTM_{\theta}(\textbf{X}_{t},\textbf{H}^{b}_{t+1},\textbf{C}^{b}_{t+1}) Htb?,Ctb?=LSTMθ?(Xt?,Ht+1b?,Ct+1b?)
Y ^ t q = f θ ( [ H t f , H t b ] ) \hat{Y}^{q}_{t} = f_{\theta}([\textbf{H}^{f}_{t},\textbf{H}^{b}_{t}]) Y^tq?=fθ?([Htf?,Htb?])
? ^ t q = Y t q ? Y ^ t q \hat{\epsilon}^{q}_{t} = Y^{q}_{t} - \hat{Y}^{q}_{t} ?^tq?=Ytq??Y^tq?
σ ^ t q = median { ∣ ? ^ t ? τ q ∣ : τ ≤ lag } ? c α ( lag , n ) \hat{\sigma}^{q}_{t} = \text{median}\{|\hat{\epsilon}^{q}_{t-\tau}|:\tau \leq \text{lag}\} \cdot c_{\alpha}(\text{lag},n) σ^tq?=median{∣?^t?τq?∣:τ≤lag}?cα?(lag,n)
-
其中, H t f \textbf{H}^{f}_{t} Htf?和 C t f \textbf{C}^{f}_{t} Ctf?分別表示正向傳播的隱藏狀態和記憶狀態; H t b \textbf{H}^{b}_{t} Htb?和 C t b \textbf{C}^{b}_{t} Ctb?分別表示反向傳播的隱藏狀態和記憶狀態; Y ^ t q \hat{Y}^{q}_{t} Y^tq?表示時間 t t t處分位數為 q q q的預測值; f θ f_{\theta} fθ?表示神經網絡模型; ? ^ t q \hat{\epsilon}^{q}_{t} ?^tq?表示時間 t t t處分位數為 q q q的預測誤差; σ ^ t q \hat{\sigma}^{q}_{t} σ^tq?表示時間 t t t處分位數為 q q q的預測誤差的置信區間,其中 c α ( lag , n ) c_{\alpha}(\text{lag},n) cα?(lag,n)表示置信系數。
-
QRBiLSTM模型的訓練目標是最小化分位數損失函數:
Loss θ = ∑ t = 1 T ∑ q ∈ Q ρ q ( ∣ ? t q ∣ ) ? 1 ∣ Q ∣ ∑ q ∈ Q log ( σ ^ t q ) \text{Loss}_{\theta}=\sum_{t=1}^{T}\sum_{q\in Q}\rho_{q}(|\epsilon^{q}_{t}|)-\frac{1}{|Q|}\sum_{q\in Q}\text{log}(\hat{\sigma}^{q}_{t}) Lossθ?=t=1∑T?q∈Q∑?ρq?(∣?tq?∣)?∣Q∣1?q∈Q∑?log(σ^tq?)
- 其中, ρ q ( x ) \rho_{q}(x) ρq?(x)表示分位數損失函數:
ρ q ( x ) = { q x x ≥ 0 ( q ? 1 ) x x < 0 \rho_{q}(x)=\begin{cases}qx&x\geq 0\\(q-1)x&x<0\end{cases} ρq?(x)={qx(q?1)x?x≥0x<0?
- QRBiLSTM模型的預測目標是預測分位數值和置信區間,即 Y ^ t q \hat{Y}^{q}_{t} Y^tq?和 σ ^ t q \hat{\sigma}^{q}_{t} σ^tq?。
程序設計
- 完整程序和數據獲取方式(資源處下載):MATLAB實現QRBiLSTM雙向長短期記憶神經網絡分位數回歸時間序列區間預測
% 構建模型
numFeatures = size(XTrain,1); % 輸入特征數
numHiddenUnits = 200; % 隱藏單元數
numQuantiles = 1; % 分位數數目
layers = [ ...sequenceInputLayer(numFeatures)bilstmLayer(numHiddenUnits,'OutputMode','last')dropoutLayer(0.2)fullyConnectedLayer(numQuantiles)regressionLayer];
options = trainingOptions('adam', ...'MaxEpochs',50, ...'MiniBatchSize',64, ...'GradientThreshold',1, ...'Shuffle','every-epoch', ...'Verbose',false);
net = trainNetwork(XTrain,YTrain,layers,options); % 訓練模型% 測試模型
YPred = predict(net,XTest); % 預測輸出
quantiles = [0.1,0.5,0.9]; % 分位數
for i = 1:length(quantiles)q = quantiles(i);epsilon = YTest - YPred(:,i); % 預測誤差lag = 10; % 滯后期數sigma = median(abs(epsilon(max(1,end-lag+1):end))) * 1.483; % 置信區間lb = YPred(:,i) - sigma * norminv(1-q/2,0,1); % 置信區間下限ub = YPred(:,i) + sigma * norminv(1-q/2,0,1); % 置信區間上限disp(['Quantile:',num2str(q),' MAE:',num2str(mean(abs(epsilon))),' Width:',num2str(mean(ub-lb))]);
end
參考資料
[1] https://blog.csdn.net/kjm13182345320/article/details/127931217
[2] https://blog.csdn.net/kjm13182345320/article/details/127418340