勾志竟,任建玲,徐 梅,王 敏
(天津市氣象局 天津市氣象信息中心,天津 300074)
隨著科技的進步,極大的推動了氣象行業(yè)的信息化建設,氣象數(shù)據(jù)的獲取途徑越來越多,數(shù)據(jù)量急劇增長,且其具有的空間復雜性、高維性、不穩(wěn)定性,使得傳統(tǒng)的基于數(shù)值計算和統(tǒng)計分析的方法不能有效的處理,在挖掘數(shù)據(jù)各要素之間的內部聯(lián)系時更為乏力,已經(jīng)無法滿足人類對高效準確氣象服務的需求.而數(shù)據(jù)挖掘算法和Hadoop 等技術的出現(xiàn),為從海量氣象數(shù)據(jù)中挖掘出潛在的規(guī)律和模式提供了新途徑,也為提高天氣預報準確率,做好災害的提前預警提供了新思路[1].
目前,已經(jīng)有大量學者將數(shù)據(jù)挖掘算法應用到氣象領域.文獻[2]將SVM 方法應用于降水異常的分類預測中,并利用四川盆地降水數(shù)據(jù)進行了實驗,結果表明所建立的模型在短期氣候預測業(yè)務中有較好性能.文獻[3]采用Na?ve Bayes 算法對介休、運城、豐寧3 個站進行了降水概率分級預報,結果表明該方法可以通過降低數(shù)值模式空報率提高單站晴雨、小雨預報效果.文獻[4]選取濕度、溫度、大氣壓、風速等要素為降水因子,并采用決策樹算法對降水進行預報,實驗結果表明改進后的模型有較好的適應性.文獻[5]采用改進的Adaboost 算法集成反向傳播(BP)神經(jīng)網(wǎng)絡組合分類模型,通過構造多個神經(jīng)網(wǎng)絡分類器對江蘇境內6 個站點降水等級進行了預測,結果表明所提出的模型有較好的預測精度.但是這些模型所采用的都是較小的數(shù)據(jù)集,不適用于較大規(guī)模的數(shù)據(jù)集.隨著氣象預報精度、準度要求的提高,傳統(tǒng)的方法已經(jīng)無法及時準確的處理海量數(shù)據(jù).
本文針對以上不足,采用Hadoop 分布式系統(tǒng)處理海量數(shù)據(jù),同時考慮BP 神經(jīng)網(wǎng)絡收斂速度慢,容易陷入局部最小值的問題,結合遺傳算法全局搜索的優(yōu)勢對BP 神經(jīng)網(wǎng)絡進行改進,提出了在Hadoop 平臺上構建基于遺傳神經(jīng)網(wǎng)絡算法的天氣預報方法,為海量氣象數(shù)據(jù)挖掘提供了一個可行的方案.
BP 神經(jīng)網(wǎng)絡算法是大氣科學領域的氣候分析和氣候預測中應用比較廣泛的算法,能夠提供更好的預報能力[6-8].但BP 神經(jīng)網(wǎng)絡算法收斂速度慢,容易陷入局部最小值,而遺傳算法(Genetic Algorithm,GA)是一種全局優(yōu)化的搜索迭代算法,將其與BP 神經(jīng)網(wǎng)絡結合,可以克服BP 神經(jīng)網(wǎng)絡的缺點,加速網(wǎng)絡的訓練[9-10].本文首先利用GA 算法優(yōu)化BP 神經(jīng)網(wǎng)絡的連接權和網(wǎng)絡結構,并得到一群全局性較好的個體,在進一步利用BP 神經(jīng)網(wǎng)絡得到最優(yōu)解,然后解碼得到對應的BP 神經(jīng)網(wǎng)絡連接權和網(wǎng)絡結構,最后輸入檢測樣本進行降水等級的預測.
編碼方式對算法的實現(xiàn)尤為重要,不同編碼方式?jīng)Q定了計算的復雜程度和網(wǎng)絡學習的精度,并且也影響到解空間的大小.本文采用了實數(shù)編碼,另外對隱含層節(jié)點增加了一個二進制碼用作控制基因,以確定隱含層節(jié)點對輸出層的影響關系,具體編碼方法舉例如圖1所示.
如圖1,隱含層第三個神經(jīng)元沒有連接,即控制基因為:1 1 0 1,當為0 時,表示無連接,1 表示有連接.神經(jīng)元輸入層到隱含層的權重系數(shù)矩陣,按照一定順序展開:0.3,0.2,0.7,0.6,0.4,0.3,0.1,0.9,0.6.隱含層神經(jīng)元的閥值為:0.6,-0.3,0.5.隱含層到輸出層的權重系數(shù)為:0.5,0.3,0.7.輸出層神經(jīng)元的閥值為:0.8.整個神經(jīng)網(wǎng)絡的編碼為:1 1 0 1 0.3 0.2 0.7 0.6 0.4 0.3 0.1 0.9 0.6 0.6 -0.3 0.5 0.5 0.3 0.7 0.8.
圖1 編碼示意圖
染色體編碼基因由控制基因、輸入層到隱含層的權重系數(shù)、隱含層神經(jīng)元的閥值、隱含層到輸出層的權重系數(shù)以及輸出層神經(jīng)元的閥值依次組成,共h+m*h1+h1+h1+n位(其中h為隱含層節(jié)點數(shù),m為輸入層節(jié)點數(shù),h1為有效隱含層節(jié)點數(shù),n為輸出層節(jié)點數(shù)目).
初始種群的生成,本文采用隨機數(shù)發(fā)生器隨機生成初始種群.
假設輸出層的實際輸出結果為dj,期望輸出為yj,則誤差函數(shù)如下:
神經(jīng)網(wǎng)絡的目標是網(wǎng)絡的期望輸出與實際輸出結果的誤差函數(shù)值最小,因此本文構造的適應度函數(shù)為:
選擇策略是對當前群體不同適應度個體進行優(yōu)勝劣汰的過程,本文采用輪盤賭和最佳保留相結合的方法選擇個體.
交叉算子是用根據(jù)選擇操作得到的兩個染色體個體,以一定的概率Pc按照一定的方式互換一些基因,從而得到子代染色體的過程.交叉概率越大,子代染色體更新的越快,然而就更容易破壞優(yōu)良個體.交叉概率越小,算法的收斂速度越慢,通常Pc=0.5~1.0.為了盡量不破壞適應度值高的染色體個體,同時保證群體的多樣性,本文采用自適應的交叉率[11]公式如下:
其中,favg為平均適應度,fmax為群體中個體最大的適應度,f′為交換的兩個個體中適應度值大的個體.
本文在進行交叉操作時,把父代染色體對應基因位的染色體互換,即控制基因位與對應的控制基因位互換,權重系數(shù)基因位與對應的權重系數(shù)基因位互換,閥值基因位與閥值基因位互換.
變異操作是通過將染色體個體的編碼基因中某些位用其它等位基因代替,從而產生新的個體,通常Pm=0.001~0.05.本文采用自適應的變異率,公式如下:
其中,favg、fmax、f′見上文.
以Pm的概率對交叉操作以后的染色體進行變異,變異算子如下:
其中,Xtj是變異操作前的個體,Xtj+1是變異操作后的個體,cj是隨機數(shù).
本文設計的算法終止條件如下:
當算法運行到預先設定的最大的進化代數(shù)K0時,就終止算法,把得到的結果輸出.
遺傳神經(jīng)網(wǎng)絡算法具體步驟如下:
(1)確定解空間[12],對解空間進行編碼,每串編碼代表解空間的一個解.
(2) 在編碼的解空間中,隨機生成一個初始群體(不要求一定是可行解).
(3)對群體中的每一個個體進行適應度評價.
(4) 根據(jù)個體的適應度,對群體中的個體進行選擇、交叉、變異遺傳操作.
(5)生成新一代群體.
(6)反復進行(3)、(4)、(5),每進行一次,群體進化一代,直至進化了K0代(K0為預置的進化代數(shù)).
(7)從第K0代群體中選擇S可能具有全局性的進化解,選擇時要注意避免相似個體.
(8)分別以這些進化解為初始解,用神經(jīng)網(wǎng)絡求解.
(9)比較S個由神經(jīng)網(wǎng)絡求得的解,從而獲得問題的最優(yōu)解,然后輸入檢測樣本進行預測.
遺傳神經(jīng)網(wǎng)絡算法流程圖如圖2所示.
圖2 遺傳神經(jīng)網(wǎng)絡算法流程圖
Hadoop 下的MapReduce 是Google 公司提出的用于處理海量數(shù)據(jù)的分布式計算模型,其主要由兩個階段組成:Map和Reduce.Map 階段主要負責將輸入數(shù)據(jù)分為多個分片(split),并將每個split 交給一個Map Task,最終轉化為key/value 數(shù)據(jù)結構.Reduce 階段將Map 階段的結果進行歸約處理,輸出最終結果.降水數(shù)據(jù)規(guī)模較大,利用MapReuce 分布式計算的優(yōu)勢,可以快速的完成對海量氣象數(shù)據(jù)的處理.
GA 算法的并行思想:首先將整個群體分為m個種群,然后每一個種群在對應的Map Task 上獨立完成種群的初始化、選擇、交叉、變異等操作,達到收斂條件后,將Map 得到的最后個體傳遞給相對應的Reduce Task,然后將不同Reduce Task 得到的個體適應度進行比較,輸出適應度值最大的個體.
Map 函數(shù)偽代碼如下:
遺傳算法迭代完成后,得到的結果就是BP 神經(jīng)網(wǎng)絡的初始的權值和閥值.
神經(jīng)網(wǎng)絡算法的并行思想:在Map 階段,根據(jù)遺傳算法輸出的最優(yōu)解得到神經(jīng)網(wǎng)絡的初始權值和閥值,然后把訓練樣本轉化為鍵值對作為輸入,對每個樣本進行迭代運算,計算誤差,并反向傳播誤差,輸出權值的改變量.在Reduce 階段,對Map 輸出的各個權值的改變量進行累加并求平均值,對權值進行更新.重復Map和Reduce 階段,直到算法收斂.
Map 函數(shù)偽代碼如下:
實驗采用Hadoop 分布式集群[13],選取1 臺虛擬機作為NameNode 節(jié)點和JobTracker 服務節(jié)點,負責管理分布式數(shù)據(jù)和分解任務的執(zhí)行,其它7 臺虛擬機作為DataNode和TaskTracker 服務節(jié)點,負責分布式存儲和任務執(zhí)行.虛擬機各項配置及集群的配置信息分別如表1、表2所示.
表2 集群信息配置
由表2我們可以看出Hadoop 分布式集群在運行時需要一系列的后臺程序,主要有:
NameNode-負責管理文件系統(tǒng)的Namespace.
DataNode-負責管理各個存儲節(jié)點.
SecondaryNameNode-NameNode 的熱備,負責周期性的合并Namespace image和Edit log.
ResourceManager-負責調度資源.
NodeManager-負責管理slave 節(jié)點的資源.
實驗采用的數(shù)據(jù)來自于天津市地面氣候資料日值數(shù)據(jù)集,該數(shù)據(jù)集以天津市13 個站1951年~2006年各月的A0、D、A 文件為數(shù)據(jù)源,通過統(tǒng)計軟件處理轉換成日平均氣壓、日最高氣壓、日最低氣壓等氣象要素日值資料,如表3所示.
表3 天津市地面氣候資料日值數(shù)據(jù)集表
按照中國氣象局的劃分,將20-20 時降水量劃分為7 類,如表4所示,實驗中不考慮31XXX 降雪以及32XXX 霧露霜天氣.為使網(wǎng)絡有良好的收斂性和映射能力,消除原始數(shù)據(jù)形式不同所帶來的不利,通常的做法是歸一化處理,將原始目標、輸入數(shù)據(jù)轉換到區(qū)間內將數(shù)據(jù)歸一化到[0,1]之間.歸一化公式如下:
其中,xi為輸入數(shù)據(jù),i為數(shù)據(jù)序號,xmax、xmin為x中的最大值和最小值.
表4 降水量等級分類標準
在實驗中,1951年~2005年的數(shù)據(jù)作為訓練數(shù)據(jù),2006年的數(shù)據(jù)作為檢測數(shù)據(jù).經(jīng)過數(shù)據(jù)預處理后13 個臺站共計214 706 個樣,如表5所示.
表5 站點數(shù)據(jù)表
總體樣本降水等級分布如圖3所示,從圖3中不難看出13 個臺站無雨的樣本數(shù)最多,達到了80.32%,特大暴雨的樣本數(shù)最少,約1.85%.
天津市地面氣候資料日值數(shù)據(jù)集共包含了27 個要素,去除降水量還有24 個要素,而預測因子的選擇很大程度上影響了預測的結果,本文利用Pearson[14]相關系數(shù)法來考察各要素對降雨量的影響力,公式如下:
其中,x與y分別為2 個變量的觀測值.
圖3 總體樣本降水等級分布圖
若r>0,表示2 個變量是正相關的;若r<0,則表示2 個變量是負相關,n為樣本數(shù)量(本文選100 個樣本計算相關系數(shù)).其它要素與降雨量之間的相關性初步由Pearson 求出之后,還要經(jīng)過顯著性檢驗再最后判斷.顯著性檢驗公式為:
分別計算平均氣溫、日最低氣溫、平均水汽壓等要素與降雨量的相關系數(shù),如表6所示.
表6 各要素與降雨量之間的相關系數(shù)
表6中平均相對濕度、小型蒸發(fā)量及大型蒸發(fā)量與降雨量的相關性已通過0.01 顯著性檢驗,平均水氣壓、最小相對濕度、平均本站氣壓、日最高本站氣壓、日最低本站氣壓與降雨量的相關性已通過0.05 顯著性檢驗,最后結合氣象專家的意見,選取了平均氣溫、日最低氣溫、平均水汽壓、平均相對濕度、最小相對濕度、平均風速、最大風速、最大風速的風向、極大風速、極大風速的風向、日照時數(shù)這11 個要素作為預測因子.網(wǎng)絡結構為11-h-7 三層網(wǎng)絡,其中11 為輸入層的節(jié)點數(shù)目,即11 個預測因子作為網(wǎng)絡的輸入向量,h為隱含層的數(shù)目,h=3+a(a 為1~10之間的調節(jié)常數(shù)),7 為輸出層節(jié)點數(shù)目,即7 個降水等級,具體實驗參數(shù)設置參考文獻[15].
對13 個站06年降水等級預測結果如表7所示,由表7可以看出,本文提出的算法對整體樣本降水等級的預測準確度較高,達到了82.4%.
表7 06年降水等級預測結果
與傳統(tǒng)的BP 算法對比實驗結果如圖4所示,從圖中可以看出本文提出的遺傳神經(jīng)網(wǎng)絡算法對所有降水等級的預測準確率都要優(yōu)于傳統(tǒng)的BP 神經(jīng)網(wǎng)絡算法,對無雨的預測準確度最高,約87%,而對特大暴雨的預測準確度最低,一方面是因為實驗樣本中無雨的樣本數(shù)量占總樣本數(shù)的80.32%,遠大于其它降水等級的樣本數(shù),所建立的模型更準確,而特大暴雨樣本數(shù)量僅占總樣本數(shù)的1.85%,對模型的訓練不充分,另一方面是因為特大暴雨的成因很復雜,我們實驗僅僅選取了眾多因子中相關性較高的11 個因子,這是遠遠不夠的,實際情況要復雜的多,需要結合各種方法綜合預測才行.
為了檢測所提出方法的擴展性和高效性,分別在不同的節(jié)點數(shù)進行了實驗,運行時間結果如圖5所示,由圖5我們不難看出,隨著DataNode 節(jié)點數(shù)量的增加,算法的運行時間明顯縮短,說明本文提出的方法在Hadoop 平臺上有很高的運行效率和擴展性.
圖4 實驗結果對比圖
圖5 不同節(jié)點運行時間圖
本文基于Hadoop 大數(shù)據(jù)離線分析平臺構建了基于遺傳神經(jīng)網(wǎng)絡算法的天氣預報方法,并以天津市13 個臺站1951~2006年的地面氣候資料日值數(shù)據(jù)為基礎,建立了遺傳神經(jīng)網(wǎng)絡預測模型,最后以降雨量等級為決策屬性進行了實驗.結果表明:
1)本文提出的方法對降水等級的預測準確率優(yōu)于傳統(tǒng)的BP 算法,整體預測準確率達到82.4%,其中對于等級R0的預測精度最高,高達87%.
2)該方法可以有效的處理海量氣象數(shù)據(jù),同時具有很高的運行效率和良好的擴展性,為天氣預報提拱了一種全新的思路和方法.
本文的方法對降水因子僅考慮了相關性比較高的11 個因子,對特大暴雨預測準確率很低,還有一些方面需要進一步研究,比如可以結合T213 數(shù)值天氣預報,篩選出一些非常規(guī)的氣象要素來進行降水等級的預測,以及尋找更有效的算法來解決這個問題,這些方面都很有意義,值得在未來的研究中仔細鉆研.