時序預測的深度學習算法介紹(2)
CNN通過卷積層和池化層等操作可以自動提取時間序列數據的特征,從而實現時序預測。在應用CNN進行時序預測時,需要將時間序列數據轉化為二維矩陣形式,然后利用卷積和池化等操作進行特征提取和壓縮,最后使用全連接層進行預測。相較于傳統的時序預測方法,CNN能夠自動學習時間序列數據中的復雜模式和規律,同時具有更好的計算效率和預測精度。
2.2.1 WaveNet(2016)Paper:WAVENET: A GENERATIVE MODEL FOR RAW AUDIO
WaveNet是由DeepMind團隊在2016年提出的一種用于生成語音的神經網絡模型,它的核心思想是利用卷積神經網絡來模擬語音信號的波形,并使用殘差連接和門控卷積操作來提高模型的表示能力。除了用于語音生成,WaveNet還可以應用于時序預測任務。在時序預測任務中,我們需要預測給定時間序列的下一個時間步的取值。通常情況下,我們可以將時間序列看作是一個一維向量,并將其輸入到WaveNet模型中,得到下一個時間步的預測值。
在WaveNet模型的構建中,關鍵的是對卷積層的設計和參數調整。卷積層的設計可以影響模型的表達能力和泛化能力,參數的調整可以影響模型的預測準確性和魯棒性。
2.2.2 TCN(2018)Paper:An Empirical Evaluation of Generic Convolutional and Recurrent Networks for Sequence Modeling
TCN(Temporal Convolutional Network)是一種基于卷積神經網絡的時序預測算法,其設計初衷是為了解決傳統RNN(循環神經網絡)在處理長序列時存在的梯度消失和計算復雜度高的問題。。相比于傳統的RNN等序列模型,TCN利用卷積神經網絡的特點,能夠在更短的時間內對長期依賴進行建模,并且具有更好的并行計算能力。TCN模型由多個卷積層和殘差連接組成,其中每個卷積層的輸出會被輸入到后續的卷積層中,從而實現對序列數據的逐層抽象和特征提取。TCN還采用了類似于ResNet的殘差連接技術,可以有效地減少梯度消失和模型退化等問題,而空洞卷積可以擴大卷積核的感受野,從而提高模型的魯棒性和準確性。
TCN模型的結構如下圖所示:
TCN模型的預測過程包括以下幾個步驟:
- 輸入層:接收時間序列數據的輸入。
- 卷積層:采用一維卷積對輸入數據進行特征提取和抽象,每個卷積層包含多個卷積核,可以捕獲不同尺度的時間序列模式。
- 殘差連接:類似于ResNet,通過將卷積層的輸出與輸入進行殘差連接,可以有效地減少梯度消失和模型退化等問題,提高模型的魯棒性。
- 重復堆疊:重復堆疊多個卷積層和殘差連接,逐層提取時間序列數據的抽象特征。
- 池化層:在最后一個卷積層之后添加一個全局平均池化層,將所有特征向量進行平均,得到一個固定長度的特征向量。
輸出層:將池化層的輸出通過一個全連接層進行輸出,得到時間序列的預測值。
TCN模型的優點包括:
- 能夠處理長序列數據,并且具有良好的并行性。
- 通過引入殘差連接和空洞卷積等技術,避免了梯度消失和過擬合的問題。
- 相對于傳統RNN模型,TCN模型具有更高的計算效率和預測準確率。
# 模型構建TCN = TCNModel( input_chunk_length=13, output_chunk_length=12, n_epochs=200, dropout=0.1, dilation_base=2, weight_norm=True, kernel_size=5, num_filters=3, random_state=0,)# 模型訓練,無協變量TCN.fit(series=train, val_series=val, verbose=True)# 模型訓練,有協變量TCN.fit(series=train, past_covariates=train_month, val_series=val, val_past_covariates=val_month, verbose=True)# 模型推理backtest = TCN.historical_forecasts( series=ts, # past_covariates=month_series, start=0.75, forecast_horizon=10, retrain=False, verbose=True,)# 成果可視化ts.plot(label="actual")backtest.plot(label="backtest (D=10)")plt.legend()plt.show()數據歸一化對時序預測影響探究?
原始數據是否按月份生成協變量,是否歸一化,對最終時序預測效果影響重大,就本實驗場景而言,原始數據為百分制更適用于無歸一化&有協變量方式,協變量需根據實際業務表現進行選擇。
歸一化&無協變量
歸一化&有協變量
無歸一化&無協變量
無歸一化&有協變量
Paper:Probabilistic Forecasting with Temporal Convolutional Neural Network.Code:deepTCN
DeepTCN(Deep Temporal Convolutional Networks)是一種基于深度學習的時序預測模型,它是對傳統TCN模型的改進和擴展。DeepTCN模型使用了一組1D卷積層和最大池化層來處理時序數據,并通過堆疊多個這樣的卷積-池化層來提取時序數據的不同特征。在DeepTCN模型中,每個卷積層都包含多個1D卷積核和激活函數,并且使用殘差連接和批量歸一化技術來加速模型的訓練。
DeepTCN模型的訓練過程通常涉及以下幾個步驟:
- 數據預處理:將原始的時序數據進行標準化和歸一化處理,以減小不同特征的尺度不一致對模型訓練的影響。
- 模型構建:使用多個1D卷積層和最大池化層構建DeepTCN模型,可以使用深度學習框架,如TensorFlow、PyTorch等來構建模型。
- 模型訓練:使用訓練數據集對DeepTCN模型進行訓練,并通過損失函數(如MSE、RMSE等)來度量模型的預測性能。在訓練過程中,可以使用優化算法(如SGD、Adam等)來更新模型參數,并使用批量歸一化和DeepTCN等技術來提高模型的泛化能力。
模型評估:使用測試數據集對訓練好的DEEPTCN模型進行評估,并計算模型的性能指標,如平均絕對誤差(MAE)、平均絕對百分比誤差(MAPE)等。
就本實驗場景而言,受原始數據樣本限制,輸入輸出長度和batch_size無法過大調整,從性能角度建議選用大batch_size&短輸入輸出方式。
# 短輸入輸出deeptcn = TCNModel( input_chunk_length=13, output_chunk_length=12, kernel_size=2, num_filters=4, dilation_base=2, dropout=0.1, random_state=0, likelihood=GaussianLikelihood(),)# 長輸入輸出deeptcn = TCNModel( input_chunk_length=60, output_chunk_length=20, kernel_size=2, num_filters=4, dilation_base=2, dropout=0.1, random_state=0, likelihood=GaussianLikelihood(),)# 長輸入輸出,大batch_sizedeeptcn = TCNModel( batch_size=60, input_chunk_length=60, output_chunk_length=20, kernel_size=2, num_filters=4, dilation_base=2, dropout=0.1, random_state=0, likelihood=GaussianLikelihood(),)# 短輸入輸出,大batch_sizedeeptcn = TCNModel( batch_size=60, input_chunk_length=13, output_chunk_length=12, kernel_size=2, num_filters=4, dilation_base=2, dropout=0.1, random_state=0, likelihood=GaussianLikelihood(),)
短輸入輸出
長輸入輸出
長輸入輸出,大batch_size
短輸入輸出,大batch_size
*博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。