周 蕓,杜景林,陶 曄
(南京信息工程大學(xué) 電子與信息工程學(xué)院,江蘇 南京 210044)
由于降水天氣成因復(fù)雜且形勢多變,傳統(tǒng)降水預(yù)報方法的準確度難以滿足人民的需求[1,2]。近年,越來越多的數(shù)據(jù)挖掘與人工智能技術(shù)被應(yīng)用于降水預(yù)報領(lǐng)域,并表現(xiàn)出比傳統(tǒng)降水預(yù)報方法更好的性能[3]。Du J等[4]為提高模型的性能,提出基于粒子群算法優(yōu)化支持向量機參數(shù)(PSO-SVM)的降水預(yù)報模型。Huang M等[5]提出一種基于距離加權(quán)的k最近鄰算法,并將該算法用于降水等級預(yù)報與晴雨預(yù)報,改進后的方法具有較好的預(yù)報效果。Haidar A等[6]將遺傳算法與前饋神經(jīng)網(wǎng)絡(luò)相結(jié)合,首先利用遺傳算法選擇合適的預(yù)報因子,然后應(yīng)用前饋神經(jīng)網(wǎng)絡(luò)構(gòu)建降水預(yù)報模型,對澳大利亞東部地區(qū)的月平均降水進行預(yù)報。然而這些方法在搭建降水預(yù)報模型時都未曾考慮不同氣象因子對降水量的影響程度存在相異性。針對上述問題,本文提出一種基于屬性加權(quán)的k最近鄰算法,通過各屬性上不同類別的數(shù)據(jù)分布情況,計算各屬性的權(quán)值,并將此算法用于南京地面觀測站的降水預(yù)報。本文建立的降水預(yù)報模型在準確率、TS評分等降水預(yù)測評價指標上均有所提高和完善。
(1)
(2)
(3)
在自然場景下的分類問題,不同屬性對分類結(jié)果的影響各不相同[8]。通常認為屬性空間上的類別分布可以表示屬性的重要度,屬性空間上類內(nèi)分布越集中,類間分布越分散,越有利于分類預(yù)測,這些屬性對于分類結(jié)果的重要性也就越高[9]。
(4)
式中:wa表示屬性a的權(quán)重,σai表示在屬性a上類標簽為Ci的屬性值的標準差;i∩j表示在屬性a上類標簽為Cj的屬性值落在類標簽為Ci的屬性值區(qū)間的樣本個數(shù);i∪j表示在屬性a上類標簽為Ci和類標簽為Cj的樣本個數(shù)總和;α為縮放因子,通過實驗經(jīng)驗選取,本文將其值設(shè)置為常數(shù)0.25。
由式(4)可以看出,類內(nèi)分布情況可由屬性上類別的標準差σai表示,σai值越小表示該屬性的類內(nèi)分布越集中;類間分布情況可由屬性上不同類別樣本的交集與并集的比值表示,該值越小表示該屬性的類間分布越分散。通過屬性空間上同類數(shù)據(jù)分布的內(nèi)聚性和異類數(shù)據(jù)的耦合性可以表示屬性的重要度。
傳統(tǒng)KNN算法在進行分類預(yù)測時,將參與分類的屬性視為同等重要,即為每個屬性都設(shè)置相同的權(quán)值。然而在實際應(yīng)用中,不同屬性對分類結(jié)果的影響各不相同。以降水預(yù)報為例,對降水預(yù)測結(jié)果造成重要影響的通常是預(yù)報因子中的一個或幾個關(guān)鍵因子。因此在對多維數(shù)據(jù)集進行分類預(yù)測時,應(yīng)當充分考慮不同屬性與類別的關(guān)系緊密程度。為了區(qū)分不同屬性的重要程度,本文提出一種基于屬性加權(quán)的k最近鄰(attribute-weighted k-nearest neighbor,AKNN)算法,該算法根據(jù)各屬性對分類結(jié)果的貢獻,賦予不同屬性不同的權(quán)值。
步驟1 計算出屬性的權(quán)重矩陣Wa=(wa1wa2…wad),其中wa1、wa2…wad分別代表每個屬性的對應(yīng)權(quán)重,由式(4)計算得到。
(5)
式中:符號°代表哈達瑪乘積。
(6)
(7)
由AKNN算法的步驟1與步驟2可知,不同于傳統(tǒng)KNN算法沒有考慮各屬性對分類結(jié)果的影響各不相同,AKNN算法根據(jù)不同屬性對分類結(jié)果的影響程度計算屬性的權(quán)值,并通過屬性加權(quán)的方法削減不重要屬性對分類結(jié)果的影響。
實驗數(shù)據(jù)來源于中國氣象數(shù)據(jù)網(wǎng)(http://data.cma.cn/)提供的2015~2018年6月~8月南京地面觀測站點的觀測資料。根據(jù)降水量的大小,將資料中的樣本分為無雨、小雨、中雨、大雨與暴雨5類,并將它們相應(yīng)標記為{0,1,2,3,4}。考慮到氣象部門的降雨量等級劃分標準多按12 h或24 h計算,本文采用防汛部門的1 h降雨量等級劃分方法對樣本的降雨量進行劃分,具體劃分標準見表1。
表1 1 h降水量等級劃分
考慮各屬性與降水量的相關(guān)性,本文選擇大氣壓強(百帕)、風(fēng)向(度)、風(fēng)速(米/秒)、氣溫(攝氏度)、相對濕度(百分率)作為降水分類預(yù)測的樣本屬性[10]。不同氣象要素往往具有不同的量綱和量綱單位,為了消除氣象要素之間的量級差異,需要把不同氣象要素的數(shù)據(jù)統(tǒng)一到同一數(shù)量級,即對樣本數(shù)據(jù)進行歸一化處理。歸一化公式如式(8)所示
(8)
應(yīng)用AKNN算法構(gòu)建的南京地面觀測站點的降水量預(yù)報模型可表述如下:
(9)
另外,給出待預(yù)報的樣本xt如式(10)所示
xt=xt1xt2xt3xt4xt5
(10)
式中:xtj表示待預(yù)報的樣本xt的第j個氣象屬性值。
為了驗證本文提出的降水預(yù)報模型的效果,首先采用10-折交叉驗證方法將數(shù)據(jù)集劃分訓(xùn)練樣本與測試樣本,然后根據(jù)第3節(jié)所述步驟分別進行降水量等級預(yù)報實驗與晴雨預(yù)報實驗。本實驗采用python語言編程實現(xiàn),硬件環(huán)境為Inter(R) Core(TM) i5-3470 CPU 3.20 GHz。
在降水量等級預(yù)報實驗中,為了驗證基于AKNN算法的降水預(yù)報模型的先進性,將本文方法與其它降水預(yù)報模型進行比較。參與實驗的其它模型分別是基于KNN算法的降水預(yù)報模型與基于距離加權(quán)k最近鄰(distance-weighted k-nearest neighbor,WKNN)算法的降水預(yù)報模型。顯然,分類算法是3種降水預(yù)報模型的唯一區(qū)別,即模型的最終預(yù)測性能取決于分類算法的顯著性。因此選擇準確率作為評估模型性能和預(yù)測精度的指標,具體公式如式(11)所示
(11)
由于實驗資料中類標簽為4(暴雨)的樣本個數(shù)較少,參數(shù)k取值從1~5,測試3種降水預(yù)報模型的預(yù)報準確率,得到的結(jié)果見表2。由表2可以看出:在參數(shù)k取值相同的情況下,本文提出的基于AKNN算法的降水預(yù)報方法的準確率高于其它兩種降水預(yù)報方法;算法相同的條件下,k值與降水預(yù)報的準確率基本成正相關(guān);從總體趨勢顯示,與KNN算法和WKNN算法相比,AKNN算法進一步降低了分類性能對參數(shù)k的依賴性。
固定參數(shù)k的數(shù)值為3,計算上述3種降水預(yù)報模型在每類樣本上的預(yù)報標準誤差,得到結(jié)果如圖1所示。由圖1可以看出:由于各類樣本在實驗資料中所占比重的不同,3種算法對降水等級為無雨和小雨的樣本同時表現(xiàn)出較好的性能,而對降雨量大的樣本表現(xiàn)的性能都較差;針對降水量大的樣本(降水等級為大雨或暴雨),基于AKNN算法的降水等級預(yù)報模型的性能優(yōu)于其它兩種模型。
表2 3種降水量預(yù)報方法的預(yù)報準確率對比
圖1 3種模型的降水預(yù)報標準誤差
為了進一步檢驗降水預(yù)報模型的性能,分別利用上述3種降水預(yù)報模型對實驗資料進行晴雨預(yù)報。本文采用文獻[11]的建議,使用準確率、TS評分、正樣本概括率(SAR)和漏報率(MAR)作為晴雨預(yù)報的性能評價指標。其中準確率的計算方法見式(11),TS評分、正樣本概括率和漏報率的計算方法分別見式(12)、式(13)和式(14)
(12)
(13)
(14)
hits、misses、false、correct的含義見表3。
表3 模型預(yù)報與觀測列聯(lián)表
根據(jù)參考文獻[12]和實驗資料中類標簽為4(暴雨)的樣本數(shù)目,參數(shù)k取值從1~12,測試3種降水預(yù)報模型的性能,得到的晴雨預(yù)報效果如圖2-圖5所示。圖2、圖3、圖4和圖5分別顯示了基于KNN算法、基WKNN算法和基于AKNN算法3種晴雨預(yù)報方法在不同k值情況下的準確率變化、TS評分變化、正樣本概括率變化和漏報率變化。在晴雨預(yù)報中,準確率、TS評分和正樣本概括率的數(shù)值越高說明模型對降水情況的預(yù)測性能越好。從圖2-圖4可以看出,本文提出的晴雨預(yù)報方法,在準確率、TS評分和正樣本概括率上總是優(yōu)于另外兩種晴雨預(yù)報方法。也就是說,基于AKNN算法的晴雨預(yù)報不僅在總體上具有更好的分類精度而且對有雨的情況具有更好的預(yù)測性能。此外,在晴雨預(yù)報中,模型的漏報率越小說明模型的預(yù)測性能越好。從圖5可以看出,在參數(shù)k取值相同的情況下,本文提出的模型可以更好地減少有雨類樣本的漏報。以k=5為例,基于KNN算法的降水模型的漏報率為30.74%,而基于本文算法的降水模型的漏報率為22.65%,比前者降低了8.09%。
圖2 3種預(yù)報方法的準確率對比
圖3 3種預(yù)報方法的TS評分對比
圖4 3種預(yù)報方法的正樣本概括率評分對比
圖5 3種預(yù)報方法的漏報率對比
本文首先提出一種改進的k最近鄰算法,該算法通過屬性加權(quán)的方式提高重要屬性對分類結(jié)果的影響,可以有效降低算法對參數(shù)k的依賴性。然后在改進k最近鄰算法的基礎(chǔ)上,提出了一種降水預(yù)報方法。實驗結(jié)果表明,基于AKNN算法的降水預(yù)報方法的總體預(yù)報效果較好,并在一定程度上提高了大降雨量樣本的預(yù)測精度。然而針對降雨量大的天氣,模型的表現(xiàn)性能仍較差。因此,下一步擬考慮將本文改進的k最近鄰算法與類別子空間的思想相結(jié)合,以進一步提高降水量等級預(yù)報的預(yù)測精度。