本發(fā)明屬于數(shù)據(jù)挖掘技術(shù)領(lǐng)域,尤其涉及一種基于集成極限學(xué)習(xí)機(jī)的空氣質(zhì)量預(yù)測(cè)方法。
背景技術(shù):
目前空氣質(zhì)量預(yù)測(cè)的主要手段是采用數(shù)值模擬法,其中cmaq(communitymultiscaleairquality)是最流行的方法。數(shù)值模擬法通過對(duì)空氣質(zhì)量相關(guān)因子進(jìn)行物理的模擬來達(dá)到預(yù)測(cè)空氣中污染物的濃度。數(shù)值模擬法由于采用物理模擬,可以反映出空氣質(zhì)量相關(guān)因子對(duì)空氣質(zhì)量的影響機(jī)制,但是模擬需要進(jìn)行大量的計(jì)算,因此速度很慢。在如今的大數(shù)據(jù)時(shí)代,機(jī)器學(xué)習(xí)已經(jīng)成了十分重要的預(yù)測(cè)方法,并且已經(jīng)在很多領(lǐng)域成功的解決了問題。ruiyunyu等在2016年,lwang等在2014年分別使用隨機(jī)森林(randomforest,rf)和支持向量機(jī)(supportvectormachine,svm)對(duì)空氣質(zhì)量進(jìn)行了預(yù)測(cè)也去的了很不錯(cuò)的效果。xiangli等利用深度學(xué)習(xí)技術(shù)構(gòu)建了空氣質(zhì)量的預(yù)測(cè)模型效果良好而且擁有很高的精度。任何一種機(jī)器學(xué)習(xí)方法相比傳統(tǒng)數(shù)值模擬的方法,都會(huì)更快,而深度學(xué)習(xí)則能達(dá)到更高的精度。
rf是一個(gè)很流行的算法,它是一種決策樹的集成算法,它訓(xùn)練速度快,不需要進(jìn)行特征選取,并且有著不錯(cuò)的泛化能力和精度,但是相比起更加流行的gradientboosting算法,它的精度略差。svm通過將線性不可分的數(shù)據(jù)映射到高維空間中,達(dá)到將數(shù)據(jù)轉(zhuǎn)換為線性可分的數(shù)據(jù),進(jìn)而進(jìn)行非線性擬合。svm是一個(gè)具有出色泛化能力的算法,但是訓(xùn)練svm十分消耗時(shí)間,而且在大數(shù)據(jù)集上往往表現(xiàn)較差。svm是單輸出的算法,在面對(duì)多輸出回歸問題上比較無力。深度學(xué)習(xí)技術(shù)在近十年來是最流行的機(jī)器學(xué)習(xí)算法,區(qū)別于傳統(tǒng)機(jī)器學(xué)習(xí),深度學(xué)習(xí)將特征提取與分類算法或回歸算法結(jié)合為一個(gè)整體,將原始數(shù)據(jù)直接輸入算法中訓(xùn)練即可。深度學(xué)習(xí)常常利用bp神經(jīng)網(wǎng)絡(luò)作為全連接層,而bp神經(jīng)網(wǎng)絡(luò)容易陷入局部極值。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明要解決深度學(xué)習(xí)中全連接層使用多層感知器容易陷入局部極值的問題,提供一種基于集成極限學(xué)習(xí)機(jī)的空氣質(zhì)量預(yù)測(cè)方法,具有很高的預(yù)測(cè)精度。
本發(fā)明使用卷積神經(jīng)網(wǎng)絡(luò)(convolutionalneuralnetwork,cnn)對(duì)空氣質(zhì)量的特征進(jìn)行提取,然后使用gradientboosting對(duì)極限學(xué)習(xí)機(jī)(extremelearningmachine,elm)進(jìn)行集成,其中elm采用線性修正單元(rectifiedlinearunit,relu)作為隱藏層的激活函數(shù)。用集成后的極限學(xué)習(xí)機(jī)代替cnn訓(xùn)練好的全連接層,用cnn提取帶標(biāo)簽數(shù)據(jù)中的抽象特征來訓(xùn)練gradientelmboosting(gbelm),形成一種使用cnn作為特征提取器與gbelm相結(jié)合的空氣質(zhì)量預(yù)測(cè)模型。elm是一種單隱藏層的前饋神經(jīng)網(wǎng)絡(luò),相比用bp算法進(jìn)行訓(xùn)練,elm通過隨機(jī)初始化輸入層與隱藏層的連接權(quán)重與偏置,然后使用最小二乘求解輸出層與隱藏層的連接權(quán)值,elm的這種訓(xùn)練方法能夠取得唯一全局極小值,因此往往能獲得很好的泛化性能。在傳統(tǒng)的elm中,隱藏層的激活函數(shù)常常采用sigmoid,而在深度學(xué)習(xí)領(lǐng)域中,由于relu自帶稀疏性限制,它已經(jīng)慢慢取代了sigmoid。在elm中relu很少被應(yīng)用,并且更少用于回歸問題。在elm中使用relu作為隱藏層的激活函數(shù)可以為elm增加稀疏度限制從而提升elm的預(yù)測(cè)精度。集成方法往往是提升預(yù)測(cè)精度的有效方法。gradientdecisiontreeboosting(gbdt)是一種決策樹的集成方法,在各種數(shù)據(jù)挖掘競賽中,gbdt都表現(xiàn)的很好。gradientboosting要依次訓(xùn)練多個(gè)弱分類器,每個(gè)弱分類器負(fù)責(zé)預(yù)測(cè)損失函數(shù)下降的梯度來調(diào)整預(yù)測(cè)結(jié)果。gradientboosting不僅適用于分類問題,也適用于回歸問題。gbdt在回歸問題上多是單輸出的,應(yīng)用到elm中需要將其擴(kuò)展為多輸出的算法。因?yàn)間radientboosting可以提升算法的精度,所以使用gbelm代替cnn的全連接層可以更進(jìn)一步提升預(yù)測(cè)精度。
為實(shí)現(xiàn)上述目的,本發(fā)明采用如下的技術(shù)方案:
一種基于極限學(xué)習(xí)機(jī)的空氣質(zhì)量預(yù)測(cè)方法包括如下步驟:
步驟1、獲取需要進(jìn)行預(yù)測(cè)分析的空氣質(zhì)量數(shù)據(jù),并且劃分為訓(xùn)練數(shù)據(jù)集與測(cè)試數(shù)據(jù)集;
步驟2、基于訓(xùn)練數(shù)據(jù)集對(duì)cnn進(jìn)行訓(xùn)練并選擇在各個(gè)驗(yàn)證集中表現(xiàn)的模型作為特征提取的模型;
步驟3、將cnn全連接層第一個(gè)層的激活值作為gbelm的輸入,訓(xùn)練gbelm,選擇在各個(gè)驗(yàn)證集中表現(xiàn)最好的gbelm作為預(yù)測(cè)模型;使用gbelm來代替步驟2中得到的cnn的全連接層,得到最終的空氣質(zhì)量預(yù)測(cè)模型;
步驟4、將測(cè)試數(shù)據(jù)輸入到空氣質(zhì)量預(yù)測(cè)模型,計(jì)算得到測(cè)試數(shù)據(jù)的抽象特征,再輸入到gbelm中得到每個(gè)elm的輸出值進(jìn)行加和,即可得到預(yù)測(cè)結(jié)果。
作為優(yōu)選,步驟2具體為:初始化一個(gè)卷積神經(jīng)網(wǎng)絡(luò)的卷積核w,連接權(quán)值w與偏置b,使用x和y訓(xùn)練cnn,訓(xùn)練cnn的具體步驟如下:
步驟2.1、計(jì)算卷積結(jié)果和池化結(jié)果
計(jì)算卷積層激活值,公式如下:
h=g(conv(w,x)+b)
其中,h為卷積層激活值,其為空氣質(zhì)量相關(guān)因子的抽象特征,conv表示卷積操作,b用來調(diào)整卷積的結(jié)果,x={x1,x2,...xi,...xn},x中的每一個(gè)變量代表與空氣質(zhì)量相關(guān)的因子,如風(fēng)力,風(fēng)向,二氧化硫濃度,x取當(dāng)前時(shí)刻空氣質(zhì)量相關(guān)因子的歷史數(shù)據(jù);
步驟2.2、計(jì)算全連接層激活值,公式如下:
a=g(w*pool)+b
其中,a為全連接層激活值,其為空氣質(zhì)量相關(guān)因子的抽象特征,全連接層第一層的激活值還可以對(duì)池化的結(jié)果進(jìn)行降維以去掉無用的項(xiàng),pool為計(jì)算池化卷積結(jié)果;
步驟2.3、使用反向傳播算法更新卷積核,連接權(quán)重與偏置;
步驟2.4、重復(fù)步驟2.1)到2.3)直到cnn收斂或者達(dá)到設(shè)定的迭代次數(shù)。
作為優(yōu)選,步驟3具體為:
步驟3.1、獲取cnn全連接層第一層的激活值,將cnn全連接層第一層的激活值作為gbelm的輸入,y為gbelm的期望輸出,y={y1,y2,...yi,...yn},其中,每一個(gè)變量代表當(dāng)前時(shí)刻未來24小時(shí)每一個(gè)小時(shí)的空氣質(zhì)量,n為24;
步驟3.2、初始化gradientboosting的預(yù)測(cè)結(jié)果為每個(gè)輸出結(jié)果的平均值,即:
f0={mean(y1),mean(y2),...mean(yn)}
其中,f0是模型對(duì)于訓(xùn)練數(shù)據(jù)的初始輸出結(jié)果;
步驟3.3、計(jì)算損失函數(shù)的梯度,所述梯度為模型的損失函數(shù)對(duì)當(dāng)前模型的偏導(dǎo)數(shù),即:
其中,r為當(dāng)前模型損失函數(shù)的梯度,m是模型當(dāng)前迭代次數(shù),即正在訓(xùn)練的第m個(gè)elm;
步驟3.4、使用gbelm的輸入數(shù)據(jù)訓(xùn)練一個(gè)elm來預(yù)測(cè)r,首先隨機(jī)初始化elm輸入層與隱藏層的連接權(quán)值w與偏置b,計(jì)算隱藏層的激活值h:
h=g(x*w+b)
權(quán)值與偏置的作用與cnn全連接層一致,隱藏層的激活值也是對(duì)輸入數(shù)據(jù)的抽象特征,將訓(xùn)練好的elm記為hm(x);
步驟3.5、求解elm輸出層與隱藏層的連接權(quán)值β,使用最小二乘法即可求解β:
其中,
hm(x)=g(x*w+b)*β
計(jì)算得到hm(x)的值就是梯度r的預(yù)測(cè)值;
步驟3.6、計(jì)算當(dāng)前迭代的模型輸出:
fm(x)=fm-1(x)+γhm(x)
fm(x)就是訓(xùn)練第m個(gè)elm后模型輸出,fm-1(x)則是訓(xùn)練第m-1個(gè)elm后模型的輸出;
步驟3.7、對(duì)于m=1,2,3,...,m重復(fù)步驟3.3至步驟3.5,m為模型的迭代次數(shù),即gradientboosting中elm的個(gè)數(shù);
步驟3.8、完成了對(duì)gbelm的訓(xùn)練,最后只要使用訓(xùn)練好的gbelm代替cnn的全連接層即可完成模型的構(gòu)建。
作為優(yōu)選,步驟4具體為:
給定測(cè)試數(shù)據(jù)test,對(duì)于m=1,2,3,...,m進(jìn)行如下計(jì)算:
fm(test)=fm-1(test)+γhm(test)
fm(test)即為測(cè)試數(shù)據(jù)的輸出結(jié)果。
本發(fā)明通過使用cnn進(jìn)行空氣質(zhì)量特征提取,并使用以relu為隱藏層激活函數(shù)的gbelm對(duì)空氣質(zhì)量進(jìn)行預(yù)測(cè)。使用cnn作為特征提取可以讓特征提取與預(yù)測(cè)融為一個(gè)整體獲取與預(yù)測(cè)結(jié)果更加相關(guān)的特征。elm可以取得目標(biāo)函數(shù)的全局最優(yōu)解,因此可以解決cnn全連接層會(huì)陷入局部極值的問題。relu作為隱藏層的激活函數(shù)可以對(duì)elm的隱藏層加以稀疏度限制,使得網(wǎng)絡(luò)的泛化能力得到進(jìn)一步提升。再通過gradientboosting對(duì)elm進(jìn)行集成,使得多個(gè)elm組成一個(gè)更加魯棒的預(yù)測(cè)模型。cnn特征提取結(jié)合gbelm的方式可以提高模型的泛化能力,進(jìn)而提高預(yù)測(cè)精度。從理論上講本發(fā)明不只適用于空氣質(zhì)量預(yù)測(cè),也適用于其他時(shí)間序列數(shù)據(jù)的預(yù)測(cè)。
附圖說明
圖1為發(fā)明方法的流程圖。
具體實(shí)施方式
以空氣質(zhì)量預(yù)測(cè)為例,以下是結(jié)合實(shí)例與附圖對(duì)本發(fā)明的詳細(xì)說明。
本發(fā)明使用一臺(tái)pc機(jī),并且需要擁有足夠計(jì)算能力的gpu來加速訓(xùn)練。如圖1所示,本發(fā)明提供的一種基于極限學(xué)習(xí)機(jī)的空氣質(zhì)量預(yù)測(cè)方法具體步驟如下:
步驟1、構(gòu)建模型的輸入數(shù)據(jù)與輸出數(shù)據(jù)
構(gòu)建模型的輸入向量x={x1,x2,...xi,...xn}和輸出向量y={y1,y2,...yi,...yn}。x中的每一個(gè)變量代表與空氣質(zhì)量相關(guān)的因子,如風(fēng)力,風(fēng)向,二氧化硫濃度。x取當(dāng)前時(shí)刻空氣質(zhì)量相關(guān)因子的歷史數(shù)據(jù),也可以加入天氣預(yù)報(bào)的預(yù)報(bào)值。y是期望輸出,其中每一個(gè)變量代表當(dāng)前時(shí)刻未來24小時(shí)每一個(gè)小時(shí)的空氣質(zhì)量,因此在空氣質(zhì)量預(yù)測(cè)中n應(yīng)為24。
對(duì)數(shù)據(jù)進(jìn)行預(yù)處理,填補(bǔ)空缺值,剔除異常值和歸一化。歸一化可以去除數(shù)據(jù)的量綱,數(shù)據(jù)將會(huì)被限制在一個(gè)很小的區(qū)間內(nèi),可以是[0,1],[-1,1]等。歸一化最主要的目的是加快神經(jīng)網(wǎng)絡(luò)的收斂。
步驟2、初始化一個(gè)卷積神經(jīng)網(wǎng)絡(luò)的卷積核w,連接權(quán)值w與偏置b。使用x和y訓(xùn)練cnn,訓(xùn)練cnn的具體步驟如下:
步驟2.1、計(jì)算卷積結(jié)果和池化結(jié)果??梢赃x用多個(gè)卷積層與池化層結(jié)合,這樣可以使得最底層的網(wǎng)絡(luò)提取到更好的抽象特征。如果使用多個(gè)卷積層與池化層則需要重復(fù)2.2)和2.3),再將最后一層池化的結(jié)果輸入全連接層。
計(jì)算卷積層激活值。為了與輸入數(shù)據(jù)匹配,卷積核采用一維向量,卷積核可以通過卷積操作將空氣質(zhì)量的相關(guān)因子中轉(zhuǎn)化為用于預(yù)測(cè)的抽象特征,這些抽象特征稱為featuremap,一個(gè)卷積核對(duì)應(yīng)一個(gè)featuremap。使用多個(gè)卷積核可以得到更多的featuremap。為了計(jì)算激活值還需要一個(gè)激活函數(shù)g(x)對(duì)卷積結(jié)果進(jìn)行非線性變化,在空氣質(zhì)量預(yù)測(cè)中使用relu作為激活函數(shù),其定義為:
g(x)=max(x,0)
卷積層激活值有下面的公式計(jì)算:
h=g(conv(w,x)+b)
其中,h為卷積層激活值,卷積層激活值就是空氣質(zhì)量相關(guān)因子的抽象特征,conv表示卷積操作,b用來調(diào)整卷積的結(jié)果。
計(jì)算池化卷積結(jié)果pool。在空氣質(zhì)量預(yù)測(cè)中使用最大池化,最大池化作用于卷積層的空氣質(zhì)量相關(guān)因子的抽象特征h,最大池化可以選出h中對(duì)結(jié)果影響最大的特征,池化的結(jié)果構(gòu)成一個(gè)向量輸入下一層神經(jīng)網(wǎng)絡(luò)中。
步驟2.2、計(jì)算全連接層激活值。使用如下公式計(jì)算:
a=g(w*pool)+b
其中,a為全連接層激活值,也是空氣質(zhì)量相關(guān)因子的抽象特征,其中全連接層第一層的激活值還可以對(duì)池化的結(jié)果進(jìn)行降維以去掉無用的項(xiàng)。
步驟2.3、使用反向傳播算法更新卷積核、連接權(quán)重與偏置,這樣可以使卷積核提取到更好的抽象特征,連接權(quán)重可以更好提取抽象特征和降維,偏置對(duì)神經(jīng)網(wǎng)絡(luò)的調(diào)整結(jié)果也更會(huì)更好。
步驟2.4、重復(fù)步驟2.1)到2.3)直到cnn收斂或者達(dá)到設(shè)定的迭代次數(shù)。
為了選取最優(yōu)的cnn參數(shù),通常使用k折交叉驗(yàn)證來對(duì)cnn進(jìn)行訓(xùn)練。通過k折交差驗(yàn)證可以選出泛化能力最強(qiáng)的模型,從而可以在一定程度上避免過擬合。
步驟3、訓(xùn)練gbelm并代替cnn的全連接層
步驟3.1、獲取cnn全連接層第一層的激活值,這些激活值就是使用cnn提取到的空氣質(zhì)量相關(guān)因子的抽象特征。全連接層第一層的激活值對(duì)池化結(jié)果進(jìn)行了降維,更有利于gbelm的訓(xùn)練。將cnn全連接層第一層的激活值作為gbelm的輸入,y為gbelm的期望輸出。
步驟3.2、初始化gradientboosting的預(yù)測(cè)結(jié)果為每個(gè)輸出結(jié)果的平均值,即:
f0={mean(y1),mean(y2),...mean(yn)}
其中,f0是模型對(duì)于訓(xùn)練數(shù)據(jù)的初始輸出結(jié)果。
步驟3.3、計(jì)算損失函數(shù)的梯度,這個(gè)梯度就等于模型的損失函數(shù)對(duì)當(dāng)前模型的偏導(dǎo)數(shù),即:
其中,r為當(dāng)前模型損失函數(shù)的梯度。在使用最小二乘損失函數(shù)時(shí)這個(gè)梯度就是預(yù)測(cè)結(jié)果需要調(diào)整的量。在使用其他損失函數(shù)時(shí)由于無法直接得到調(diào)整量,因此還需要進(jìn)行變換。m是模型當(dāng)前迭代次數(shù),即正在訓(xùn)練的第m個(gè)elm。
步驟3.4、使用gbelm的輸入數(shù)據(jù)訓(xùn)練一個(gè)elm來預(yù)測(cè)r。首先隨機(jī)初始化elm輸入層與隱藏層的連接權(quán)值w與偏置b。計(jì)算隱藏層的激活值h:
h=g(x*w+b)
權(quán)值與偏置的作用與cnn全連接層一致,隱藏層的激活值也是對(duì)輸入數(shù)據(jù)的抽象特征。將訓(xùn)練好的elm記為hm(x)
步驟3.5、求解elm輸出層與隱藏層的連接權(quán)值β,使用最小二乘法即可求解β:
其中,
hm(x)=g(x*w+b)*β
計(jì)算得到hm(x)的值就是梯度r的預(yù)測(cè)值。
使用最小二乘損失函數(shù)時(shí)跳過此步。在使用最小二乘損失函數(shù)以外的損失函數(shù)時(shí),由于梯度r不是預(yù)測(cè)值的調(diào)整量,因此梯度的預(yù)測(cè)值hm(x)也不是調(diào)整量。只需要對(duì)hm(x)進(jìn)行一個(gè)簡單的變換即可得到預(yù)測(cè)結(jié)果的調(diào)整量。只要讓hm(x)乘以一個(gè)變換系數(shù)γ再與之前的預(yù)測(cè)結(jié)果相加使得它與期望輸出所構(gòu)成的損失函數(shù)值最小即可,而在多輸出模型中,除了對(duì)每次迭代計(jì)算γ,還要對(duì)于模型的每一個(gè)輸出都需要計(jì)算一個(gè)γ,因此對(duì)于每一次迭代m=1,2,3...m以及模型的每一個(gè)輸出yi,i=1,2,3...n,γ的計(jì)算方式如下:
γmi=argminγl(y,fm-1(x)+γhm(x))
上述表達(dá)式可以用linesearch算法進(jìn)行求解得到γmi,也就是第m次迭代第i個(gè)輸出對(duì)應(yīng)的γ。
步驟3.6、計(jì)算當(dāng)前迭代的模型輸出:
fm(x)=fm-1(x)+γhm(x)
fm(x)就是訓(xùn)練第m個(gè)elm后模型輸出。fm-1(x)則是訓(xùn)練第m-1個(gè)elm后模型的輸出。
步驟3.7、對(duì)于m=1,2,3,...,m重復(fù)步驟3.3至步驟3.5。其中m為模型的迭代次數(shù),即gradientboosting中elm的個(gè)數(shù)。
步驟3.8、完成了對(duì)gbelm的訓(xùn)練,最后只要使用訓(xùn)練好的gbelm代替cnn的全連接層即可完成模型的構(gòu)建。
步驟4、測(cè)試
給定測(cè)試數(shù)據(jù)test,對(duì)于m=1,2,3,...,m進(jìn)行如下計(jì)算:
fm(test)=fm-1(test)+γhm(test)
fm(test)即為測(cè)試數(shù)據(jù)的輸出結(jié)果。
以上實(shí)施例僅為本發(fā)明的示例性實(shí)施例,不用于限制本發(fā)明,本發(fā)明的保護(hù)范圍由權(quán)利要求書限定。本領(lǐng)域技術(shù)人員可以在本發(fā)明的實(shí)質(zhì)和保護(hù)范圍內(nèi),對(duì)本發(fā)明做出各種修改或等同替換,這種修改或等同替換也應(yīng)視為落在本發(fā)明的保護(hù)范圍內(nèi)。