李偲希,白全生,舒暢,肖祥武
(湖南大唐先一科技有限公司大數據事業部,湖南 長沙 410000)
隨機森林算法是目前應用較為廣泛的機器學習算法之一[1]。文獻[2]表明隨機森林算法在121個數據集上的179種分類算法的分類性能測試中表現最優。近十年來,隨著電力大數據的發展,隨機森林算法在電力行業發揮了巨大作用。文獻[3]利用隨機森林算法抗噪和適應能力強的特點,提出了一種計算漏報率的隨機森林集成投票算法模型,提高了電機承軸故障診斷的準確率。文獻[4]將模糊聚類與隨機森林相結合所建立的模型,在電力系統短期負荷變化的預測中有良好的表現。隨著隨機森林算法的不斷實踐,其缺陷也逐漸被重視,很多學者對其不足之處提出了改進方案,文獻[5]提出了一種基于欠采樣和合成少數類過采樣技術相結合的優化算法,來改善數據不平衡問題,有效提升了隨機森林在非平衡數據集上的性能。文獻[6]設計并實現了采用spark分布式存儲計算技術的基于spark的隨機森林算法,大大提升了運算速度。另一種基于決策樹的集成算法——梯度提升決策數[7]算法(以下簡稱GBDT算法),也是工業領域較為常用的算法。文獻[8]提出了一種基于GBDT模型的交互穩定性評估方法,為串聯結構系統在電能質量分析、優化運行等方面提供了方法支持,而文獻[9]則在研究了現有的GBDT并行算法后提出了基于二元相關性和梯度提升決策樹集成學習的多標簽分類方法,提升了電力ICT系統復雜故障類型的多標簽分類的準確率。隨機森林算法與GBDT算法雖然在故障診斷、電力負荷預測等工業場景中應用較為廣泛,但是對于火電廠海量且冗雜的能耗數據中是否也有同樣優異的表現還有待研究。因此,本文的目標在于比較兩種算法在核心原理、參數調整和回歸模型效果上的差異,并且運用大數據平臺中的實時數據進行分析,分別建立基于spark平臺的隨機森林和GBDT并行算法的回歸模型,比較兩種模型對電廠煤耗的預測效果。
Spark[10]是基于內存計算的大數據分布式集群框架,它在海量數據集上的計算性能十分高效。Spark的核心部分則是彈性分布式數據集(簡稱RDD)[11],它在群集的多臺節點上對數據進行分區。RDD支持兩種操作:轉換和操作。轉換算子只記錄轉換的過程,而只有當觸發操作算子時才能真正執行程序。由于只有在真正需要將結果寫入RDD時才會執行以上操作,因此計算效率便得到了很大的提升。本文主要通過基于spark平臺的隨機森林和GBDT算法建立回歸模型,并對模型的預測效果進行比較分析。
決策樹[12]是一種用于分類和回歸的樹結構。分類樹用于對離散標簽數據進行分類。如果目標變量的值是連續型,那么該類決策樹稱為回歸決策樹。
比較常見的決策樹算法有ID3,C4.5,分類回歸決策樹(以下簡稱CART決策樹)等[13],前面兩種算法僅支持分類問題,而CART決策樹既可用于分類,也能解決回歸問題。
分類回歸決策樹是一棵二叉樹[14],每次只將數據切分成兩部分。CART分類樹的中心思想是自上而下從根節點開始建立節點,每一個節點處選擇基尼指數[15](又叫基尼不純度)最小的特征進行分割,CART回歸樹采用樣本最小平方誤差作為節點分裂的依據。
CART決策樹算法非常容易出現過擬合問題,導致泛化能力不強,此外,在尋找最優決策樹時容易陷入局部最優。因此,在處理實際問題時,運用單一的回歸樹是遠遠不夠的。而隨機森林算法以及GBDT算法在回歸樹的基礎上,結合bagging[16]和 boosting[17]兩種集成學習方法進行改良和升級,大大提高了其泛化能力。
隨機森林算法是一種基于bagging方法的并行式集成學習算法[18]。Bagging方法的基本原理是對于一個大小為M的總樣本集,通過bootstrap自助采樣法[19]得到T個大小為M的樣本子集,通過T個樣本子集分別訓練生成T個弱學習器[20],bootstrap方法簡單來說就是一種有放回隨機抽樣。最終進行集成時,如果是分類問題則采用投票法,若為回歸問題則采用平均法。之所以被稱為隨機森林,是因為首先它是由多個決策樹集成的,并在此基礎上引入了隨機特征的選取。隨機森林中子樹的每一次分裂過程并未用到所有的特征,而是從待選特征中隨機選取一定的特征,再從隨機選取的特征中找出最優的特征。在回歸問題中,給定一個訓練數據集D,包含K個特征,并行隨機森林回歸算法的基本步驟如下:
(1)數據預處理后生成RDD數據集。
(2)決策樹的構建。從數據集中通過bootstrap采樣法生成T組數據集,每組數據集均由抽中數據與袋外數據組成。使用數據集Ti訓練生成一棵決策樹,在決策樹的每個節點進行分裂時,隨機從K個特征中選出k個特征,k≤K。在每個節點上,根據最小化平方誤差選取最優特征。用spark進行并行不斷迭代,最終形成指定數目的相互獨立的回歸決策樹。
(3)建立回歸模型。將所有決策樹預測值的平均值作為最終輸出的預測結果。
隨機森林算法屬于集成學習算法,由于其樣本與特征選擇中的隨機性,使得隨機森林不容易出現過擬合[21]的情況。此外它能夠處理高維度的數據,并且不用做特征選擇,既能處理離散型數據,也能處理連續型數據,數據集無須規范化。隨機森林算法的實際應用將會在第五部分中體現。
梯度提升決策樹算法是一種使用決策樹作為弱學習器的Gradient Boosting[22]算法。Gradient Boosting方法是boosting方法中的一種,其主要思想是每個新模型的建立是為了使得之前模型的殘差往梯度方向減小。GBDT回歸算法通過訓練多個CART回歸樹得出基于每個樣本的殘差,再基于所有的殘差訓練回歸樹并且根據回歸樹的權重更新得出新的模型,即所有回歸樹的結論累加起來獲得最終預測結果[23]。和隨機森林算法不同,GBDT 算法的弱學習器之間存在很強的依賴關系。它的損失函數沿著負梯度方向進行迭代[24],使得損失函數越來越小,模型的偏差也逐漸減小。GBDT的算法步驟[25]如下:
輸入:訓練集D={(x1,y1),(x2,y2),……,(xM,yM)};
損失函數L(y,f(x));

