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