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