王 誠(chéng),唐振坤
(南京郵電大學(xué) 通信與信息工程學(xué)院,江蘇 南京 210003)
在如今大數(shù)據(jù)的環(huán)境和背景下,如何從海量的業(yè)務(wù)數(shù)據(jù)中提取出精準(zhǔn)有效的負(fù)載預(yù)測(cè)相關(guān)數(shù)據(jù),使得負(fù)載預(yù)測(cè)工作更為準(zhǔn)確、實(shí)時(shí),從而保障通信系統(tǒng)設(shè)備的穩(wěn)定性是當(dāng)前的研究重點(diǎn)[1-2]。
在設(shè)備故障預(yù)測(cè)領(lǐng)域,國(guó)內(nèi)外進(jìn)行了大量研究,成果顯著。例如:通過(guò)神經(jīng)網(wǎng)絡(luò)+電力系統(tǒng)進(jìn)行故障預(yù)測(cè)和安全評(píng)估;利用專家經(jīng)驗(yàn)參考系統(tǒng)對(duì)變電站的故障進(jìn)行診斷;對(duì)智能輸變電站中故障發(fā)生的動(dòng)態(tài)過(guò)程,通過(guò)Petri網(wǎng)絡(luò)進(jìn)行描述分析等;以及諸多基于數(shù)理統(tǒng)計(jì)概率的方法來(lái)建立模型,從而預(yù)測(cè)故障(如蒙特卡洛仿真法)。
現(xiàn)有的負(fù)載預(yù)測(cè)方法主要分為傳統(tǒng)統(tǒng)計(jì)學(xué)方法和人工智能預(yù)測(cè)方法兩大類。傳統(tǒng)統(tǒng)計(jì)學(xué)方法包括回歸分析法[3]、時(shí)間序列法[4]、灰色模型法[5]等,統(tǒng)計(jì)學(xué)預(yù)測(cè)方法形式簡(jiǎn)單、易于實(shí)現(xiàn),但是只能處理含有少量屬性的樣本,對(duì)樣本數(shù)據(jù)的平穩(wěn)性要求較高,且預(yù)測(cè)精度較低。而隨著人工智能技術(shù)的發(fā)展,以機(jī)器學(xué)習(xí)為基礎(chǔ)的人工智能預(yù)測(cè)方法也隨之興起。典型方法如人工神經(jīng)網(wǎng)絡(luò)(ANN)[6]和支持向量機(jī)(SVM)[7]。
憑借神經(jīng)網(wǎng)絡(luò)對(duì)數(shù)據(jù)強(qiáng)大的映射能力,人工神經(jīng)網(wǎng)絡(luò)已有很多類型(如BP網(wǎng)絡(luò)、RBF網(wǎng)絡(luò)等)被廣泛應(yīng)用于負(fù)載預(yù)測(cè)工作中。在負(fù)荷預(yù)測(cè)中,它能很好地反映歷史數(shù)據(jù)的輸入與輸出之間的關(guān)系,但是也具有預(yù)測(cè)模型泛化誤差較大,且神經(jīng)網(wǎng)絡(luò)的隱含層選取難以確定等缺點(diǎn)。作為新興的智能算法,SVM有很多優(yōu)越的性能,也克服了人工神經(jīng)網(wǎng)絡(luò)收斂速度慢、局部極小點(diǎn)等問(wèn)題,但它也存在核參數(shù)和懲罰系數(shù)難以確定的缺陷。且這些模型和理論在面對(duì)準(zhǔn)確性較高的小數(shù)據(jù)集時(shí),能較好地在單機(jī)環(huán)境下實(shí)現(xiàn),可是在面對(duì)高維度的大數(shù)據(jù)集時(shí),就難以滿足負(fù)載預(yù)測(cè)高精度、實(shí)時(shí)性的要求。
該文提出一種基于隨機(jī)森林算法的負(fù)載預(yù)警[8]方法,并在具體實(shí)現(xiàn)上引入Spark平臺(tái)以達(dá)到并行化的改進(jìn)。通過(guò)引入公開的分布式數(shù)據(jù)集,在實(shí)驗(yàn)室搭建的分布式集群上進(jìn)行訓(xùn)練和測(cè)試,將集群預(yù)測(cè)的結(jié)果和單機(jī)模型預(yù)測(cè)結(jié)果加以比較,并逐步擴(kuò)大數(shù)據(jù)集,以驗(yàn)證模型的預(yù)測(cè)能力。
美國(guó)科學(xué)院院士Leo Breiman綜合了Bagging集成、CART決策樹以及貝爾實(shí)驗(yàn)室的Tin Kam Ho等人提出的特征隨機(jī)選取思想,于2001年提出了隨機(jī)森林算法[9]。Breiman給出了與隨機(jī)森林相關(guān)的一系列數(shù)學(xué)推導(dǎo)與證明,該文可以被看作是隨機(jī)森林方法的經(jīng)典闡述。隨機(jī)森林作為一種集成算法,改變了以往分類器過(guò)擬合的問(wèn)題,參數(shù)很少也使其非常容易操作,同時(shí)隨機(jī)森林也具有計(jì)算變量重要性的能力和分析所有數(shù)據(jù)之間的內(nèi)部結(jié)構(gòu)關(guān)系的能力。隨機(jī)森林算法的基本原理為:
(1)對(duì)于一個(gè)大小為N的數(shù)據(jù)集,假設(shè)隨機(jī)森林算法有k個(gè)數(shù)目,隨機(jī)森林中的每棵樹都需要從上述數(shù)據(jù)集N中通過(guò)隨機(jī)有放回的方式抽樣k個(gè)數(shù)據(jù)以作為訓(xùn)練集N0的樣本。這種方式就是Bootstrap Sample抽樣法。
(2)記每一個(gè)輸入的數(shù)據(jù)特征維度為M,設(shè)一個(gè)常數(shù)m(要求m (3)重復(fù)執(zhí)行第2步,直到生成K棵決策樹,從而組合成隨機(jī)森林。 需要注意的是,第1步中的抽樣過(guò)程必須滿足隨機(jī)且有放回的條件,從而保證每棵樹的訓(xùn)練集是隨機(jī)且有交集的,在這個(gè)前提條件下,每棵樹的訓(xùn)練結(jié)果對(duì)最終結(jié)果才是有效的。而第3步中做不剪枝操作,是為了增加決策樹構(gòu)建的隨機(jī)性,加快決策樹的生成。 Spark[10-11]是一款基于內(nèi)存的并行分布式計(jì)算框架,相較于傳統(tǒng)的MapReduce基于磁盤進(jìn)行數(shù)據(jù)處理的計(jì)算框架,Spark將每一輪的輸出結(jié)果都緩存在內(nèi)存中,避免從HDFS中多次讀取數(shù)據(jù)導(dǎo)致的冗余資源開銷,更適合需要多次迭代的算法。 Spark的基本運(yùn)行流程是: (1)Spark在驅(qū)動(dòng)節(jié)點(diǎn)Driver端運(yùn)行主函數(shù)并創(chuàng)建SparkContext以構(gòu)建Spark Application的運(yùn)行環(huán)境,創(chuàng)建完成后的SparkContext向資源管理器Cluster Manager申請(qǐng)所需要的CPU、內(nèi)存等資源并申請(qǐng)運(yùn)行多個(gè)執(zhí)行節(jié)點(diǎn)Executor,Cluster Manager分配并啟動(dòng)各個(gè)Executor。 (2)SparkContext構(gòu)建有向無(wú)環(huán)圖DAG以反映彈性分布式數(shù)據(jù)集RDD之間的依賴關(guān)系,并將其分解成任務(wù)集TaskSet發(fā)送給有向無(wú)環(huán)圖調(diào)度器TaskScheduler。 (3)各Executor向SparkContext申請(qǐng)Task,TaskScheduler將Task分發(fā)給各個(gè)Executor,同時(shí)SparkContext將打好的程序Jar包發(fā)送給各個(gè)Executor,各Executor執(zhí)行結(jié)束后將結(jié)果收集給Driver端,最終釋放資源。 初始數(shù)據(jù)集的預(yù)處理過(guò)程是數(shù)據(jù)挖掘和分析當(dāng)中非常重要的一步。電力系統(tǒng)負(fù)荷對(duì)數(shù)據(jù)集主要是設(shè)備運(yùn)行時(shí)的一系列模擬量數(shù)據(jù),如系統(tǒng)工作頻率,A、B、C三相的相電壓,線電壓,電流,有功功率等。交流電系統(tǒng)中數(shù)據(jù)種類繁多,體量龐大,易產(chǎn)生大量的冗余數(shù)據(jù)。除此之外,在系統(tǒng)的工作過(guò)程中,由于監(jiān)測(cè)設(shè)備自身測(cè)量精度不足、通信過(guò)程中數(shù)據(jù)丟失以及運(yùn)維人員的誤操作(如拉閘斷電)等主觀或客觀因素的影響,會(huì)造成數(shù)據(jù)的缺失或異常。這部分?jǐn)?shù)據(jù)參考價(jià)值較低,如果將它們也納入預(yù)測(cè)體系會(huì)對(duì)權(quán)重產(chǎn)生較大影響,從而導(dǎo)致預(yù)測(cè)精度的下降。 (1)異常值平滑。 如上文描述,由于環(huán)境或采集系統(tǒng)自身原因的影響,會(huì)有一部分?jǐn)?shù)據(jù)和其他數(shù)據(jù)有明顯的差異,這些異常數(shù)據(jù)會(huì)對(duì)實(shí)驗(yàn)數(shù)據(jù)集產(chǎn)生負(fù)面影響,使數(shù)據(jù)集的噪聲增大,從而使預(yù)測(cè)結(jié)果出現(xiàn)偏差。因此,需要對(duì)噪聲數(shù)據(jù)進(jìn)行預(yù)處理。一種最簡(jiǎn)單的處理方法就是直接舍棄異常值,但這樣會(huì)使數(shù)據(jù)產(chǎn)生不連貫性,因此考慮利用相近時(shí)間的正常數(shù)據(jù)作為權(quán)重進(jìn)行平滑處理,見公式(1): x(n,t)=w1x(n1,t)+w2x(n2,t) (1) 其中,x(n,t)表示第n天t時(shí)刻相應(yīng)的特征指標(biāo),w1x(n1,t)表示第n-1天t時(shí)刻對(duì)應(yīng)的特征指標(biāo),w2x(n2,t)表示第n+1天t時(shí)刻對(duì)應(yīng)的特征指標(biāo),這種方式綜合考慮了異常值附近數(shù)據(jù)的特征指標(biāo),對(duì)異常值進(jìn)行了合理的平滑。 (2)特征歸一化。 不同的特征參數(shù)的取值范圍、單位等差異較大,取值范圍較大的參數(shù)可能對(duì)取值范圍較小的參數(shù)產(chǎn)生特征覆蓋。因此,有必要對(duì)各特征參數(shù)做歸一化處理,如公式(2)所示: (2) (1)生成RDD數(shù)據(jù)集。 利用Context中的parallelize()函數(shù),將預(yù)處理后的相關(guān)數(shù)據(jù)生成RDD數(shù)據(jù)集。 (2)生成決策樹。 生成決策樹[12]是整個(gè)并行隨機(jī)森林算法的關(guān)鍵,該文采用經(jīng)典Bagging算法對(duì)RDD數(shù)據(jù)集有放回地進(jìn)行抽樣,形成k個(gè)大小一致的樣本集yi(i=1,2,…,k)。有放回地抽取說(shuō)明這k個(gè)樣本集是等價(jià)的,對(duì)原始數(shù)據(jù)的特征做了均等的保留,這是并行化計(jì)算的前提。 從M個(gè)輸入特征中隨機(jī)選擇m個(gè)特征[13](m≤M)作為決策樹當(dāng)前節(jié)點(diǎn)的分裂屬性集,對(duì)m個(gè)屬性測(cè)評(píng),如比較屬性的Gini指數(shù)(如公式(3)計(jì)算),從中選擇最優(yōu)分裂特征和切分點(diǎn),將訓(xùn)練數(shù)據(jù)集分配到兩個(gè)子節(jié)點(diǎn)中去。如此遞歸地形成決策樹,k個(gè)決策樹的形成將調(diào)用Spark進(jìn)行并行往復(fù)的迭代計(jì)算,為隨機(jī)森林模型做準(zhǔn)備。 Gini指數(shù)計(jì)算: (3) (3)生成隨機(jī)森林模型。 將所有決策樹[12]的結(jié)果整合起來(lái),得出整個(gè)森林的結(jié)果。該文將隨機(jī)森林用作回歸,即將每個(gè)決策樹的預(yù)測(cè)結(jié)果求和取均值,這個(gè)過(guò)程由最后一個(gè)RDD來(lái)實(shí)現(xiàn),如圖1所示。 實(shí)驗(yàn)數(shù)據(jù)集選取某機(jī)房UPS部分歷史監(jiān)控?cái)?shù)據(jù)圖,監(jiān)測(cè)主要指標(biāo)作為樣本屬性,如表1所示。選取多組容量不同的樣本(由于實(shí)驗(yàn)數(shù)據(jù)有限,將原始數(shù)據(jù)人為擴(kuò)大),如表2所示。檢驗(yàn)隨著數(shù)據(jù)量的增大,各方法的預(yù)測(cè)精度是否會(huì)受影響。 表1 數(shù)據(jù)集樣本屬性 表2 數(shù)據(jù)集樣本容量 實(shí)驗(yàn)環(huán)境是基于Spark平臺(tái)的分布式計(jì)算集群,采用一臺(tái)服務(wù)器作為driver,四臺(tái)服務(wù)器作為worker。每個(gè)節(jié)點(diǎn)的driver核數(shù)為雙核,內(nèi)存為16 G,硬盤為500 G;worker核數(shù)為單核,內(nèi)存為8 G,硬盤為200 G,Java版本為1.8.0,Scala版本為2.11.0, 使用表2中的數(shù)據(jù)集,選取典型單機(jī)負(fù)載預(yù)測(cè)算法支持向量機(jī)回歸(support vector machine,SVR)算法、分類回歸決策樹(classification and regression tree,CART)算法進(jìn)行對(duì)比。使用基尼指數(shù)最小化準(zhǔn)則進(jìn)行特征選擇,最小基尼指數(shù)值設(shè)為0.01,決策樹在生長(zhǎng)過(guò)程中不進(jìn)行剪枝。在構(gòu)建原始隨機(jī)森林時(shí),設(shè)定樹的個(gè)數(shù)為50,采用簡(jiǎn)單多數(shù)投票法預(yù)測(cè)結(jié)果[14-15]。采用ROC曲線下的面積AUC指標(biāo)來(lái)評(píng)價(jià)算法預(yù)測(cè)精確度,AUC值的范圍為[0,1],其值越接近1則說(shuō)明算法的預(yù)測(cè)效果越好。同時(shí),對(duì)單機(jī)環(huán)境和并行化環(huán)境下的運(yùn)行時(shí)間進(jìn)行對(duì)比,從而判斷并行化計(jì)算是否有利于加快預(yù)測(cè)速度。 從表3可知,提出的并行隨機(jī)森林算法比CART和SVR具有更高的預(yù)測(cè)精度。這是由于算法通過(guò) Bagging將若干個(gè)決策樹組合在一起,具備決策樹的優(yōu)點(diǎn),同時(shí)弱化其缺點(diǎn),并且對(duì)于數(shù)據(jù)做了預(yù)處理工作,降低了離群數(shù)據(jù)對(duì)于群體的干擾,保障了算法的魯棒性。此外,從表中可以看出,在數(shù)據(jù)集較小時(shí),基于分布式集群的負(fù)荷預(yù)測(cè)方法運(yùn)行時(shí)間沒(méi)有優(yōu)勢(shì),甚至要耗費(fèi)比單機(jī)預(yù)測(cè)算法更長(zhǎng)的時(shí)間。這是因?yàn)榉植际郊旱娜蝿?wù)分配與調(diào)度需要消耗一定時(shí)間。為檢測(cè)并行化在大規(guī)模數(shù)據(jù)量下對(duì)算法性能的提升,將數(shù)據(jù)集進(jìn)一步擴(kuò)大,以數(shù)據(jù)集容量為變量,測(cè)試運(yùn)行時(shí)間,并在單機(jī)環(huán)境和并行集群環(huán)境下進(jìn)行對(duì)比。得到的實(shí)驗(yàn)結(jié)果如圖2所示。 表3 實(shí)驗(yàn)結(jié)果 對(duì)比可以看出,隨著數(shù)據(jù)規(guī)模達(dá)到一定程度,單機(jī)環(huán)境下的運(yùn)行時(shí)間明顯增加,而并行化環(huán)境下運(yùn)行時(shí)間增長(zhǎng)基本保持穩(wěn)定。 在總結(jié)傳統(tǒng)單機(jī)電力負(fù)荷預(yù)測(cè)模型的基礎(chǔ)上,結(jié)合對(duì)Spark分布式計(jì)算框架的研究,實(shí)現(xiàn)了對(duì)Spark平臺(tái)下的隨機(jī)森林回歸算法的并行化,進(jìn)而借助它對(duì)電力負(fù)載做出預(yù)測(cè),從而為負(fù)載預(yù)警提供依據(jù)和支撐,對(duì)當(dāng)前電力大數(shù)據(jù)背景下對(duì)高精度、高準(zhǔn)確的負(fù)載預(yù)測(cè)的需求提供了一定的幫助。下一步計(jì)劃將該方法在實(shí)際的數(shù)據(jù)機(jī)房中進(jìn)行驗(yàn)證,探索其實(shí)際應(yīng)用價(jià)值。1.2 Spark計(jì)算框架
2 并行化實(shí)現(xiàn)
2.1 數(shù)據(jù)預(yù)處理
2.2 模型構(gòu)建
3 實(shí)驗(yàn)設(shè)計(jì)與結(jié)果分析
3.1 實(shí)驗(yàn)數(shù)據(jù)集
3.2 集群搭建
3.3 集群搭建
4 結(jié)束語(yǔ)