何 彪
(一汽-大眾汽車有限公司佛山分公司,廣東 佛山 528200)
電網(wǎng)調(diào)控一體化向智能方向發(fā)展下,電力監(jiān)測系統(tǒng)的結(jié)構(gòu)越來越多樣化。狀態(tài)監(jiān)測數(shù)據(jù)的復(fù)雜性使得電力系統(tǒng)的故障監(jiān)測難度增大、效率降低,這對極端天氣狀況下的井噴式報警數(shù)據(jù)的處理提出了挑戰(zhàn)。另一方面,電網(wǎng)系統(tǒng)對數(shù)據(jù)的實時性要求很高,這對數(shù)據(jù)處理系統(tǒng)的計算能力提出了更高的要求[1-3]。隨著大數(shù)據(jù)處理技術(shù)的高速發(fā)展,并行分布式處理算法相比于傳統(tǒng)簡單的串行計算方法,能為數(shù)據(jù)計算能力的提升帶來更大的幫助,而流處理平臺可以極大地提高數(shù)據(jù)質(zhì)量的實時性[4-5]。大數(shù)據(jù)技術(shù)用于電力設(shè)備的故障診斷不僅是電網(wǎng)企業(yè)智能化管理的發(fā)展方向之一,還為電網(wǎng)企業(yè)的業(yè)務(wù)拓展增值提供了條件[6-8]。本文針對突發(fā)情況下電網(wǎng)系統(tǒng)大量實時數(shù)據(jù)處理困難的問題,提出了基于Spark大數(shù)據(jù)計算平臺的Xgboost算法模型,對電力設(shè)備的實時故障診斷進(jìn)行研究。
表1 不同類型變壓器故障產(chǎn)生的氣體
行狀態(tài)的判斷依據(jù)[13]。
Apache Spark是利用內(nèi)存進(jìn)行計算的大數(shù)據(jù)計算框架[5]。除此之外,Spark計算框架以MapReduce進(jìn)行迭代計算,大大地提升了運(yùn)算效率[3]。圖1所示的Spark體系架構(gòu)主要包括數(shù)據(jù)源、資源管理模式和豐富的API開源工具,并且支持多種數(shù)據(jù)來源,以及Java、 Scala和 Python 3種語言。這種設(shè)置增加了Spark的易學(xué)性,縮短了開發(fā)周期。
圖1 Spark體系架構(gòu)
在Spark框架中,彈性分布式數(shù)據(jù)集(resilient distributed dataset,RDD)是計算和存儲數(shù)據(jù)的關(guān)鍵。對RDD的處理操作有Action和TransFromation兩種類型,其中TransFromation用于轉(zhuǎn)換RDD,Action用于后續(xù)操作。圖2所示為Spark數(shù)據(jù)處理流程,在進(jìn)行數(shù)據(jù)操作前,需要將RDD讀入轉(zhuǎn)換。Spark創(chuàng)建的兩類RDD處理算子中,TransFroma-tion算子可分為key-value和value兩類;Action算子包括collect算子、count算子和saveAsTextFile算子。
圖2 Spark數(shù)據(jù)處理流程
決策樹分類器通過計算信息增益選擇最佳分裂屬性,其在實際應(yīng)用中,存在數(shù)據(jù)預(yù)處理能力較差、數(shù)據(jù)處理過擬合等問題。
隨機(jī)森林分類器首先對訓(xùn)練數(shù)據(jù)集進(jìn)行隨機(jī)抽樣,然后通過組合分類器進(jìn)行子數(shù)據(jù)集決策樹的訓(xùn)練,最后以投票的方式確定分類訓(xùn)練的結(jié)果。傳統(tǒng)隨機(jī)森林雖然由很多弱分類器組合而成,但是非分布式平臺不能體現(xiàn)出它的可并行性。基于Spark并行框架的隨機(jī)森林,在數(shù)據(jù)儲存方式上進(jìn)行分布式設(shè)計,對傳統(tǒng)隨機(jī)森林的缺點進(jìn)行一定程度的改善。通過對原始數(shù)據(jù)集隨機(jī)抽樣,可以保證決策樹構(gòu)建的隨機(jī)性和獨立性,也使得隨機(jī)森林可以并行計算。
(2)若有空,則提示用戶輸入完整;若均已輸入,則系統(tǒng)檢驗該用戶名和密碼是否已被注冊,即遍歷用戶表查詢是否有相同信息,若有相同記錄則提示用戶登錄成功,否則輸出相應(yīng)結(jié)果,即用戶名、密碼不存在,跳轉(zhuǎn)至菜單界面。
原始的電力系統(tǒng)故障數(shù)據(jù)具有連續(xù)性的特點,這不利于模型后續(xù)的數(shù)據(jù)分類操作。本文采用三比值法對數(shù)據(jù)進(jìn)行離散化處理,并以《變壓器油中溶解氣體分析和判斷導(dǎo)則(DL/T 722—2014)》作為判斷標(biāo)準(zhǔn)。圖3為基于Spark框架的隨機(jī)森林并行設(shè)計。在Spark集群上,首先采用三比值法對DGA數(shù)據(jù)進(jìn)行離散化處理,并將處理后的數(shù)據(jù)作為初始輸入,對決策樹進(jìn)行訓(xùn)練;其次采用Boosttrap進(jìn)行隨機(jī)抽樣;再次根據(jù)子數(shù)據(jù)集構(gòu)建并行的子決策樹;最后進(jìn)行測試集的分類處理。
圖3 基于Spark框架的隨機(jī)森林并行設(shè)計
圖4為對測試集進(jìn)行故障診斷的過程。結(jié)合2.1節(jié)可知,基于Spark的隨機(jī)森林變壓器故障診斷模型包括兩個部分:一是對測試集的數(shù)據(jù)處理,二是對算法訓(xùn)練數(shù)據(jù)集的數(shù)據(jù)訓(xùn)練。在這里需要注意,對原始DGA數(shù)據(jù)應(yīng)采用三比值法進(jìn)行預(yù)處理,并將處理后的數(shù)據(jù)作為輸入數(shù)據(jù)讀入RDD,以TransFromation算子進(jìn)行數(shù)據(jù)轉(zhuǎn)換處理。在隨機(jī)森林的決策樹集群構(gòu)建完成后,根據(jù)訓(xùn)練數(shù)據(jù)集,對測試數(shù)據(jù)集進(jìn)行分類處理。在數(shù)據(jù)量大的情況下,可以利用Spark框架的并行化優(yōu)勢,對數(shù)據(jù)集進(jìn)行離散化處理。測試數(shù)據(jù)集的分類結(jié)果投票也可以采用并行方式進(jìn)行。在每個測試集的投票結(jié)果完成后,對所有的投票結(jié)果進(jìn)行全局統(tǒng)計。
圖4 測試數(shù)據(jù)集并行變壓器故障診斷
Xgboost算法是基于GBDT(gradient boosting decision tree)算法和AdaBoost算法演化而來的提升算法。在這一算法中,參數(shù)、模型和目標(biāo)函數(shù)三者為機(jī)器學(xué)習(xí)算法的過程,權(quán)重組合和基函數(shù)為模型,模型中的未知變量表示為參數(shù)。Xgboost算法的參數(shù)類型分為學(xué)習(xí)任務(wù)參數(shù)、通用類參數(shù)和Booster參數(shù),其中Booster參數(shù)可以設(shè)置為線型模型或樹型模型。本文以模型預(yù)測穩(wěn)定性和準(zhǔn)確率作為構(gòu)建模型的評價指標(biāo),因此優(yōu)化模型可以通過提高模型穩(wěn)定性或者準(zhǔn)確率實現(xiàn)。模型的目標(biāo)函數(shù)obj(θ)可由式(1)表示。
obj(θ)=L(θ)+O(θ)
(1)
式中:L(θ)為誤差損失函數(shù);O(θ)為模型復(fù)雜度函數(shù)。模型優(yōu)化的最終目的就是使得誤差懲罰項和誤差損失函數(shù)達(dá)到最小。Xgboost算法是一種增強(qiáng)學(xué)習(xí)和并行算法,由許多的弱分類器組成。在電力故障診斷分類中,以回歸樹作為其基分類器,每一次疊加的模型為擬合上一次模型后產(chǎn)生的殘差,因此決策樹模型從算法模型上解釋是一種假發(fā)模型,如式(2)所示。
(2)
式中:fM(x)為基函數(shù);T為決策樹;x為輸入屬性特征;θm為決策樹路徑,其中m為弱分類器數(shù)量,即迭代次數(shù);M為總迭代次數(shù);T(x,θm)為第m輪的模型預(yù)測值。誤差損失函數(shù)代表模型預(yù)測值和真實值之間的差異,如式(3)所示。
L(y,y)=L(y,fm-1(x))+T(x,θm)
(3)
式中:L(y,y)為誤差損失函數(shù),其中y為模型預(yù)測值;L(y,fm-1(x))為第(m-1)輪預(yù)測結(jié)果和真實值之間的誤差損失函數(shù)。
利用葉子節(jié)點的權(quán)值和數(shù)目正則化表示模型復(fù)雜度函數(shù),如式(4)所示。
(4)
式中:φ(θ)為模型復(fù)雜度;γ為復(fù)雜度系數(shù);T1為樹中葉子節(jié)點數(shù)量;λ為懲罰項參數(shù);W為每個葉子節(jié)點的權(quán)值。由綜合模型復(fù)雜度函數(shù)和誤差損失函數(shù),可以得到目標(biāo)函數(shù)如下:
(5)
式中:l(yt,yi)為第i個樣本的預(yù)測誤差,其中yt為樣本的估計值,yi為樣本的真實值。
通過引入梯度下降公式可以求解分類器目標(biāo)函數(shù)的最優(yōu)解,在梯度下降的優(yōu)化下可確定樹的每個節(jié)點權(quán)重和各個子節(jié)點。然而Xgboost算法是由眾多弱分類器組成的組合分類器算法,梯度下降法優(yōu)化就顯得非常繁瑣復(fù)雜。此時利用泰勒二階展開的方法,可以讓Xgboost算法具有普適性。目標(biāo)函數(shù)加入泰勒二階展開后用式(6)表示。
(6)
(7)
結(jié)合上述定義,目標(biāo)函數(shù)可以用式(8)表示。
(8)
式中:ft(xi)為決策樹模型的一個子模型;Ω(ft)為正則項,可用于控制訓(xùn)練樹模型復(fù)雜度。
在Xgboost算法中,將樹進(jìn)行公式化定義,則樹可以用式(9)表示。
ft(x)=ωq(x),ω∈RT1,q∶Rd→{1,2,…,T1}
(9)
式中:ω為葉子的權(quán)值;q為樹的結(jié)構(gòu)。定義樹的復(fù)雜度函數(shù)以式(10)表示。
(10)
(11)
式中:Ij為所有回歸樹模型構(gòu)建的函數(shù)空間;q(xi)為特征向量xi映射至決策樹葉子節(jié)點索引的函數(shù);Gj為存在節(jié)點j的樣本的一階偏導(dǎo)數(shù)和;Hj為存在節(jié)點j的樣本的二階偏導(dǎo)數(shù)和。
根據(jù)定義,可以得到目標(biāo)函數(shù)的表達(dá)式:
(12)
根據(jù)求根公式可得:
(13)
在選擇分裂節(jié)點時,需要建立一顆空樹。以所有的葉子節(jié)點作為需要嘗試分裂的分裂點,將分裂點代入,則目標(biāo)函數(shù)可以表達(dá)如下:
(14)
式中:Gain為增加新分裂點之后的目標(biāo)函數(shù);GL為左子樹樣本的一階偏導(dǎo)數(shù)和;GR為右子樹樣本的一階偏導(dǎo)數(shù)和;HL為左子樹樣本的二階偏導(dǎo)數(shù)和;HR為右子樹樣本的二階偏導(dǎo)數(shù)和。
與其他算法相比,Xgboost算法有以下幾點優(yōu)勢:1)Xgboost算法對于樹型和線型分類器模型均具有良好的適應(yīng)性,在合適的參數(shù)配置和設(shè)置調(diào)節(jié)下,Xgboost算法可以有效避免過擬合情況發(fā)生;2)Xgboost算法有自己的數(shù)據(jù)預(yù)處理結(jié)構(gòu),在訓(xùn)練開始前,通過數(shù)據(jù)舉證DMatrix進(jìn)行處理,可以大幅度提高迭代效率;3)Xgboost算法中的正則化項可以防止模型復(fù)雜化,同樣可以預(yù)防過擬合情況發(fā)生;4)Xgboost算法可以進(jìn)行缺失數(shù)據(jù)的自行處理,同時保證分裂節(jié)點的恰當(dāng)選擇;5)Xgboost算法在數(shù)據(jù)預(yù)處理前會進(jìn)行數(shù)據(jù)的預(yù)排序處理,這一步驟極大地提高了后期數(shù)據(jù)迭代處理的計算效率。這些優(yōu)勢使得Xgboost算法模型在各個領(lǐng)域得到了應(yīng)用,并且展現(xiàn)出出色的數(shù)據(jù)處理效果,在電力設(shè)備的故障診斷分析中,三比值法的離散化處理,使得Xgboost算法模型取得了更好的分類效果。
模型的好壞由模型的有效性決定。本文以Iris鳶尾花數(shù)據(jù)集和DGA數(shù)據(jù)集為例,采用三比值法對數(shù)據(jù)進(jìn)行離散化處理,以此對基于Spark的Xgboost 算法變壓器故障診斷模型進(jìn)行性能驗證。驗證實驗分為兩個部分:第一部分通過對Xgboost 算法和隨機(jī)森林算法的數(shù)據(jù)集處理準(zhǔn)確率對比,驗證Xgboost 算法的優(yōu)越性;第二部分將Xgboost 算法在Spark和Hadoop兩種計算框架下的運(yùn)算速度進(jìn)行對比,以此驗證Spark框架的有效性。
Iris鳶尾花數(shù)據(jù)集由3個類別的花型構(gòu)成,每個類型有50個花蕊數(shù)據(jù),3種花型共150個花蕊數(shù)據(jù)。鳶尾花數(shù)據(jù)集是測試分類模型分類性能的國際通用標(biāo)準(zhǔn)數(shù)據(jù)集,以花瓣和花萼的長度和寬度為依據(jù),可以將這些花分為4種不同的屬性。DGA數(shù)據(jù)總共分為7種化合物類型,通過三比值法對故障數(shù)據(jù)的預(yù)處理,去除了一氧化碳和二氧化碳這兩種氣體,剩下的數(shù)據(jù)中選擇500條數(shù)據(jù)作為此次實驗的變壓器故障數(shù)據(jù),分別包含1種征程類型和5種故障類型。在本文的模型驗證實驗中,采用4∶6的比例分配測試集和訓(xùn)練集。
圖5為Xgboost算法和隨機(jī)森林算法的數(shù)據(jù)集處理準(zhǔn)確率統(tǒng)計結(jié)果,可以發(fā)現(xiàn),模型分類的準(zhǔn)確率與決策樹的數(shù)量呈正相關(guān);隨著決策樹的增加,模型分類準(zhǔn)確率逐漸穩(wěn)定。在保證決策樹數(shù)量的情況下,隨機(jī)森林算法對鳶尾花數(shù)據(jù)集的分類準(zhǔn)確率達(dá)到了98%,對DGA數(shù)據(jù)集的分類準(zhǔn)確率達(dá)到了87%;Xgboost 算法對鳶尾花數(shù)據(jù)集的分類準(zhǔn)確率達(dá)到了99%,對DGA數(shù)據(jù)集的分類準(zhǔn)確率達(dá)到了92%。從實驗結(jié)果可以發(fā)現(xiàn),Xgboost算法的分類效果明顯優(yōu)于隨機(jī)森林算法的分類效果。
圖5 Xgboost算法和隨機(jī)森林算法的數(shù)據(jù)集處理準(zhǔn)確率
本文以DGA數(shù)據(jù)作為實驗對象,并將數(shù)據(jù)放大10 000倍。將Xgboost算法在Spark和Hadoop兩種計算框架上運(yùn)行,圖6為其在兩種框架上的運(yùn)算速度統(tǒng)計結(jié)果。觀察圖中結(jié)果可以發(fā)現(xiàn),一方面,Xgboost算法在并行分布式計算框架下的運(yùn)行速度隨著節(jié)點數(shù)量的增加而增加,當(dāng)達(dá)到一定節(jié)點數(shù)量后,運(yùn)行速度保持穩(wěn)定;另一方面,相比于Hadoop分布式計算框架,Spark的優(yōu)勢隨著集群規(guī)模的增加而增加;當(dāng)運(yùn)行速度穩(wěn)定后可以發(fā)現(xiàn),Spark的運(yùn)算速度是Hadoop的40倍以上。
圖6 Xgboost在Spark和Hadoop兩種計算框架上的運(yùn)算速度對比
在面對突發(fā)極端天氣的情況下,電網(wǎng)系統(tǒng)面臨著海量數(shù)據(jù)的沖擊。其中故障數(shù)據(jù)在電網(wǎng)數(shù)據(jù)中價值密度低,但它們直接關(guān)系著電力系統(tǒng)能否穩(wěn)定運(yùn)行。通過性能驗證實驗發(fā)現(xiàn),本文構(gòu)建的基于Spark框架的Xgboost設(shè)備故障診斷模型具有極高的準(zhǔn)確性和運(yùn)行效率,為電力系統(tǒng)故障診斷的平臺開發(fā)奠定了理論基礎(chǔ)。但本文研究尚存些許不足,例如在對模型進(jìn)行對比驗證時只用到了隨機(jī)森林和Xgboost算法,后續(xù)將從更多的角度,對本文所提算法模型做深入研究。