(1)
步驟2:對于t=1,2,……,T:
(1)對i=1,2,……,M,計算損失函數的負梯度在當前模型的值:
(2)
(2)擬合一棵回歸樹,得到第t棵樹的葉節點區域:Rtj,j=1,2,……,J;
(3)對j=1,2,……,J,計算
(3)
(4)更新回歸樹:
(4)
步驟3:輸出最終的回歸樹:
(5)
第五章主要結合實際設計實驗,對上文提到的算法進行檢驗。實驗采用大數據平臺采集到的某電廠一年的運行數據,對火電廠的供電煤耗進行分析和預測。實驗目的在于比較基于spark平臺的并行隨機森林與GBDT算法在處理回歸問題時,模型參數調整上的區別以及調參之后模型的預測效果。
大數據平臺采集某電廠2016年9月1日至2017年8月31日周期為一年的運行數據,步長為1分鐘。經過業務分析,對數據進行清洗及預處理,剔除異常數據、填補空值后,最終我們提取了7000條工況穩定下的健康數據作為樣本數據集。根據灰色關聯度分析,選取關聯度最大的前12個特征進行分析,其中包括主汽溫度、主汽壓力、飛灰可燃物等。具體信息見表1:

表1 灰色關聯度分析Tab.1 Grey Relational Analysis

續表1
本文主要使用隨機森林算法以及GBDT算法對提取的樣本數據集(7000條)進行回歸建模分析,預測火電廠的供電煤耗,并比較兩種模型的預測效果。選擇決定系數(R2)[26]、平均絕對誤差(MAE)和均方根誤差(RMSE)[27]作為評估回歸模型預測精度的統計量,具體計算公式分別為:

(6)

(7)

