陳 嵐, 張華琳, 汪 波?, 文 斌, 邱麗霞, 段 卿
(1.成都信息工程大學 通信工程學院, 四川 成都 610225;2.福建省氣象信息中心, 福建 福州 350025)
隨著氣象服務業(yè)的發(fā)展,精細化和超前化的氣象服務對氣溫數(shù)據(jù)預測的精確度和時效性要求越來越高。 氣溫預測已經從最早的天氣圖預測,發(fā)展為目前以數(shù)據(jù)驅動為主的預測。 數(shù)據(jù)驅動目前應用最廣泛的有統(tǒng)計方法和人工智能方法2 種,很多學者已經進行了一系列研究并取得了顯著成效。 汪子琦等[1]基于向量自回歸的組合模型來分析氣候變化,并添加月份為外生變量來消除時間趨勢影響,從而建立了氣候預測模型;王源昊[2]結合了集合經驗模態(tài)分解和整合移動平均自回歸來對平均氣溫進行建模;吳永濤等[3]利用支持向量機(Support Vector Machines,SVM)預測未來一天的最高和最低氣溫;蔣艮維[4]通過粒子群優(yōu)化算法對人工神經網(wǎng)絡進行優(yōu)化,建立氣溫預測模型;陶曄等[5]利用隨機森林和長短期記憶(Long Short-Term Memory, LSTM)網(wǎng)絡建立氣溫預測模型。 上述模型雖然都取得了不錯的效果,但也存在一定缺陷,如差分整合移動平均自回歸模型相結合的方法忽略了其他氣象要素對氣溫的影響;向量自回歸、SVM 和人工神經網(wǎng)絡這三者在模型訓練過程中僅將歷史數(shù)據(jù)進行統(tǒng)一輸入,未充分考慮氣溫序列隨時間的變化趨勢。 并且上述模型大多支持單步預測,多步預測時效果不理想,滿足不了目前精細化、未來化的氣溫預測要求。
為此,本文提出一種融合極端梯度提升樹(Extreme Gradient Boosting,XGBoost)和改進長短期時序網(wǎng)絡(Long and Short-Term Temporal Patterns with Deep Neural Network,LSTNet)的氣溫預測模型,記為XGBoost-TCA-LSTNet。 首先,利用XGBoost 可以衡量各特征重要性的特點來進行特征篩選;然后,對LSTNet[6]進行改進,在卷積模塊的一維卷積[7]中嵌入通道注意力(Channel Attention,CA)機制[8],解決了傳統(tǒng)卷積中每個通道占比相同時帶來的重要信息損失的問題;在循環(huán)模塊和循環(huán)跳接模塊中用雙向長短時記憶(Bidirectional Long Short-Term Memory,BiLSTM)網(wǎng)絡替代原始循環(huán)門單元(Gate Recurrent Unit,GRU),彌補了GRU 無法捕捉反向時間序列信息的不足。 然后在BiLSTM 側加入時序注意力(Temporal Attention,TA)機制[9],突出重要時間步的特征。 最后,用建立好的模型進行仿真實驗和對比實驗,驗證模型的性能。
XGBoost 是梯度提升樹算法的改進[10]。 XGBoost 算法具體可表示為:
式中,y(N)k是最終回歸結果;N表示決策樹的數(shù)量;fN(xk)表示第k個樣本xk在第N棵樹中的預測值,再疊加前面N-1 次的預測值就得到最終的預測結果。 可以看出,XGBoost 遵循先迭代第1 棵樹,再迭代第2 棵,直到迭代完第N棵樹。 每棵樹都是通過學習前(N-1)棵樹的殘差來最終構成由N棵樹線性組合而成的模型[11]。
XGBoost 算法選擇最優(yōu)特征子集的原理如下:在單個決策樹中,利用每個屬性分割點改進性能度量的量來計算屬性重要性,由節(jié)點進行加權和記錄次數(shù)[12]。 一個屬性對分割點改進性能度量越大,權值越大,屬性越重要[13]。 最后將屬性在所有提升樹中的結果進行加權求和并平均,得到重要性得分,即Fscore。
Fscore 也可以理解為特征在決策樹里出現(xiàn)的次數(shù),一般來說,如果一個特征在所有樹中作為劃分屬性的次數(shù)越多,那么該特征就越重要。 Fscore 計算如(5)所示,式中M是所求特征分類到節(jié)點的集合:
LSTNet 網(wǎng)絡由線性和非線性2 部分組成,如圖1所示。 非線性部分包括卷積模塊、循環(huán)模塊和特殊的循環(huán)跳躍模塊,線性部分則由自回歸模塊組成,這樣的組合可以成功捕獲數(shù)據(jù)中的長期模式和短期模式,使模型更加穩(wěn)健[14]。
圖1 LSTNet 結構Fig.1 LSTNet structure
非線性部分中,以多元時間序列作為卷積模塊的輸入,卷積模塊采用去除了傳統(tǒng)池化層一維卷積,負責捕捉多個變量之間的依賴關系以及時間維度中每個變量自己的短期局部特征。 式(6)表示第n個濾波器對變量矩陣X 進行卷積:
式中,卷積運算后輸出的特征向量即hn;ReLU 是激活函數(shù);Wn表示卷積核的權重矩陣,連接到第n個特征圖即Wn;X 為卷積模塊的輸入向量;bn為偏置。假設有i個濾波器,經過卷積模塊后會輸出大小為i?j的特征向量,j是X 經過第一個卷積核后產生的向量的長度[15]。
卷積層輸出后的數(shù)據(jù)下一步會同步進入循環(huán)模塊和循環(huán)跳接模塊,本文在循環(huán)模塊和循環(huán)跳接模塊都使用LSTM 作為基本單元,二者在t時刻單元狀態(tài)的更新可以統(tǒng)一表達如下:
式中,q為跳過隱藏層的數(shù)量,需要根據(jù)時間序列明顯的周期模式進行調優(yōu);ft,it,gt,St,ot,ht分別為遺忘門、輸入門、輸入節(jié)點、記憶單元、輸出門以及隱含層輸出;W 為相應門與輸入相乘的權重;b 為相應門的偏置向量;“·”表示向量的元素按照相應的位置相乘;σ,tanh 分別表示Sigmoid 函數(shù)、雙曲正切函數(shù)。 接下來是利用全連接層把循環(huán)和循環(huán)跳接模塊的輸出進行整合,至此非線性部分結束。
線性部分是通過引入自回歸AR,為預測添加線性部分。 在某些數(shù)據(jù)并不具有很強的周期性時,只用非線性部分進行預測,效果不理想,實驗發(fā)現(xiàn)加入線性預測部分后,可以彌補神經網(wǎng)絡模型在非周期變化預測精度低的不足[16]。 自回歸部分為:
本文對LSTNet 的改進如下:
① 在循環(huán)模塊和循環(huán)跳接模塊中,原始LSTNet采用GRU 作為基本單元,只能考慮單向的數(shù)據(jù)信息,忽視了序列的反向信息對預測的影響。 對此,本文提出用雙向循環(huán)神經網(wǎng)絡BiLSTM 代替GRU,方便同時提取雙向的數(shù)據(jù)信息,以期獲得更好的預測效果。 BiLSTM 由正向LSTM 和反向LSTM 兩部分組成,然后前饋到同一個輸出層,可以理解為彼此之間相互獨立且數(shù)據(jù)流向相反的網(wǎng)絡進行組合,即完全獨立的2 個隱含層[17]。 圖2 為BiLSTM 在t-1,t,t+1 時刻沿時間軸展開的結果,其中模型輸入為Xt,正向隱藏層狀態(tài)為At,反向為t,最終輸出由At與t共同決定。
圖2 BiLSTM 展開結構Fig.2 BiLSTM deployment structure
② 在卷積模塊引入CA 機制。 傳統(tǒng)卷積層提取信息時,特征圖的各通道分配權重相當,而事實上,不同通道中蘊含信息的重要程度不同,這樣就造成了重要信息的流失[18]。 為了加強模型對重要通道特征的學習,本文提出的模型在卷積神經網(wǎng)絡(Convolutional Neural Network,CNN)中加入注意力機制,將不同通道賦予各自的權值,形成CA 機制最后將所有通道信息加權求和,得到卷積層輸出,具體如圖3 所示。
圖3 帶有注意力的卷積層結構Fig.3 Structure diagram of convolution layer with attention
③ 在循環(huán)模塊和循環(huán)跳接模塊引入TA 機制。無論是GRU 還是BiLSTM 作為基本單元,針對較長時間序列的記憶時,都會出現(xiàn)信息損失[19]。 為了在挖掘時間序列的依賴關系時,突出重要時間步的信息,本文在BiLSTM 側嵌入TA 機制,注意力機制結構如圖4 所示。 Yt表示BiLSTM 輸出的第t個特征向量,Yt經過注意力機制層后得到初始狀態(tài)向量Zt,然后再和權重系數(shù)?t對應相乘相加得到最終輸出向量O 。
圖4 帶有注意力的BiLSTM 結構Fig.4 Structure diagram of BiLSTM with attention
綜上所述, 改進后的 LSTNet 結構如圖5所示。
圖5 改進LSTNet 結構Fig.5 Structure diagram of improved LSTNet
基于XGBoost 和改進LSTNet 的氣溫預測模型的預測步驟如圖6 所示。
圖6 模型預測步驟Fig.6 Model prediction steps
① 先對獲得的原始氣象數(shù)據(jù)進行簡單清洗,去除重復值,填補缺失值;
② 然后對數(shù)據(jù)進行歸一化,并以氣溫為預測的目標要素,利用XGBoost 進行輸入特征選取;
③ 確定目標要素和特征要素后,根據(jù)跳躍步長q將數(shù)據(jù)集劃分為2 個新的數(shù)據(jù)集,分別作為循環(huán)模塊和循環(huán)跳躍模塊的輸入;
④ 利用改進LSTNet 模型進行單步和多步訓練、測試,然后將預測結果反歸一化得到最終預測結果;
⑤ 將預測值與真實值進行對比,通過評估指標來評估模型單步和多步預測的性能。
本文實驗數(shù)據(jù)來源于福建省福州市平潭縣平潭地面觀測站的小時觀測數(shù)據(jù),數(shù)據(jù)真實可靠,來源具有合法性。 在數(shù)據(jù)清洗時,對重復數(shù)據(jù)采取直接刪除的方法,對缺失數(shù)據(jù),利用臨近數(shù)據(jù)的均值進行填充,保證數(shù)據(jù)的完整性。 劃分數(shù)據(jù)集時,將預處理后的數(shù)據(jù)按照4 ∶1 的比例劃分訓練集與測試集。 然后按照式(15)對數(shù)據(jù)進行歸一化處理。
式中,a?為標準化后的結果;a為某特征原始數(shù)據(jù);min為特征a的最小數(shù)值;max為特征a的最大數(shù)值。
此外,針對LSTNet 網(wǎng)絡的預測效果與時間窗寬度t和跳躍時間步q有關的問題,經多次實驗參數(shù)尋優(yōu)后發(fā)現(xiàn),當窗寬為7,跳躍步長為4 時,模型可達到最優(yōu)效果,因此本文的時間窗寬度設置為7,跳躍步長設置為4。
為了評價模型對氣溫預測效果,本文選取了均方根誤差(RMSE)和平均絕對誤差(MAE)2 個指標作為評估指標,公式如下:
式中,N為選取的樣本數(shù)量;y′i為預測值;yi為實際觀測值。
3.3.1 特征工程結果及有效性分析
特征過多時會增加算法復雜度,增加模型訓練和預測時間,因此在模型訓練之前,有必要進行特征選擇。 常見的特征選擇方法分過濾型、包裹型、嵌入型三大類。 本文選用了嵌入型方法,并采用XGBoost 進行特征選擇,并以XGBoost 中內置的特征重要性評分指標Fscore 來度量特征重要性。
相較于皮爾遜相關系數(shù)、斯皮爾曼相關系數(shù)和互信息法等傳統(tǒng)的利用相關性分析來進行特征選擇的方法。 用XGBoost 進行特征選擇好處在于,不必像皮爾遜相關系數(shù)一樣受限于樣本量以及樣本是否滿足正態(tài)分布,適用性更強;且使用這種梯度增強類的決策樹模型做特征篩選時,可以從訓練有素的預測模型中自動提供特征重要性的估計,在特征篩選和模型可解釋性等方面比斯皮爾曼相關系數(shù)和互信息法都有顯著的優(yōu)勢。 最后,XGBoost 算法自誕生之初就具有訓練速度極快、能處理大規(guī)模數(shù)據(jù)的特點,本文涉及15 個特征以及上萬條小時數(shù)據(jù),因此XGBoost 會更適合這種大規(guī)模數(shù)據(jù)集的特征選擇問題。 綜上,選用了XGBoost 作為特征選擇的方法。
下面是利用XGBoost 方法計算得到的各個特征重要性得分Fscore,如圖7 所示。 為了充分考慮特征多樣性和盡可能降低模型復雜度,本文將篩選界限設置為240,即選擇Fscore 值大于240 的氣象要素,和歷史氣溫數(shù)據(jù)一起作為預測模型的輸入,如圖8 所示。
圖7 特征重要性排序Fig.7 Feature importance score
圖8 模型輸入變量Fig.8 Model input variables
此外,為了驗證XGBoost 方法進行特征選取對LSTNet 網(wǎng)絡的有效性,將LSTNet 模型和改進的LSTNet 模型設為預測模型,然后以XGBoost 方法選取后的特征和未經過篩選的特征分別作為模型的輸入,進行單步預測(預測未來1 h 的氣溫),測試結果如表1 所示。
表1 XGBoost 方法有效性測試結果Tab.1 Effectiveness test results of XGBoost method單位:℃
由表1 可以看出,經過XGBoost 方法特征提取后,原LSTNet 模型的RMSE 減小了8.6%,MAE 減小了8.1%;改進后的LSTNet 模型RMSE 減小了9.8%,MAE 減小了9.2%,說明利用XGBoost 進行特征提取的方法適合LSTNet 和改進后的LSTNet 模型,輸入特征量的降維優(yōu)化有利于提高模型預測精度。
3.3.2 氣溫預測結果分析
為了驗證XGBoost-TCA-LSTNet 模型對氣溫預測的準確性,選用SVM 模型、lasso 回歸模型、BP 神經網(wǎng)絡、LSTM 模型、CNN-LSTM 模型和原始LSTNet 模型為對比模型,進行單步預測(預測未來1 h 的氣溫數(shù)據(jù)),預測結果與XGBoost-TCA-LSTNet 模型對比。
上述模型實現(xiàn)都在keras 和sklearn 下進行,SVM 以徑向基函數(shù)作為核函數(shù),懲罰系數(shù)為8,不敏感系數(shù)設為0.15;BP 神經網(wǎng)絡的學習率設置為0.01,隱藏層神經元數(shù)量設置為32,批處理數(shù)量為64,最大迭代此時為400 次。 2 層結構的LSTM 模型神經元數(shù)量為32 和48;CNN-LSTM 模型中一維卷積層的卷積核個數(shù)為128,大小為3×3,LSTM 層的神經元數(shù)量為64;LSTNet 模型和XGBoost-TCA-LSTNet模型的窗寬仍為7,跳躍步數(shù)為4。 所有模型都在訓練集訓練,保存最優(yōu)模型后,再在測試集上進行測試。 由于樣本數(shù)據(jù)量較大,為了更清晰地展示實驗效果,在測試集中隨機選取183 條數(shù)據(jù)進行展示,結果如圖9~圖15 所示。
圖9 SVM 測試結果Fig.9 SVM test results
圖10 lasso 測試結果Fig.10 lasso test results
圖11 BP 測試結果Fig.11 BP test results
圖12 LSTM 測試結果Fig.12 LSTM test results
圖13 CNN-LSTM 測試結果Fig.13 CNN-LSTM test results
圖15 XGBoost-TCA-LSTNet 測試結果Fig.15 XGBoost-TCA-LSTNet test results
圖14 LSTNet 測試結果Fig.14 LSTNet test results
從圖9~圖15 可以看出,SVM,lasso 回歸和BP神經網(wǎng)絡的預測值與實際氣溫值相差較大,表現(xiàn)遠不如其他4 種模型,這是因為其他4 種模型都含有循環(huán)神經網(wǎng)絡的變體LSTM 或者GRU,使得模型對早期數(shù)據(jù)具有記憶功能,能夠發(fā)現(xiàn)相對較長時間序列的內部變化規(guī)律,而SVM 和BP 不具備這種特性。
此外,LSTM,CNN-LSTM 以及原始LSTNet 模型在氣溫波動較大的地方擬合效果并不好,如從樣本量45~50 以及樣本量150~165 這2 個數(shù)據(jù)段,當氣溫劇烈突變時,3 個模型預測出的氣溫值與實際氣溫值相比都有較大偏差。 而XGBoost-TCA-LSTNet模型在整個數(shù)據(jù)段,與真實的氣溫數(shù)據(jù)貼合程度都相對較高,在部分數(shù)據(jù)段,預測氣溫值與真實氣溫幾乎完全重合,說明XGBoost-TCA-LSTNet 模型對非線性、非平穩(wěn)變化的氣溫數(shù)據(jù)動態(tài)跟蹤能力更強。XGBoost-TCA-LSTNet 和其他模型單步預測的評估指標如表2 所示,可以發(fā)現(xiàn)XGBoost-TCA-LSTNet 模型預測誤差最小,精度最高。
表2 不同模型多步預測誤差對比Tab.2 Comparison of multi-step prediction errors of different models單位:℃
為了證明XGBoost-TCA-LSTNet 模型在氣溫多步預測方面的優(yōu)勢,對氣溫進行最高9 步的多步預測,即預測未來9 h 內氣溫的變化趨勢。 4 種模型的多步預測時評估指標的具體數(shù)值如表2 所示,評估指標隨時間的變化情況如圖16 和圖17 所示。
圖16 不同模型預測RMSEFig.16 RMSE of different models
圖17 不同模型預測MAEFig.17 MAE of different models
可以看出,隨著時間步的增加,各個模型RMSE和MSE 都逐漸增大,但總體上XGBoost-TCA-LSTNet的預測誤差仍然比其他6 種模型小。 這說明文中提出的模型在氣象數(shù)據(jù)這種氣溫這種時間序列的多步預測中表現(xiàn)更好,對數(shù)據(jù)突變更敏感,動態(tài)跟蹤能力和適應性更強。 綜上所述,對非線性、動態(tài)變化頻繁氣溫時間序列預測而言,采用本文的XGBoost-TCALSTNet 模型效果更好。
本文提出的XGBoost-TCA-LSTNet 模型,在氣溫單步預測時,RMSE 和MAE 都優(yōu)于同類模型,能更好地跟蹤數(shù)據(jù)的非線性動態(tài)變化,預測精度更高。在多步預測時,XGBoost-TCA-LSTNet 模型相對于原始LSTNet 模型預測也有一定提升,預測誤差總體小于其他模型。
但XGBoost-TCA-LSTNet 模型中將循環(huán)層的GRU 替換為BiLSTM,模型運算時間會增加,這在多步預測時表現(xiàn)的更加明顯,尤其是遇到大規(guī)模數(shù)據(jù)集時。 未來可考慮對本文方法進行改進,使其能實現(xiàn)并行運算,提高模型的運算速度。