李偲希,白全生,舒暢,肖祥武
(湖南大唐先一科技有限公司大數(shù)據(jù)事業(yè)部,湖南 長沙 410000)
隨機(jī)森林算法是目前應(yīng)用較為廣泛的機(jī)器學(xué)習(xí)算法之一[1]。文獻(xiàn)[2]表明隨機(jī)森林算法在121個數(shù)據(jù)集上的179種分類算法的分類性能測試中表現(xiàn)最優(yōu)。近十年來,隨著電力大數(shù)據(jù)的發(fā)展,隨機(jī)森林算法在電力行業(yè)發(fā)揮了巨大作用。文獻(xiàn)[3]利用隨機(jī)森林算法抗噪和適應(yīng)能力強(qiáng)的特點(diǎn),提出了一種計算漏報率的隨機(jī)森林集成投票算法模型,提高了電機(jī)承軸故障診斷的準(zhǔn)確率。文獻(xiàn)[4]將模糊聚類與隨機(jī)森林相結(jié)合所建立的模型,在電力系統(tǒng)短期負(fù)荷變化的預(yù)測中有良好的表現(xiàn)。隨著隨機(jī)森林算法的不斷實(shí)踐,其缺陷也逐漸被重視,很多學(xué)者對其不足之處提出了改進(jìn)方案,文獻(xiàn)[5]提出了一種基于欠采樣和合成少數(shù)類過采樣技術(shù)相結(jié)合的優(yōu)化算法,來改善數(shù)據(jù)不平衡問題,有效提升了隨機(jī)森林在非平衡數(shù)據(jù)集上的性能。文獻(xiàn)[6]設(shè)計并實(shí)現(xiàn)了采用spark分布式存儲計算技術(shù)的基于spark的隨機(jī)森林算法,大大提升了運(yùn)算速度。另一種基于決策樹的集成算法——梯度提升決策數(shù)[7]算法(以下簡稱GBDT算法),也是工業(yè)領(lǐng)域較為常用的算法。文獻(xiàn)[8]提出了一種基于GBDT模型的交互穩(wěn)定性評估方法,為串聯(lián)結(jié)構(gòu)系統(tǒng)在電能質(zhì)量分析、優(yōu)化運(yùn)行等方面提供了方法支持,而文獻(xiàn)[9]則在研究了現(xiàn)有的GBDT并行算法后提出了基于二元相關(guān)性和梯度提升決策樹集成學(xué)習(xí)的多標(biāo)簽分類方法,提升了電力ICT系統(tǒng)復(fù)雜故障類型的多標(biāo)簽分類的準(zhǔn)確率。隨機(jī)森林算法與GBDT算法雖然在故障診斷、電力負(fù)荷預(yù)測等工業(yè)場景中應(yīng)用較為廣泛,但是對于火電廠海量且冗雜的能耗數(shù)據(jù)中是否也有同樣優(yōu)異的表現(xiàn)還有待研究。因此,本文的目標(biāo)在于比較兩種算法在核心原理、參數(shù)調(diào)整和回歸模型效果上的差異,并且運(yùn)用大數(shù)據(jù)平臺中的實(shí)時數(shù)據(jù)進(jìn)行分析,分別建立基于spark平臺的隨機(jī)森林和GBDT并行算法的回歸模型,比較兩種模型對電廠煤耗的預(yù)測效果。
Spark[10]是基于內(nèi)存計算的大數(shù)據(jù)分布式集群框架,它在海量數(shù)據(jù)集上的計算性能十分高效。Spark的核心部分則是彈性分布式數(shù)據(jù)集(簡稱RDD)[11],它在群集的多臺節(jié)點(diǎn)上對數(shù)據(jù)進(jìn)行分區(qū)。RDD支持兩種操作:轉(zhuǎn)換和操作。轉(zhuǎn)換算子只記錄轉(zhuǎn)換的過程,而只有當(dāng)觸發(fā)操作算子時才能真正執(zhí)行程序。由于只有在真正需要將結(jié)果寫入RDD時才會執(zhí)行以上操作,因此計算效率便得到了很大的提升。本文主要通過基于spark平臺的隨機(jī)森林和GBDT算法建立回歸模型,并對模型的預(yù)測效果進(jìn)行比較分析。
決策樹[12]是一種用于分類和回歸的樹結(jié)構(gòu)。分類樹用于對離散標(biāo)簽數(shù)據(jù)進(jìn)行分類。如果目標(biāo)變量的值是連續(xù)型,那么該類決策樹稱為回歸決策樹。
比較常見的決策樹算法有ID3,C4.5,分類回歸決策樹(以下簡稱CART決策樹)等[13],前面兩種算法僅支持分類問題,而CART決策樹既可用于分類,也能解決回歸問題。
分類回歸決策樹是一棵二叉樹[14],每次只將數(shù)據(jù)切分成兩部分。CART分類樹的中心思想是自上而下從根節(jié)點(diǎn)開始建立節(jié)點(diǎn),每一個節(jié)點(diǎn)處選擇基尼指數(shù)[15](又叫基尼不純度)最小的特征進(jìn)行分割,CART回歸樹采用樣本最小平方誤差作為節(jié)點(diǎn)分裂的依據(jù)。
CART決策樹算法非常容易出現(xiàn)過擬合問題,導(dǎo)致泛化能力不強(qiáng),此外,在尋找最優(yōu)決策樹時容易陷入局部最優(yōu)。因此,在處理實(shí)際問題時,運(yùn)用單一的回歸樹是遠(yuǎn)遠(yuǎn)不夠的。而隨機(jī)森林算法以及GBDT算法在回歸樹的基礎(chǔ)上,結(jié)合bagging[16]和 boosting[17]兩種集成學(xué)習(xí)方法進(jìn)行改良和升級,大大提高了其泛化能力。
隨機(jī)森林算法是一種基于bagging方法的并行式集成學(xué)習(xí)算法[18]。Bagging方法的基本原理是對于一個大小為M的總樣本集,通過bootstrap自助采樣法[19]得到T個大小為M的樣本子集,通過T個樣本子集分別訓(xùn)練生成T個弱學(xué)習(xí)器[20],bootstrap方法簡單來說就是一種有放回隨機(jī)抽樣。最終進(jìn)行集成時,如果是分類問題則采用投票法,若為回歸問題則采用平均法。之所以被稱為隨機(jī)森林,是因?yàn)槭紫人怯啥鄠€決策樹集成的,并在此基礎(chǔ)上引入了隨機(jī)特征的選取。隨機(jī)森林中子樹的每一次分裂過程并未用到所有的特征,而是從待選特征中隨機(jī)選取一定的特征,再從隨機(jī)選取的特征中找出最優(yōu)的特征。在回歸問題中,給定一個訓(xùn)練數(shù)據(jù)集D,包含K個特征,并行隨機(jī)森林回歸算法的基本步驟如下:
(1)數(shù)據(jù)預(yù)處理后生成RDD數(shù)據(jù)集。
(2)決策樹的構(gòu)建。從數(shù)據(jù)集中通過bootstrap采樣法生成T組數(shù)據(jù)集,每組數(shù)據(jù)集均由抽中數(shù)據(jù)與袋外數(shù)據(jù)組成。使用數(shù)據(jù)集Ti訓(xùn)練生成一棵決策樹,在決策樹的每個節(jié)點(diǎn)進(jìn)行分裂時,隨機(jī)從K個特征中選出k個特征,k≤K。在每個節(jié)點(diǎn)上,根據(jù)最小化平方誤差選取最優(yōu)特征。用spark進(jìn)行并行不斷迭代,最終形成指定數(shù)目的相互獨(dú)立的回歸決策樹。
(3)建立回歸模型。將所有決策樹預(yù)測值的平均值作為最終輸出的預(yù)測結(jié)果。
隨機(jī)森林算法屬于集成學(xué)習(xí)算法,由于其樣本與特征選擇中的隨機(jī)性,使得隨機(jī)森林不容易出現(xiàn)過擬合[21]的情況。此外它能夠處理高維度的數(shù)據(jù),并且不用做特征選擇,既能處理離散型數(shù)據(jù),也能處理連續(xù)型數(shù)據(jù),數(shù)據(jù)集無須規(guī)范化。隨機(jī)森林算法的實(shí)際應(yīng)用將會在第五部分中體現(xiàn)。
梯度提升決策樹算法是一種使用決策樹作為弱學(xué)習(xí)器的Gradient Boosting[22]算法。Gradient Boosting方法是boosting方法中的一種,其主要思想是每個新模型的建立是為了使得之前模型的殘差往梯度方向減小。GBDT回歸算法通過訓(xùn)練多個CART回歸樹得出基于每個樣本的殘差,再基于所有的殘差訓(xùn)練回歸樹并且根據(jù)回歸樹的權(quán)重更新得出新的模型,即所有回歸樹的結(jié)論累加起來獲得最終預(yù)測結(jié)果[23]。和隨機(jī)森林算法不同,GBDT 算法的弱學(xué)習(xí)器之間存在很強(qiáng)的依賴關(guān)系。它的損失函數(shù)沿著負(fù)梯度方向進(jìn)行迭代[24],使得損失函數(shù)越來越小,模型的偏差也逐漸減小。GBDT的算法步驟[25]如下:
輸入:訓(xùn)練集D={(x1,y1),(x2,y2),……,(xM,yM)};
損失函數(shù)L(y,f(x));
(1)
步驟2:對于t=1,2,……,T:
(1)對i=1,2,……,M,計算損失函數(shù)的負(fù)梯度在當(dāng)前模型的值:
(2)
(2)擬合一棵回歸樹,得到第t棵樹的葉節(jié)點(diǎn)區(qū)域:Rtj,j=1,2,……,J;
(3)對j=1,2,……,J,計算
(3)
(4)更新回歸樹:
(4)
步驟3:輸出最終的回歸樹:
(5)
第五章主要結(jié)合實(shí)際設(shè)計實(shí)驗(yàn),對上文提到的算法進(jìn)行檢驗(yàn)。實(shí)驗(yàn)采用大數(shù)據(jù)平臺采集到的某電廠一年的運(yùn)行數(shù)據(jù),對火電廠的供電煤耗進(jìn)行分析和預(yù)測。實(shí)驗(yàn)?zāi)康脑谟诒容^基于spark平臺的并行隨機(jī)森林與GBDT算法在處理回歸問題時,模型參數(shù)調(diào)整上的區(qū)別以及調(diào)參之后模型的預(yù)測效果。
大數(shù)據(jù)平臺采集某電廠2016年9月1日至2017年8月31日周期為一年的運(yùn)行數(shù)據(jù),步長為1分鐘。經(jīng)過業(yè)務(wù)分析,對數(shù)據(jù)進(jìn)行清洗及預(yù)處理,剔除異常數(shù)據(jù)、填補(bǔ)空值后,最終我們提取了7000條工況穩(wěn)定下的健康數(shù)據(jù)作為樣本數(shù)據(jù)集。根據(jù)灰色關(guān)聯(lián)度分析,選取關(guān)聯(lián)度最大的前12個特征進(jìn)行分析,其中包括主汽溫度、主汽壓力、飛灰可燃物等。具體信息見表1:
表1 灰色關(guān)聯(lián)度分析Tab.1 Grey Relational Analysis
續(xù)表1
本文主要使用隨機(jī)森林算法以及GBDT算法對提取的樣本數(shù)據(jù)集(7000條)進(jìn)行回歸建模分析,預(yù)測火電廠的供電煤耗,并比較兩種模型的預(yù)測效果。選擇決定系數(shù)(R2)[26]、平均絕對誤差(MAE)和均方根誤差(RMSE)[27]作為評估回歸模型預(yù)測精度的統(tǒng)計量,具體計算公式分別為:
(6)
(7)
(8)
R2越接近1,說明模型擬合度越高;MAE和RMSE的值越小,說明模型偏差越小,模型精度越高,預(yù)測效果更好。
5.2.1 隨機(jī)森林回歸模型
建立隨機(jī)森林回歸模型,首先初始化參數(shù),包括決策樹數(shù)量、最大深度以及最大分裂數(shù),通過不斷調(diào)整以上參數(shù)的值,使得模型精度達(dá)到最高。其余參數(shù)均保持一致(分類策略=all,不純度=variance),首先調(diào)整決策樹數(shù)量。由于隨機(jī)森林算法產(chǎn)生近乎獨(dú)立的預(yù)測且最終結(jié)果是取平均值,因此增加更多得決策樹也不容易出現(xiàn)過擬合的情況。所以我們設(shè)置的決策樹數(shù)量可以盡可能大。保持最大深度(10)、最大分裂數(shù)(32)不變,改變決策樹數(shù)量。決策樹數(shù)量與平均絕對誤差(MAE)以及均方根誤差(RMSE)的關(guān)系走勢圖如下(圖1):
圖1 不同決策樹數(shù)量的MAE和RMSE走勢圖Fig.1 Trend chart of MAE and RMSE with different number of decision trees
從圖中可知,當(dāng)決策樹數(shù)量較小時,隨機(jī)森林回歸誤差比較大。隨著數(shù)量的增加,MAE和RMSE的值均呈下降趨勢,在決策樹數(shù)目設(shè)為350時達(dá)到最小值,隨后MAE和RMSE的值又會隨著決策樹數(shù)目的增加而逐漸增大。
此外,決策樹的深度以及最大分裂數(shù)也是兩個比較重要的參數(shù)。深度增加則訓(xùn)練時長增加,精度也隨之提高,但是也更容易出現(xiàn)過擬合的情況,但在隨機(jī)森林算法中適當(dāng)增加深度是可以接受的。最大分裂數(shù)是指離散化連續(xù)特征的最大箱子數(shù),最大分裂數(shù)增加,算法的復(fù)雜程度和所需的時長也會增加。保持決策樹數(shù)量(350)不變,通過調(diào)整最大深度以及最大分裂數(shù)來觀察均方根誤差隨深度的變化。表2顯示了不同最大分裂數(shù)和最大深度下RMSE值的情況:
表2 不同最大深度和最大分裂數(shù)的RMSE值比較Tab.2 Comparison of RMSE of different maximum depth and maximum bins
通過橫向比較表中數(shù)據(jù)可知,隨著最大深度的增加,均方根誤差在逐漸減小,最大深度為30時均方根誤差最小。當(dāng)最大深度確定時RMSE的值在最大分裂數(shù)設(shè)為50時最小,隨后隨著最大分裂數(shù)的增加而增加。
綜合以上分析,最終將參數(shù)設(shè)置為:決策樹數(shù)量=350,最大深度=30,最大分裂數(shù)=50,分裂策略=all,不純度= variance,此時模型的均方根誤差為1.211546,擬合優(yōu)度R2約為0.9919。用剩余20%的數(shù)據(jù)集作為預(yù)測數(shù)據(jù)集來檢驗(yàn)?zāi)P偷念A(yù)測效果,預(yù)測模型的MAE和RMSE分別為1.341711和3.297954,R2的值為0.940364。從實(shí)驗(yàn)結(jié)果來看,隨機(jī)森林回歸模型無論在訓(xùn)練和預(yù)測時都有較好的表現(xiàn)。
5.2.2 GBDT回歸模型
使用GBDT算法建立模型時,同樣首先初始化參數(shù),參數(shù)不純度=variance,損失函數(shù)=squared,最大分裂數(shù)=32均保持不變,通過調(diào)整最大深度,學(xué)習(xí)率(又稱步長)以及迭代次數(shù)[28]來使得模型達(dá)到最優(yōu)。
學(xué)習(xí)率以及迭代次數(shù)分別設(shè)置為0.1、50,改變最大深度(取值分別為5、7、10、12),平均絕對誤差(MAE)以及均方根誤差(RMSE)變化趨勢如圖2所示:
圖2 不同最大深度的MAE和RMSE走勢圖Fig.2 Trend chart of MAE and RMSE with different maximum depth
隨著最大深度增加,MAE和RMSE的值不斷減小,當(dāng)最大深度設(shè)置為10時,模型的誤差就已經(jīng)很小了,在深度為12時達(dá)到最小。接下來將最大深度的值固定(=12)對迭代次數(shù)和學(xué)習(xí)率進(jìn)行調(diào)整。迭代次數(shù)也就是弱學(xué)習(xí)器的個數(shù),學(xué)習(xí)率又稱步長,即每個弱學(xué)習(xí)器權(quán)重的縮減系數(shù),在調(diào)參過程中通常用步長和迭代次數(shù)一起決定模型的擬合效果。模型的評估結(jié)果見表3:
表3 迭代次數(shù)和學(xué)習(xí)率的MAE值以及RMSE值比較Tab.3 Comparison of MAE and RMSE of iterations and learning rate
表3中的結(jié)果顯示,迭代次數(shù)不變,學(xué)習(xí)率上升,MAE和RMSE的值減小;學(xué)習(xí)率相同的條件下,若增加迭代次數(shù),也會使得誤差逐漸減小,由于迭代次數(shù)為100時訓(xùn)練時長較長且為了避免出現(xiàn)過擬合的情況,因此將模型參數(shù)最終設(shè)定為最大深度=12。由于建模過程中使用的子采樣率默認(rèn)為1,即每次預(yù)測時都采用全部數(shù)據(jù)進(jìn)行擬合,會導(dǎo)致模型的泛化能力弱。通過調(diào)整子采樣率以及葉子節(jié)點(diǎn)最小樣本數(shù)則可以防止過擬合問題。保持其余參數(shù)不變,將樣本子采樣率分別設(shè)置為0.6、0.7、0.8、0.9,各模型的評估結(jié)果如表4所示:
表4 不同子采樣率下模型MAE值和RMSE值比較Tab.4 Comparison of MAE and RMSE of different subsample rates
由表中數(shù)據(jù)可知,當(dāng)子采樣率升高,MAE與RMSE的值會隨之減小,當(dāng)子采樣率為0.9時達(dá)到最小值。子采樣率=0.9保持不變,再將參數(shù)葉子節(jié)點(diǎn)最小樣本數(shù)分別設(shè)置為5、10、15、20,其余參數(shù)一致。各模型均方根誤差RMSE和平均絕對誤差MAE的走勢圖如下(圖3):
圖3 不同葉子節(jié)點(diǎn)最小樣本數(shù)的MAE和RMSE走勢圖Fig.3 Trend chart of MAE and RMSE with different min_samples_leaf
從圖中可知,MAE與RMSE的值隨著葉子節(jié)點(diǎn)上的最小樣本數(shù)增大而增大,當(dāng)此參數(shù)設(shè)定為5時誤差值最小。GBDT模型最終的參數(shù)設(shè)置為葉子節(jié)點(diǎn)最小樣本數(shù)=5,樣本子采樣率=0.9,最大深度=12,學(xué)習(xí)率=0.1,迭代次數(shù)=50。使用和5.2.1中同樣的測試數(shù)據(jù)集進(jìn)行供電煤耗的回歸預(yù)測,預(yù)測評估結(jié)果顯示預(yù)測的均方根誤差以及平均絕對誤差分別為3.8774、1.7353,擬合優(yōu)度為0.9176。經(jīng)過參數(shù)調(diào)優(yōu)之后的GBDT回歸模型在對火電廠供電煤耗預(yù)測中同樣有良好的表現(xiàn)。
通過以上參數(shù)的調(diào)優(yōu),我們得到了訓(xùn)練好的隨機(jī)森林回歸模型以及GBDT回歸模型。用剩余20%的數(shù)據(jù)對供電煤耗進(jìn)行預(yù)測,模型預(yù)測的評估結(jié)果如表5所示。表5展示了隨機(jī)森林算法和GBDT算法在同一場景下最優(yōu)模型的訓(xùn)練和預(yù)測評估結(jié)果,綜合上文和表中內(nèi)容,可以得出以下結(jié)論:
(1)隨機(jī)森林參數(shù)相比GBDT算法的參數(shù)設(shè)置更簡單,調(diào)參的時間更短。
(2)調(diào)參過程中,對于同樣的數(shù)據(jù)集,隨機(jī)森林算法需要把最大深度調(diào)到20或以上,而GBDT算法只需調(diào)到10,模型就已經(jīng)有了很高的精度。這也驗(yàn)證了上文提到的兩種算法的區(qū)別:隨機(jī)森林算法關(guān)注的是降低方差,所以會采用深度很深的決策樹;而GBDT是一個逐步消除偏差的過程,對每個基分類器來說它會選擇更簡單的分類器,所以決策樹深度相比而言更淺。
(3)從模型評估結(jié)果來看,隨機(jī)森林無論是擬合還是預(yù)測時都有較小的誤差和較高的擬合優(yōu)度。其原因可能是隨機(jī)森林算法每一輪的訓(xùn)練集都采用有放回隨機(jī)抽樣,而GBDT每一輪會對失敗樣例賦予較大權(quán)重,這就使得GBDT在訓(xùn)練時精度會高于隨機(jī)森林回歸模型。當(dāng)模型進(jìn)行測試時,數(shù)據(jù)集變化,可能會導(dǎo)致GBDT回歸模型在預(yù)測時的效果并沒有隨機(jī)森林回歸模型理想。
(4)對于同一數(shù)據(jù)集,GBDT回歸模型所需的時長遠(yuǎn)小于比隨機(jī)森林所需時長。
表5 隨機(jī)森林和GBDT訓(xùn)練及預(yù)測模型評估結(jié)果比較Tab.5 Comparison of evaluation results of random forest and GBDT training and prediction models
論文詳細(xì)介紹了基于spark的隨機(jī)森林算法以及GBDT算法,主要對比了兩種算法的原理、參數(shù)以及同一場景下的模型效果。最后對實(shí)際數(shù)據(jù)進(jìn)行建模分析,并對隨機(jī)森林算法和GBDT算法在回歸問題中的表現(xiàn)進(jìn)行了比較,總的來說,隨機(jī)森林模型和GBDT模型在火電廠供電煤耗預(yù)測中都有較好的表現(xiàn),但是隨機(jī)森林模型的預(yù)測效果略優(yōu)于GBDT模型。此外,從參數(shù)調(diào)優(yōu)等方面分析,還能得出以下幾點(diǎn)結(jié)論:(1)隨機(jī)森林算法和GBDT算法都是基于決策樹的集成學(xué)習(xí)算法,而回歸問題中,前者采用取均值得到最終結(jié)果,后者采用累加法;(2)隨機(jī)森林算法采用較深的決策樹,而GBDT選擇深度較淺的決策樹;(3)隨機(jī)森林算法基于bagging方法,訓(xùn)練的每棵樹都相互獨(dú)立,因而易于并行,而GBDT算法基于boosting方法,每棵決策樹之間的依賴程度較大,這就決定了GBDT算法并行起來難度更高。而XGBoost算法解決了這一問題,它可以自動利用CPU的多線程進(jìn)行并行,在計算速度和準(zhǔn)確率上有明顯的提升[29]。我們可以在此基礎(chǔ)上對XGBoost算法進(jìn)行進(jìn)一步的研究,并將此算法運(yùn)用到人工智能平臺中。