周 蕓,杜景林,陶 曄
(南京信息工程大學 電子與信息工程學院,江蘇 南京 210044)
由于降水天氣成因復雜且形勢多變,傳統降水預報方法的準確度難以滿足人民的需求[1,2]。近年,越來越多的數據挖掘與人工智能技術被應用于降水預報領域,并表現出比傳統降水預報方法更好的性能[3]。Du J等[4]為提高模型的性能,提出基于粒子群算法優化支持向量機參數(PSO-SVM)的降水預報模型。Huang M等[5]提出一種基于距離加權的k最近鄰算法,并將該算法用于降水等級預報與晴雨預報,改進后的方法具有較好的預報效果。Haidar A等[6]將遺傳算法與前饋神經網絡相結合,首先利用遺傳算法選擇合適的預報因子,然后應用前饋神經網絡構建降水預報模型,對澳大利亞東部地區的月平均降水進行預報。然而這些方法在搭建降水預報模型時都未曾考慮不同氣象因子對降水量的影響程度存在相異性。針對上述問題,本文提出一種基于屬性加權的k最近鄰算法,通過各屬性上不同類別的數據分布情況,計算各屬性的權值,并將此算法用于南京地面觀測站的降水預報。本文建立的降水預報模型在準確率、TS評分等降水預測評價指標上均有所提高和完善。


(1)

(2)
(3)

在自然場景下的分類問題,不同屬性對分類結果的影響各不相同[8]。通常認為屬性空間上的類別分布可以表示屬性的重要度,屬性空間上類內分布越集中,類間分布越分散,越有利于分類預測,這些屬性對于分類結果的重要性也就越高[9]。
(4)
式中:wa表示屬性a的權重,σai表示在屬性a上類標簽為Ci的屬性值的標準差;i∩j表示在屬性a上類標簽為Cj的屬性值落在類標簽為Ci的屬性值區間的樣本個數;i∪j表示在屬性a上類標簽為Ci和類標簽為Cj的樣本個數總和;α為縮放因子,通過實驗經驗選取,本文將其值設置為常數0.25。
由式(4)可以看出,類內分布情況可由屬性上類別的標準差σai表示,σai值越小表示該屬性的類內分布越集中;類間分布情況可由屬性上不同類別樣本的交集與并集的比值表示,該值越小表示該屬性的類間分布越分散。通過屬性空間上同類數據分布的內聚性和異類數據的耦合性可以表示屬性的重要度。
傳統KNN算法在進行分類預測時,將參與分類的屬性視為同等重要,即為每個屬性都設置相同的權值。然而在實際應用中,不同屬性對分類結果的影響各不相同。以降水預報為例,對降水預測結果造成重要影響的通常是預報因子中的一個或幾個關鍵因子。因此在對多維數據集進行分類預測時,應當充分考慮不同屬性與類別的關系緊密程度。為了區分不同屬性的重要程度,本文提出一種基于屬性加權的k最近鄰(attribute-weighted k-nearest neighbor,AKNN)算法,該算法根據各屬性對分類結果的貢獻,賦予不同屬性不同的權值。
步驟1 計算出屬性的權重矩陣Wa=(wa1wa2…wad),其中wa1、wa2…wad分別代表每個屬性的對應權重,由式(4)計算得到。

(5)
式中:符號°代表哈達瑪乘積。

(6)

