資料分析 XGBoost (1)

教學目標

初步了解 XGBoost 監督式學習演算法的基本概念。

重點概念

首先 XGBoost 全名為 Extreme Gradient Boosting,主要是基於梯度提升決策樹 (Gradient Boosted Decision Tree,GBT),被應用於解決監督式學習的問題,監督式學習主要是藉由多個特徵的訓練資料中學習建立一個模型,並且透過模型預測目標變數的結果。其中模型以數學函數表示,透過給定 X 針對 Y 進行預測的目標函數,其中模型的參數會從資料中學習調整,同時根據預測值的不同,我們可以將問題類型分為迴歸或分類。

接著我們需要根據訓練資料,嘗試找到最好的參數,因此我們需要定義目標函數,以利於量測參數的效果,其中目標函數主要有兩個部份,分別為損失函數和正規化。所謂損失函數主要是用於評估模型有多符合資料,通常我們會採用平方差進行衡量損失函數,但是針對邏輯回歸則是以邏輯斯函數進行衡量損失函數。至於正規化則是則是懲罰複雜模型,以利防止過適問題 (Overfitting),所謂過適問題就是當模型在訓練資料集上的誤差低,但是在驗證資料集上的誤差非常高,最根本的辦法就是降低模型複雜度,像是增加訓練資料、減少訓練使用的特徵數量和提高正規化程度,因為我們對於好模型的判斷依據是準確且簡單為主,主要會以機器學習中的偏差 (Bias) 和變異 (Variance) 進行判斷模型是否有不足或過適的問題發生。在統計學中有個概念為偏差和變異之權衡 (Bias-Variance tradeoff),簡單來說,偏差可以理解為若我們有無限資料時,訓練出最佳模型的誤差,我們會儘可能透過目標函數盡可能去擬合訓練資料,此時會有較少的偏差,而變異則是因為我們有限資料中隨機性所帶來的誤差,此時正規化則是讓模型盡可能簡單,因為當模型越簡單則有限資料擬合出來結果的隨機性較小,不易發生過適問題,使得最後模型的預測更加穩定。

再來監督式學習模型最常用的是 Boosted Tree,因為效果非常好,並且計算複雜度不高,同時對於輸入要求較不敏感,因此是資料科學家必備的工具之一。至於 XGBoost 所對應的模型為 Tree Ensemble,所謂 Tree Ensemble 主要是由分類和迴歸樹 (Classification And Regression Trees,CART) 所組成,同時 Boosted Tree 最基本組成部份就是 CART,所謂 CART 會將輸入根據不同的屬性分配至各個葉子節點,每個葉子節點皆會對應一個分數,此時我們可以針對葉子節點的分數進行更多模型結果的解釋。然而一個 CART 通常過於簡單而無法有效的進行預測,所以我們會再透過加強的模型為 Tree Ensemble,我們會將多棵樹的預測分數加總進行預測。至於我們常見的 Random Forest 和 Boosted Tree 模型皆是 Tree Ensemble,差別在於建構模型的學習參數方法不同,其模型中的參數對應樹的結構和每個葉子節點上的預測分數。

然而 Tree Ensemble 模型中的參數比傳統模型最優化問題更難,因為傳統最優化問題我們能夠透過梯度來解決,但是我們卻無法一次訓練所有的樹,因此我們則會透過增量訓練 (Additive Training) 的方式,每一次保留原來的模型不變,並且加入一個新的函數至我們的模型中,也就是說每一步我們皆會在前一步的基礎上增加一顆樹,以利修復上一顆樹的不足,有助於提升目標函數。其中我們使用均方差作為損失函數,我們會採用泰勒展開來定義一個近似的目標函數,請注意此目標函數只依賴於每個資料在誤差函數一階導數和二階導數,以及在 XGBoost 中將能夠支援自定義損失函數進行優化。

最後針對 XGBoost 模型的複雜度,我們則要考量正規化,其中主要會將樹拆分成結構部份,也就是每個葉子節點對應數係的函數,以及葉子部份,也就是葉子節點上分數所組成的向量。此時我們將會定義一棵樹的複雜度為節點個數和每個樹葉子節點上分數的平方和。但是在增量學習的過程中,我們要如何選擇新增的樹呢?若我們已經知道樹的結構時,則可透過目標函數求最佳解,以及最佳解對應目標函數的最大增益。下一步我們要如何找出最好的樹呢?主要可以透過貪心法,也就是在樹的每層建構過程中優化目標函式的最大增益。

總結 XGBoost 專注於模型的可解釋性,更適用於變數較少的資料,更容易於調整參數。除此之外 XGBoost 的設計目標為:

  1. 記憶體優化:大部分的記憶體分配在第一次加載時就完成,之後便不再進行動態記憶體分配的問題。
  2. 快取優化:大部份的訓練模式盡可能善用快取機制。
  3. 改善模型:模型演算法更加強健和更高準確性。

所以 XGBoost 執行速度非常快速且非常準確,同時支援 YARN 等分散式平台上進行執行有效解決問題,以及在資料科學方面有許多 Kaggle 選手皆選用 XGBoost 模型演算法進行比賽。因此 XGBoost 遵循 Boosted Tree 的思維進行實作,同時考慮系統優化和機器學習原理,用最少的執行時間提高模型準確性。

相關資源