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