(7)
由AKNN算法的步驟1與步驟2可知,不同于傳統KNN算法沒有考慮各屬性對分類結果的影響各不相同,AKNN算法根據不同屬性對分類結果的影響程度計算屬性的權值,并通過屬性加權的方法削減不重要屬性對分類結果的影響。
實驗數據來源于中國氣象數據網(http://data.cma.cn/)提供的2015~2018年6月~8月南京地面觀測站點的觀測資料。根據降水量的大小,將資料中的樣本分為無雨、小雨、中雨、大雨與暴雨5類,并將它們相應標記為{0,1,2,3,4}??紤]到氣象部門的降雨量等級劃分標準多按12 h或24 h計算,本文采用防汛部門的1 h降雨量等級劃分方法對樣本的降雨量進行劃分,具體劃分標準見表1。

表1 1 h降水量等級劃分
考慮各屬性與降水量的相關性,本文選擇大氣壓強(百帕)、風向(度)、風速(米/秒)、氣溫(攝氏度)、相對濕度(百分率)作為降水分類預測的樣本屬性[10]。不同氣象要素往往具有不同的量綱和量綱單位,為了消除氣象要素之間的量級差異,需要把不同氣象要素的數據統一到同一數量級,即對樣本數據進行歸一化處理。歸一化公式如式(8)所示
(8)

應用AKNN算法構建的南京地面觀測站點的降水量預報模型可表述如下:

(9)
另外,給出待預報的樣本xt如式(10)所示
xt=xt1xt2xt3xt4xt5
(10)
式中:xtj表示待預報的樣本xt的第j個氣象屬性值。

為了驗證本文提出的降水預報模型的效果,首先采用10-折交叉驗證方法將數據集劃分訓練樣本與測試樣本,然后根據第3節所述步驟分別進行降水量等級預報實驗與晴雨預報實驗。本實驗采用python語言編程實現,硬件環境為Inter(R) Core(TM) i5-3470 CPU 3.20 GHz。
在降水量等級預報實驗中,為了驗證基于AKNN算法的降水預報模型的先進性,將本文方法與其它降水預報模型進行比較。參與實驗的其它模型分別是基于KNN算法的降水預報模型與基于距離加權k最近鄰(distance-weighted k-nearest neighbor,WKNN)算法的降水預報模型。顯然,分類算法是3種降水預報模型的唯一區別,即模型的最終預測性能取決于分類算法的顯著性。因此選擇準確率作為評估模型性能和預測精度的指標,具體公式如式(11)所示

(11)
由于實驗資料中類標簽為4(暴雨)的樣本個數較少,參數k取值從1~5,測試3種降水預報模型的預報準確率,得到的結果見表2。由表2可以看出:在參數k取值相同的情況下,本文提出的基于AKNN算法的降水預報方法的準確率高于其它兩種降水預報方法;算法相同的條件下,k值與降水預報的準確率基本成正相關;從總體趨勢顯示,與KNN算法和WKNN算法相比,AKNN算法進一步降低了分類性能對參數k的依賴性。
固定參數k的數值為3,計算上述3種降水預報模型在每類樣本上的預報標準誤差,得到結果如圖1所示。由圖1可以看出:由于各類樣本在實驗資料中所占比重的不同,3種算法對降水等級為無雨和小雨的樣本同時表現出較好的性能,而對降雨量大的樣本表現的性能都較差;針對降水量大的樣本(降水等級為大雨或暴雨),基于AKNN算法的降水等級預報模型的性能優于其它兩種模型。

表2 3種降水量預報方法的預報準確率對比

圖1 3種模型的降水預報標準誤差
為了進一步檢驗降水預報模型的性能,分別利用上述3種降水預報模型對實驗資料進行晴雨預報。本文采用文獻[11]的建議,使用準確率、TS評分、正樣本概括率(SAR)和漏報率(MAR)作為晴雨預報的性能評價指標。其中準確率的計算方法見式(11),TS評分、正樣本概括率和漏報率的計算方法分別見式(12)、式(13)和式(14)
(12)
(13)
(14)
hits、misses、false、correct的含義見表3。

表3 模型預報與觀測列聯表
根據參考文獻[12]和實驗資料中類標簽為4(暴雨)的樣本數目,參數k取值從1~12,測試3種降水預報模型的性能,得到的晴雨預報效果如圖2-圖5所示。圖2、圖3、圖4和圖5分別顯示了基于KNN算法、基WKNN算法和基于AKNN算法3種晴雨預報方法在不同k值情況下的準確率變化、TS評分變化、正樣本概括率變化和漏報率變化。在晴雨預報中,準確率、TS評分和正樣本概括率的數值越高說明模型對降水情況的預測性能越好。從圖2-圖4可以看出,本文提出的晴雨預報方法,在準確率、TS評分和正樣本概括率上總是優于另外兩種晴雨預報方法。也就是說,基于AKNN算法的晴雨預報不僅在總體上具有更好的分類精度而且對有雨的情況具有更好的預測性能。此外,在晴雨預報中,模型的漏報率越小說明模型的預測性能越好。從圖5可以看出,在參數k取值相同的情況下,本文提出的模型可以更好地減少有雨類樣本的漏報。以k=5為例,基于KNN算法的降水模型的漏報率為30.74%,而基于本文算法的降水模型的漏報率為22.65%,比前者降低了8.09%。

圖2 3種預報方法的準確率對比

圖3 3種預報方法的TS評分對比

圖4 3種預報方法的正樣本概括率評分對比

圖5 3種預報方法的漏報率對比
本文首先提出一種改進的k最近鄰算法,該算法通過屬性加權的方式提高重要屬性對分類結果的影響,可以有效降低算法對參數k的依賴性。然后在改進k最近鄰算法的基礎上,提出了一種降水預報方法。實驗結果表明,基于AKNN算法的降水預報方法的總體預報效果較好,并在一定程度上提高了大降雨量樣本的預測精度。然而針對降雨量大的天氣,模型的表現性能仍較差。因此,下一步擬考慮將本文改進的k最近鄰算法與類別子空間的思想相結合,以進一步提高降水量等級預報的預測精度。