(8)
R2越接近1,說明模型擬合度越高;MAE和RMSE的值越小,說明模型偏差越小,模型精度越高,預測效果更好。
5.2.1 隨機森林回歸模型
建立隨機森林回歸模型,首先初始化參數,包括決策樹數量、最大深度以及最大分裂數,通過不斷調整以上參數的值,使得模型精度達到最高。其余參數均保持一致(分類策略=all,不純度=variance),首先調整決策樹數量。由于隨機森林算法產生近乎獨立的預測且最終結果是取平均值,因此增加更多得決策樹也不容易出現過擬合的情況。所以我們設置的決策樹數量可以盡可能大。保持最大深度(10)、最大分裂數(32)不變,改變決策樹數量。決策樹數量與平均絕對誤差(MAE)以及均方根誤差(RMSE)的關系走勢圖如下(圖1):

圖1 不同決策樹數量的MAE和RMSE走勢圖Fig.1 Trend chart of MAE and RMSE with different number of decision trees
從圖中可知,當決策樹數量較小時,隨機森林回歸誤差比較大。隨著數量的增加,MAE和RMSE的值均呈下降趨勢,在決策樹數目設為350時達到最小值,隨后MAE和RMSE的值又會隨著決策樹數目的增加而逐漸增大。
此外,決策樹的深度以及最大分裂數也是兩個比較重要的參數。深度增加則訓練時長增加,精度也隨之提高,但是也更容易出現過擬合的情況,但在隨機森林算法中適當增加深度是可以接受的。最大分裂數是指離散化連續特征的最大箱子數,最大分裂數增加,算法的復雜程度和所需的時長也會增加。保持決策樹數量(350)不變,通過調整最大深度以及最大分裂數來觀察均方根誤差隨深度的變化。表2顯示了不同最大分裂數和最大深度下RMSE值的情況:

表2 不同最大深度和最大分裂數的RMSE值比較Tab.2 Comparison of RMSE of different maximum depth and maximum bins
通過橫向比較表中數據可知,隨著最大深度的增加,均方根誤差在逐漸減小,最大深度為30時均方根誤差最小。當最大深度確定時RMSE的值在最大分裂數設為50時最小,隨后隨著最大分裂數的增加而增加。
綜合以上分析,最終將參數設置為:決策樹數量=350,最大深度=30,最大分裂數=50,分裂策略=all,不純度= variance,此時模型的均方根誤差為1.211546,擬合優度R2約為0.9919。用剩余20%的數據集作為預測數據集來檢驗模型的預測效果,預測模型的MAE和RMSE分別為1.341711和3.297954,R2的值為0.940364。從實驗結果來看,隨機森林回歸模型無論在訓練和預測時都有較好的表現。
5.2.2 GBDT回歸模型
使用GBDT算法建立模型時,同樣首先初始化參數,參數不純度=variance,損失函數=squared,最大分裂數=32均保持不變,通過調整最大深度,學習率(又稱步長)以及迭代次數[28]來使得模型達到最優。
學習率以及迭代次數分別設置為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的值不斷減小,當最大深度設置為10時,模型的誤差就已經很小了,在深度為12時達到最小。接下來將最大深度的值固定(=12)對迭代次數和學習率進行調整。迭代次數也就是弱學習器的個數,學習率又稱步長,即每個弱學習器權重的縮減系數,在調參過程中通常用步長和迭代次數一起決定模型的擬合效果。模型的評估結果見表3:

表3 迭代次數和學習率的MAE值以及RMSE值比較Tab.3 Comparison of MAE and RMSE of iterations and learning rate
表3中的結果顯示,迭代次數不變,學習率上升,MAE和RMSE的值減小;學習率相同的條件下,若增加迭代次數,也會使得誤差逐漸減小,由于迭代次數為100時訓練時長較長且為了避免出現過擬合的情況,因此將模型參數最終設定為最大深度=12。由于建模過程中使用的子采樣率默認為1,即每次預測時都采用全部數據進行擬合,會導致模型的泛化能力弱。通過調整子采樣率以及葉子節點最小樣本數則可以防止過擬合問題。保持其余參數不變,將樣本子采樣率分別設置為0.6、0.7、0.8、0.9,各模型的評估結果如表4所示:

