夏 博,楊 超,鄭凱文
(貴州大學(xué)電氣工程學(xué)院,貴州 貴陽 550025)
隨著常規(guī)電力系統(tǒng)向智能電網(wǎng)的逐步發(fā)展,電力系統(tǒng)中使用了大量的傳感器和智能設(shè)備,使得需要處理的各類數(shù)據(jù)呈指數(shù)級增長。數(shù)據(jù)存儲規(guī)模將增長到TB級,甚至PB級[1]。而電力系統(tǒng)負(fù)荷預(yù)測的誤差大小直接影響發(fā)供電計(jì)劃的制定、電網(wǎng)的供需平衡以及電力市場的平穩(wěn)運(yùn)行[2-3]?,F(xiàn)有的預(yù)測方法中,數(shù)據(jù)挖掘法[4]、小波分析法[5]、近似熵法[6]等都具有較好的預(yù)測精度,但是在處理海量數(shù)據(jù)方面還存在很大的不足。文獻(xiàn)[7]提出了調(diào)和分類-聚類的負(fù)荷預(yù)測模型,能夠較好地對大量數(shù)據(jù)進(jìn)行分析處理并且提高預(yù)測的精度。文獻(xiàn)[8]提出了適用于智能電網(wǎng)大數(shù)據(jù)環(huán)境下的預(yù)測方法,能夠有效提高負(fù)荷預(yù)測的速度與精度。文獻(xiàn)[9]分析了電力大數(shù)據(jù)的相關(guān)特征,介紹了正在研發(fā)的智能電網(wǎng)大數(shù)據(jù)分析系統(tǒng)。
針對上述問題,本文提出了基于Gradient Boosting思想和Shrinkage思想的Xgboost算法負(fù)荷預(yù)測模型,并通過負(fù)荷預(yù)測試驗(yàn)分析驗(yàn)證了該算法的有效性。
Xgboost是基于梯度提升決策樹(gradient boosting decision tree,GBDT)提出的算法[10]。Xgboost可以使用CPU多線程進(jìn)行并行計(jì)算,并對目標(biāo)函數(shù)進(jìn)行二階泰勒展開,在目標(biāo)函數(shù)之外加入正則項(xiàng)整體求最優(yōu)解。
對于一個給定預(yù)測模型,需要通過目標(biāo)函數(shù)來尋找最優(yōu)參數(shù)。一般的目標(biāo)函數(shù)模型為:
Obj(θ)=L(θ)+Ω(θ)
(1)
式中:L(θ)為誤差函數(shù),表示模型擬合數(shù)據(jù)的程度;Ω(θ)為正則化項(xiàng),表示懲罰復(fù)雜的模型。
為了防止過擬合,Xgboost除了目標(biāo)函數(shù)正則化項(xiàng),還引入了用于GBDT的縮減和用于隨機(jī)森林(random forest,RF)的列抽樣,以防止過擬合。其中,縮減認(rèn)為殘差仍然是其學(xué)習(xí)目標(biāo),而且各個樹的殘差是漸變的;而列抽樣則是對樣本的特征量進(jìn)行隨機(jī)抽樣計(jì)算,從而減少了工作量。
分類回歸樹中的回歸樹是提升樹最基本的組成部分,但是單棵決策樹往往不能有效而精確地作出預(yù)測。而由多棵決策樹組成的決策樹森林模型是一個有效而精準(zhǔn)的模型。決策樹森林模型公式為:
(2)
式中:F為所有回歸樹集合;f為一個在函數(shù)空間F里的一個函數(shù);xi為數(shù)據(jù)i的特征向量。
目標(biāo)函數(shù)需要遵循的主要原則為:
(3)
參數(shù)采用加和策略的方式來訓(xùn)練,通常面對不是平方誤差的時候,可以使用泰勒展開來定義一個近似的目標(biāo)函數(shù),并對這一步計(jì)算進(jìn)行簡化,即除去常數(shù)項(xiàng),進(jìn)而會發(fā)現(xiàn)目標(biāo)函數(shù)僅僅取決于每個數(shù)據(jù)點(diǎn)在誤差函數(shù)上的一階導(dǎo)數(shù)和二階導(dǎo)數(shù)。簡化后目標(biāo)函數(shù)為:
(4)
(5)
(6)
Xgboost單棵決策樹訓(xùn)練流程如圖1所示。
圖1 單棵決策樹訓(xùn)練流程圖Fig.1 Training flowchart of single decision tree
整個Xgboost算法決策樹迭代流程如圖2所示。
圖2 決策樹迭代流程圖Fig.2 Iterative flowchart of decision tree
MapReduce是Hadoop的核心組件之一,是一種數(shù)據(jù)處理的編程框架。MapReduce采用“分而治之”的辦法。首先,各個節(jié)點(diǎn)處理其分得的數(shù)據(jù)集,再整合節(jié)點(diǎn)的處理結(jié)果得到最終結(jié)果。在分布式計(jì)算中,MapReduce框架負(fù)責(zé)處理并行編程中一些相對復(fù)雜問題,把處理過程高度抽象為map和reduce兩個函數(shù)。map可以對操作進(jìn)行分解,reduce則是要綜合各個結(jié)果。
與Hadoop分布式文件系統(tǒng)(Hadoop distributed file system,HDFS)一樣,MapReduce采用了主從結(jié)構(gòu)模型,主要由Client、JobTracker、TaskTracker和Task四個部分組成。
Client 客戶端:每一項(xiàng)任務(wù)都會將應(yīng)用程序和所要配置的相關(guān)參數(shù)打包處理后再存儲到HDFS,并將路徑提交到JobTracker的master服務(wù)中,然后由master創(chuàng)建每一個Task(即MapTask和 ReduceTask),并將它們分發(fā)到各個TaskTracker 服務(wù)中去執(zhí)行。在Hadoop中,依據(jù)自己的需求對調(diào)度器進(jìn)行設(shè)計(jì)。
TaskTracker 定期將自己節(jié)點(diǎn)情況匯報(bào)給JobTracker,并且接受反饋的命令,然后執(zhí)行相應(yīng)的操作。TaskTracker使用“slot”等量劃分本節(jié)點(diǎn)上的資源量?!皊lot”代表計(jì)算資源(CPU、內(nèi)存等)。調(diào)度器可以把每個TaskTracker上空閑的slot分配給Task使用。slot分為Map slot和Reduce slot兩種,分別供MapTask和ReduceTask使用??膳渲脜?shù)又能夠?qū)ask的并發(fā)度進(jìn)行限定。
Task分為MapTask和ReduceTask 兩種,均由TaskTracker啟動。采用map函數(shù)對輸入的信息進(jìn)行處理,并且把中間結(jié)果存儲到本地磁盤上,臨時數(shù)據(jù)會被分成若干個partition,每個partition對應(yīng)一個ReduceTask。ReduceTask從節(jié)點(diǎn)上讀取MapTask中間結(jié)果;按照key對key/value進(jìn)行排序;調(diào)用reduce函數(shù),將結(jié)果保存到HDFS上。
本次試驗(yàn)通過虛擬機(jī)虛擬3臺主機(jī)進(jìn)行數(shù)據(jù)處理。其中1臺作為主節(jié)點(diǎn)Master,另外2臺作為分節(jié)點(diǎn)Node1、Node2。每臺主機(jī)配置為4核處理器,3G內(nèi)存并安裝CentOS 6.5系統(tǒng)作為基礎(chǔ)環(huán)境。構(gòu)建的Hadoop集群拓?fù)涫疽鈭D如圖3所示。
圖3 Hadoop集群拓?fù)涫疽鈭DFig.3 Schematic diagram of Hadoop cluster topology
在CentOS 6.5系統(tǒng)中創(chuàng)建Hadoop賬戶,并賦予Hadoop賬戶管理員權(quán)限,通過修改hosts為主節(jié)點(diǎn)和從節(jié)點(diǎn)配置IP地址,然后配置ssh使各節(jié)點(diǎn)間實(shí)現(xiàn)密碼登錄,完成后各臺機(jī)器之間可以直接通過ssh+機(jī)器名進(jìn)行訪問。
Spark安裝成功后,將Xgbooost克隆到本地并進(jìn)行編譯。編譯成功后通過指令以yarn模式啟動spark-shell,并引用Xgboost包。將訓(xùn)練數(shù)據(jù)及相應(yīng)參數(shù)輸入Xgboost后運(yùn)行,至此Xgboost算法基于Spark的分布式計(jì)算部署成功。
試驗(yàn)采用平均絕對百分比誤差 (mean absolute percentage error,MAPE) 和均方根誤差(root mean squared error,RMSE),公式如下:
(7)
(8)
式中:Xi為實(shí)際負(fù)荷值;Yi為預(yù)測負(fù)荷值;n為負(fù)荷預(yù)測結(jié)果的個數(shù)。
在負(fù)荷預(yù)測中,MAPE越小,負(fù)荷預(yù)測結(jié)果就越準(zhǔn)確。RMSE越小,則負(fù)荷預(yù)測結(jié)果的精度就越高。
本次預(yù)測的數(shù)據(jù)來源于某省M縣2013年1月1日至2016年9月30日:每5 min采集一次的負(fù)荷數(shù)據(jù),共計(jì)368 640條數(shù)據(jù);以及對應(yīng)日期的天氣數(shù)據(jù),如最高氣溫、平均氣溫等共計(jì)10 240條數(shù)據(jù)。短期負(fù)荷受天氣、時間、日期等因素的影響而出現(xiàn)波動。這些因素都為負(fù)荷特性分析提出了挑戰(zhàn)。分析這些因素與負(fù)荷之間的互相關(guān)系,有利于負(fù)荷預(yù)測模型特征的建立。
選擇2016年6月1日至2016年8月24日的日最大負(fù)荷值作為訓(xùn)練數(shù)據(jù),預(yù)測2016年8月25日至2016年8月31日的日最大負(fù)荷值。同時,選取上星期同日的日最大負(fù)荷值、上月同日的日最大負(fù)荷值、當(dāng)日最高氣溫、當(dāng)日平均氣溫、當(dāng)日是否為工作日等數(shù)據(jù),構(gòu)成預(yù)測數(shù)據(jù)的特征。其中:上星期同日的日最大負(fù)荷值、上月同日的日最大負(fù)荷值、當(dāng)日最高氣溫、當(dāng)日平均氣溫的特征值均為具體真實(shí)的數(shù)值;當(dāng)日是否為工作日用0、1表示,0表示當(dāng)日為非工作日、1表示當(dāng)日為工作日。訓(xùn)練數(shù)據(jù)及特征如表1所示。
表1 訓(xùn)練數(shù)據(jù)及特征Tab.1 Training data and features
分布式Xgboost算法成功運(yùn)行后,將單機(jī)版Xgboost算法所采用的樣本重新輸入分布式Xgboost算法進(jìn)行預(yù)測。夏季和冬季的分布式預(yù)測結(jié)果MAPE和RMSE對比如表2所示。
表2 MAPE和RMSE的對比Tab.2 Comparison between MAPE and RMSE
從表2可以看出,Xgboost算法預(yù)測精度略高于其他兩個算法。由于樣本量大,各算法訓(xùn)練速度出現(xiàn)較大差異,考慮計(jì)算過程中相關(guān)因素對結(jié)果造成的影響,經(jīng)過多次訓(xùn)練求平均值,結(jié)果見表3。
表3 算法訓(xùn)練速度對比Tab.3 Comparison of the training speed
分布式Xgboost采用的是分布式加權(quán)值算法。在數(shù)據(jù)無法一次載入內(nèi)存或在分布式情況下,該方法可以高效地生成候選的分割點(diǎn)。
從表3可以看出,RF訓(xùn)練模型的時間比其他兩個算法訓(xùn)練時間多,這是由于RF需要多次隨機(jī)抽取特征,導(dǎo)致訓(xùn)練時間增加。Xgboost開啟多線程模式后,訓(xùn)練速度相對于其他算法有較大的優(yōu)勢。
平臺首先通過將負(fù)荷數(shù)據(jù)、氣象數(shù)據(jù)以及其他特征由客戶端輸入;然后,將對應(yīng)的數(shù)據(jù)進(jìn)行分塊,分給兩臺機(jī)器進(jìn)行處理,并將各臺所處理得到的結(jié)果匯總到主機(jī)上得到整體的預(yù)測模型;最后,可以通過測試數(shù)據(jù)的輸入進(jìn)行相關(guān)的負(fù)荷預(yù)測工作。
本文針對電力系統(tǒng)負(fù)荷預(yù)測所用的預(yù)測方法不能快速、有效地訓(xùn)練大量數(shù)據(jù)樣本,也不能有效地利用歷史數(shù)據(jù)這些問題,提出了基于Gradient Boosting思想和Shrinkage思想的Xgboost算法負(fù)荷預(yù)測模型。通過對某省M縣實(shí)際負(fù)荷數(shù)據(jù)特性分析,構(gòu)建了基于負(fù)荷的時間特性、溫度特性的訓(xùn)練樣本,并分別進(jìn)行了夏季、冬季情況下的負(fù)荷預(yù)測,同時與RF和GBDT兩種算法進(jìn)行對比。預(yù)測試驗(yàn)對比驗(yàn)證了Xgboost算法具有準(zhǔn)確性好、訓(xùn)練速度快等特點(diǎn),且在開啟多線程的情況下,Xgboost算法有更明顯的速度提升。
參考文獻(xiàn):
[1] 李龍,魏靖, 黎燦兵, 等.基于人工神經(jīng)網(wǎng)絡(luò)的負(fù)荷模型預(yù)測[J].電工技術(shù)學(xué)報(bào), 2015, 30(8): 225-230.
[2] 楊甲甲,趙俊華,文福拴,等.電力零售核心業(yè)務(wù)架構(gòu)與購售電決策[J].電力系統(tǒng)自動化,2017,41(14):10-18.
[3] 廖旎煥,胡智宏,馬瑩瑩,等.電力系統(tǒng)短期負(fù)荷預(yù)測方法綜述[J].電力系統(tǒng)保護(hù)與控制,2011,39(1):147-152.
[4] 李黎,楊升峰,邱金鵬,等.電力系統(tǒng)供電短期負(fù)荷預(yù)測方法仿真研究[J].計(jì)算機(jī)仿真,2017,34(1):104-108.
[5] 姚李孝,劉學(xué)琴.基于小波分析的月度負(fù)荷組合預(yù)測[J].電網(wǎng)技術(shù),2007,31(19):65-68.
[6] 楊茂,董駿城,羅芫,等.基于近似熵的電力系統(tǒng)負(fù)荷預(yù)測誤差分析[J].電力系統(tǒng)保護(hù)與控制,2016,44(23):24-29.
[7] 竇全勝,史忠植,姜平,等.調(diào)和聚類-分類方法在電力負(fù)荷預(yù)測中的應(yīng)用[J].計(jì)算機(jī)學(xué)報(bào),2012,35(12):2645-2651.
[8] 于希寧,牛成林,李建強(qiáng).基于決策樹和專家系統(tǒng)的短期電力負(fù)荷預(yù)測系統(tǒng)[J].華北電力大學(xué)學(xué)報(bào),2005,32(5):57-61.
[9] 劉廣一,朱文東,陳金祥,等.智能電網(wǎng)大數(shù)據(jù)的特點(diǎn)、應(yīng)用場景與分析平臺[J].南方電網(wǎng)技術(shù),2016,10(5):102-110.
[10]CHEN T,GUESTRIN C.Xgboost:A scalable tree boosting system[C]//Proceedings of the 22Nd ACM SIGKDD International Conference on Knowledge Discovery and Data Mining.ACM,2016:785-794.