表4 不同子采樣率下模型MAE值和RMSE值比較Tab.4 Comparison of MAE and RMSE of different subsample rates
由表中數據可知,當子采樣率升高,MAE與RMSE的值會隨之減小,當子采樣率為0.9時達到最小值。子采樣率=0.9保持不變,再將參數葉子節點最小樣本數分別設置為5、10、15、20,其余參數一致。各模型均方根誤差RMSE和平均絕對誤差MAE的走勢圖如下(圖3):

圖3 不同葉子節點最小樣本數的MAE和RMSE走勢圖Fig.3 Trend chart of MAE and RMSE with different min_samples_leaf
從圖中可知,MAE與RMSE的值隨著葉子節點上的最小樣本數增大而增大,當此參數設定為5時誤差值最小。GBDT模型最終的參數設置為葉子節點最小樣本數=5,樣本子采樣率=0.9,最大深度=12,學習率=0.1,迭代次數=50。使用和5.2.1中同樣的測試數據集進行供電煤耗的回歸預測,預測評估結果顯示預測的均方根誤差以及平均絕對誤差分別為3.8774、1.7353,擬合優度為0.9176。經過參數調優之后的GBDT回歸模型在對火電廠供電煤耗預測中同樣有良好的表現。
通過以上參數的調優,我們得到了訓練好的隨機森林回歸模型以及GBDT回歸模型。用剩余20%的數據對供電煤耗進行預測,模型預測的評估結果如表5所示。表5展示了隨機森林算法和GBDT算法在同一場景下最優模型的訓練和預測評估結果,綜合上文和表中內容,可以得出以下結論:
(1)隨機森林參數相比GBDT算法的參數設置更簡單,調參的時間更短。
(2)調參過程中,對于同樣的數據集,隨機森林算法需要把最大深度調到20或以上,而GBDT算法只需調到10,模型就已經有了很高的精度。這也驗證了上文提到的兩種算法的區別:隨機森林算法關注的是降低方差,所以會采用深度很深的決策樹;而GBDT是一個逐步消除偏差的過程,對每個基分類器來說它會選擇更簡單的分類器,所以決策樹深度相比而言更淺。
(3)從模型評估結果來看,隨機森林無論是擬合還是預測時都有較小的誤差和較高的擬合優度。其原因可能是隨機森林算法每一輪的訓練集都采用有放回隨機抽樣,而GBDT每一輪會對失敗樣例賦予較大權重,這就使得GBDT在訓練時精度會高于隨機森林回歸模型。當模型進行測試時,數據集變化,可能會導致GBDT回歸模型在預測時的效果并沒有隨機森林回歸模型理想。
(4)對于同一數據集,GBDT回歸模型所需的時長遠小于比隨機森林所需時長。

表5 隨機森林和GBDT訓練及預測模型評估結果比較Tab.5 Comparison of evaluation results of random forest and GBDT training and prediction models
論文詳細介紹了基于spark的隨機森林算法以及GBDT算法,主要對比了兩種算法的原理、參數以及同一場景下的模型效果。最后對實際數據進行建模分析,并對隨機森林算法和GBDT算法在回歸問題中的表現進行了比較,總的來說,隨機森林模型和GBDT模型在火電廠供電煤耗預測中都有較好的表現,但是隨機森林模型的預測效果略優于GBDT模型。此外,從參數調優等方面分析,還能得出以下幾點結論:(1)隨機森林算法和GBDT算法都是基于決策樹的集成學習算法,而回歸問題中,前者采用取均值得到最終結果,后者采用累加法;(2)隨機森林算法采用較深的決策樹,而GBDT選擇深度較淺的決策樹;(3)隨機森林算法基于bagging方法,訓練的每棵樹都相互獨立,因而易于并行,而GBDT算法基于boosting方法,每棵決策樹之間的依賴程度較大,這就決定了GBDT算法并行起來難度更高。而XGBoost算法解決了這一問題,它可以自動利用CPU的多線程進行并行,在計算速度和準確率上有明顯的提升[29]。我們可以在此基礎上對XGBoost算法進行進一步的研究,并將此算法運用到人工智能平臺中。