為什麼XGBoost在機器學習競賽中表現如此卓越?

機器之心發表於2017-11-08
挪威科技大學 Didrik Nielsen 的碩士論文《使用 XGBoost 的樹提升:為什麼 XGBoost 能贏得「每一場」機器學習競賽?(Tree Boosting With XGBoost - Why Does XGBoost Win "Every" Machine Learning Competition?)》研究分析了 XGBoost 與傳統 MART 的不同之處以及在機器學習競賽上的優勢。機器之心技術分析師對這篇長達 110 頁的論文進行了解讀,提煉出了其中的要點和核心思想,匯成此篇。本文原文發表在機器之心英文官網上。

引言

tree boosting(樹提升)已經在實踐中證明可以有效地用於分類和迴歸任務的預測挖掘。

之前很多年來,人們所選擇的樹提升演算法一直都是 MART(multiple additive regression tree/多重累加回歸樹)。但從 2015 年開始,一種新的且總是獲勝的演算法浮出了水面:XGBoost。這種演算法重新實現了樹提升,並在 Kaggle 和其它資料科學競賽中屢獲佳績,因此受到了人們的歡迎。

在《Tree Boosting With XGBoost - Why Does XGBoost Win "Every" Machine Learning Competition?》這篇論文中,來自挪威科技大學的 Didrik Nielsen 研究調查了:

  1. XGBoost 與傳統 MART 的不同之處
  2. XGBoost 能贏得「每一場」機器學習競賽的原因

這篇論文分成三大部分:

  1. 回顧統計學習的一些核心概念
  2. 介紹 boosting 並以函式空間中數值優化的方式對其進行解釋;進一步討論更多樹方法以及樹提升方法的核心元素
  3. 比較 MART 和 XGBoost 所實現的樹提升演算法的性質;解釋 XGBoost 受歡迎的原因

統計學習的基本概念

這篇論文首先介紹了監督學習任務並討論了模型選擇技術。

機器學習演算法的目標是減少預期的泛化誤差,這也被稱為風險(risk)。如果我們知道真實的分佈 P(x,y),那麼風險的最小化就是一個可以通過優化演算法解決的最優化任務。但是,我們並不知道真實分佈,只是有一個用於訓練的樣本集而已。我們需要將其轉換成一個優化問題,即最小化在訓練集上的預期誤差。因此,由訓練集所定義的經驗分佈會替代真實分佈。上述觀點可以表示成下面的統計學公式:

為什麼XGBoost在機器學習競賽中表現如此卓越?

其中 為什麼XGBoost在機器學習競賽中表現如此卓越? 是模型的真實風險 R(f) 的經驗估計。L(.) 是一個損失函式,比如平方誤差損失函式(這是迴歸任務常用的損失函式),其它損失函式可以在這裡找到:http://www.cs.cornell.edu/courses/cs4780/2017sp/lectures/lecturenote10.html。n 是樣本的數量。

當 n 足夠大時,我們有:

為什麼XGBoost在機器學習競賽中表現如此卓越?

ERM(經驗風險最小化)是一種依賴於經驗風險的最小化的歸納原理(Vapnik, 1999)。經驗風險最小化運算 f hat 是目標函式的經驗近似,定義為:

為什麼XGBoost在機器學習競賽中表現如此卓越?

其中 F 屬於某個函式類,並被稱為某個模型類(model class),比如常數、線性方法、區域性迴歸方法(k-最近鄰、核迴歸)、樣條函式等。ERM 是從函式集 F 中選擇最優函式 f hat 的標準。

這個模型類和 ERM 原理可以將學習問題轉變成優化問題。模型類可以被看作是候選的解決方案函式,而 ERM 則為我們提供了選擇最小化函式的標準。

針對優化問題的方法有很多,其中兩種主要方法是梯度下降法和牛頓法;MART 和 XGBoost 分別使用了這兩種方法。

這篇論文也總結了常見的學習方法:

1. 常數

2. 線性方法

3. 區域性最優方法

4. 基函式擴充套件:顯式非線性項、樣條、核方法等

5. 自適應基函式模型:GAM(廣義相加模型)、神經網路、樹模型、boosting

另一個機器學習概念是模型選擇(model selection),這要考慮不同的學習方法和它們的超引數。首要的問題一直都是:增加模型的複雜度是否更好?而答案也總是與模型自身的泛化效能有關。如下圖 1 所示,我們也許可以在模型更加複雜的同時得到更好的表現(避免欠擬合),但我們也會失去泛化效能(過擬合):

為什麼XGBoost在機器學習競賽中表現如此卓越?

圖 1:泛化效能 vs 訓練誤差


為平方損失使用預期條件風險的經典的偏置-方差分解(bias-variance decomposition),我們可以觀察風險相對於複雜度的變化:

為什麼XGBoost在機器學習競賽中表現如此卓越?

圖 2:預期風險 vs 方差 vs 偏置


為此通常使用的一種技術是正則化(regularization)。通過隱式和顯式地考慮資料的擬合性和不完善性,正則化這種技術可以控制擬合的方差。它也有助於模型具備更好的泛化效能。

不同的模型類測量複雜度的方法也不一樣。LASSO 和 Ridge(Tikhonov regularization)是兩種常用於線性迴歸的測量方法。我們可以將約束(子集化、步進)或懲罰(LASSO、Ridge)直接應用於複雜度測量。

理解 Boosting、樹方法和樹提升

Boosting

boosting 是一種使用多個更簡單的模型來擬合資料的學習演算法,它所用的這些更簡單的模型也被稱為基本學習器(base learner)或弱學習器(weak learner)。其學習的方法是使用引數設定一樣或稍有不同的基本學習器來自適應地擬合資料。

Freund 和 Schapire (1996) 帶來了第一個發展:AdaBoost。實際上 AdaBoost 是最小化指數損失函式,並迭代式地在加權的資料上訓練弱學習器。研究者也提出過最小化對數損失的二階近似的新型 boosting 演算法:LogitBoost。

Breiman (1997a,b 1998) 最早提出可以將 boosting 演算法用作函式空間中的數值優化技術。這個想法使得 boosting 技術也可被用於迴歸問題。這篇論文討論了兩種主要的數值優化方法:梯度提升和牛頓提升(也被稱為二階梯度提升或 Hessian boosting,因為其中應用了 Hessian 矩陣)。下面,讓我們一步一步瞭解 boosting 演算法。

boosting 擬合同一類的整合模型(ensemble model):

為什麼XGBoost在機器學習競賽中表現如此卓越?

其可以被寫成自適應基函式模型:

為什麼XGBoost在機器學習競賽中表現如此卓越?

其中 f_0(x)=θ_0 且 f_m(x)=θ_m*Φ_m(x),m=1,…,M,Φm 是按順序累加的基本函式,可用於提升當前模型的擬合度。

因此,大多數 boosting 演算法都可以看作是在每次迭代時或準確或近似地求解

為什麼XGBoost在機器學習競賽中表現如此卓越?

所以,AdaBoost 就是為指數損失函式求解上述等式,其約束條件為:Φm 是 A={-1,1} 的分類器。而梯度提升或牛頓提升則是為任意合適的損失函式近似求解上述等式。

梯度提升和牛頓提升的演算法如下:

為什麼XGBoost在機器學習競賽中表現如此卓越?

為什麼XGBoost在機器學習競賽中表現如此卓越?

  • 為什麼XGBoost在機器學習競賽中表現如此卓越?是梯度
  • 為什麼XGBoost在機器學習競賽中表現如此卓越?是使用資料學習到的弱學習器
  • 為什麼XGBoost在機器學習競賽中表現如此卓越?是經驗 Hessian
  • 梯度提升:為什麼XGBoost在機器學習競賽中表現如此卓越?是由線搜尋(line search)確定的步長
  • 牛頓提升: h_m(x) 是經驗 Hessian


最常用的基本學習器是迴歸樹(比如 CART),以及分量形式的線性模型(component-wise linear model)或分量形式的平滑樣條(component-wise smoothing spline)。基本學習器的原則是要簡單,即有很高的偏置,但方差很低。

boosting 方法中的超引數有:

  1. 迭代次數 M:M 越大,過擬合的可能性就越大,因此需要驗證集或交叉驗證集。
  2. 學習率 η :降低學習率往往會改善泛化效能,但同時也會讓 M 增大,如下圖所示。


為什麼XGBoost在機器學習競賽中表現如此卓越?

在 Boston Housing 資料集上的不同學習率的樣本外(out-of-sample)RMSE

樹方法

樹模型是簡單和可解釋的模型。它們的預測能力確實有限,但將多個樹模型組合到一起(比如 bagged trees、隨機森林或在 boosting 中),它們就可以變成一種強大的預測模型。

我們可以將樹模型看作是將特徵空間分割成幾個不同的矩形和非重疊區域集合,然後它可以擬合一些簡單的模型。下圖給出了使用 Boston Housing 資料得到的視覺化結果:

為什麼XGBoost在機器學習競賽中表現如此卓越?


終端節點的數量和樹的深度可以看作是樹模型的複雜度度量。為了泛化這種模型,我們可以在複雜度度量上輕鬆地應用一個複雜度限制,或在終端節點的數量或葉權重的懲罰項上應用一個懲罰(XGBoost 使用的這種方法)。

因為學習這種樹的結構是 NP 不完全的,所以學習演算法往往會計算出一個近似的解。這方面有很多不同的學習演算法,比如 CART(分類和迴歸樹)、C4.5 和 CHAID。這篇論文描述了 CART,因為 MART 使用的 CART,XGBoost 也實現了一種與 CART 相關的樹模型。

CART 以一種自上而下的方式生長樹。通過考慮平行於座標軸的每次分割,CART 可以選擇最小化目標的分割。在第二步中,CART 會考慮每個區域內每次平行的分割。在這次迭代結束時,最好的分割會選出。CART 會重複所有這些步驟,直到達到停止標準。

給定一個區域 Rj,學習其權重 wj 通常很簡單。令 Ij 表示屬於區域 Rj 的索引的集合,即 xi∈Rj,其中 i∈Ij。

其權重是這樣估計的:

為什麼XGBoost在機器學習競賽中表現如此卓越?

對於一個樹模型 f_hat,經驗風險為:

為什麼XGBoost在機器學習競賽中表現如此卓越?

其中我們令 L_j hat 表示節點 j 處的累積損失。在學習過程中,當前樹模型用 f_before hat 和 f_after hat 表示。

我們可以計算所考慮的分割所帶來的增益:

為什麼XGBoost在機器學習競賽中表現如此卓越?

對於每一次分割,每個可能節點的每個可能分割都會計算這種增益,再取其中最大的增益。

現在讓我們看看缺失值。CART 會使用替代變數(surrogate variable)來處理缺失值,即對於每個預測器,我們僅使用非缺失資料來尋找分割,然後再基於主分割尋找替代預測因子,從而模擬該分割。比如,假設在給定的模型中,CART 根據家庭收入分割資料。如果一個收入值不可用,那麼 CART 可能會選擇教育水平作為很好的替代。

但 XGBoost 是通過學習預設方向來處理缺失值。XGBoost 會在內部自動學習當某個值缺失時,最好的方向是什麼。這可以被等價地看作是根據訓練損失的減少量而自動「學習」缺失值的最佳插補值。

根據類別預測器,我們可以以兩種方式處理它們:分組類別或獨立類別。CART 處理的是分組類別,而 XGBoost 需要獨立類別(one-hot 編碼)。

這篇論文以列表的形式總結了樹模型的優缺點。優點(Hastie et al., 2009; Murphy, 2012):


  • •容易解釋
  • •可以相對快地構建
  • •可以自然地處理連續和分類資料
  • •可以自然地處理缺失資料
  • •對輸入中的異常值是穩健的
  • •在輸入單調變換時是不變的
  • •會執行隱式的變數選擇
  • •可以得到資料中的非線性關係
  • •可以得到輸入之間的高階互動
  • •能很好地擴充套件到大型資料集

缺點(Hastie et al., 2009; Kuhn and Johnson, 2013; Wei-Yin Loh, 1997; Strobl et al., 2006):

  • •往往會選擇具有更高數量的不同值的預測器
  • •當預測器具有很多類別時,可能會過擬合
  • •不穩定,有很好的方差
  • •缺乏平滑
  • •難以獲取疊加結構
  • •預測效能往往有限

樹提升

在上述發展的基礎上,現在我們將 boosting 演算法與基本學習器樹方法結合起來。提升後的樹模型可以看作是自適應基函式模型,其中的基函式是迴歸樹:

為什麼XGBoost在機器學習競賽中表現如此卓越?

提升樹模型(boosting tree model)是多個樹 fm 的和,所以也被稱為樹整合(tree ensemble)或疊加樹模型(additive tree model)。因此它比單個樹模型更加平滑,如下圖所示:

為什麼XGBoost在機器學習競賽中表現如此卓越?

擬合 Boston Housing 資料的疊加樹模型的視覺化

在提升樹模型上實現正則化的方法有很多:

1. 在基函式擴充套件上進行正則化

2. 在各個樹模型上進行正則化

3. 隨機化

一般來說,提升樹往往使用很淺的迴歸樹,即僅有少數終端節點的迴歸樹。相對於更深度的樹,這樣的方差較低,但偏置更高。這可以通過應用複雜度約束來完成。

XGBoost 相對於 MART 的優勢之一是複雜度的懲罰,這對疊加樹模型而言並不常見。目標函式的懲罰項可以寫成:

為什麼XGBoost在機器學習競賽中表現如此卓越?

其中第一項是每個單個樹的終端節點的數量,第二項是在該項權重上的 L2 正則化,最後一項是在該項權重上的 L1 正則化。

Friedman(2002) 最早引入了隨機化,這是通過隨機梯度下降實現的,其中包括在每次迭代時進行行子取樣(row subsampling)。隨機化有助於提升泛化效能。子取樣的方法有兩種:行子取樣與列子取樣(column subsampling)。MART 僅包含行子取樣(沒有替代),而 XGBoost 包含了行子取樣和列子取樣兩種。

正如前面討論的那樣,MART 和 XGBoost 使用了兩種不同的 boosting 演算法來擬合疊加樹模型,分別被稱為 GTB(梯度樹提升)和 NTB(牛頓樹提升)。這兩種演算法都是要在每一次迭代 m 最小化:

為什麼XGBoost在機器學習競賽中表現如此卓越?

其基函式是樹:

為什麼XGBoost在機器學習競賽中表現如此卓越?

其一般步驟包含 3 個階段:

1. 確定一個固定的候選樹結構的葉權重 ;

2. 使用前一階段確定的權重,提出不同的樹結構,由此確定樹結構和區域;

3. 一旦樹結構確定,每個終端節點中的最終葉權重(其中 j=1,..,T)也就確定了。

演算法 3 和 4 使用樹作為基函式,對演算法 1 和 2 進行了擴充套件:

為什麼XGBoost在機器學習競賽中表現如此卓越?

為什麼XGBoost在機器學習競賽中表現如此卓越?

XGBoost 和 MART 的差異

最後,論文對兩種樹提升演算法的細節進行了比較,並試圖給出 XGBoost 更好的原因。

演算法層面的比較

正如之前的章節所討論的那樣,XGBoost 和 MART 都是要通過簡化的 FSAM(Forward Stage Additive Modelling/前向階段疊加建模)求解同樣的經驗風險最小化問題:

為什麼XGBoost在機器學習競賽中表現如此卓越?

即不使用貪婪搜尋,而是每次新增一個樹。在第 m 次迭代時,使用下式學習新的樹:

為什麼XGBoost在機器學習競賽中表現如此卓越?

XGBoost 使用了上面的演算法 3,即用牛頓樹提升來近似這個優化問題。而 MART 使用了上面的演算法 4,即用梯度樹提升來做這件事。這兩種方法的不同之處首先在於它們學習樹結構的方式,然後還有它們學習分配給所學習的樹結構的終端節點的葉權重的方式。

再看看這些演算法,我們可以發現牛頓樹提升有 Hessian 矩陣,其在確定樹結構方面發揮了關鍵性的作用,XGBoost:

為什麼XGBoost在機器學習競賽中表現如此卓越?

而使用了梯度樹提升的 MART 則是:

為什麼XGBoost在機器學習競賽中表現如此卓越?

然後,XGBoost 可以直接這樣定義牛頓樹提升的葉權重:

為什麼XGBoost在機器學習競賽中表現如此卓越?

使用梯度樹提升的 MART 則這樣定義:

為什麼XGBoost在機器學習競賽中表現如此卓越?

總結一下,XGBoost 使用的 Hessian 是一種更高階的近似,可以學習到更好的樹結構。但是,MART 在確定葉權重上表現更好,但卻是對準確度更低的樹結構而言。

在損失函式的應用性方面,牛頓樹提升因為要使用 Hessian 矩陣,所以要求損失函式是二次可微的。所以它在選擇損失函式上要求更加嚴格,必須要是凸的。

當 Hessian 每一處都等於 1 時,這兩種方法就是等價的,這就是平方誤差損失函式的情況。因此,如果我們使用平方誤差損失函式之外的任何損失函式,在牛頓樹提升的幫助下,XGBoost 應該能更好地學習樹結構。只是梯度樹提升在後續的葉權重上更加準確。因此無法在數學上對它們進行比較。

儘管如此,該論文的作者在兩個標準資料集上對它們進行了測試:Sonar 和 Ionosphere(Lichman, 2013)。這個實證比較使用了帶有 2 個終端節點的樹,沒有使用其它正則化,而且這些資料也沒有分類特徵和缺失值。梯度樹提升還加入了一個線搜尋(line search),如圖中紅色線所示。

為什麼XGBoost在機器學習競賽中表現如此卓越?

這個比較圖說明這兩種方法都能無縫地執行。而且線搜尋確實能提升梯度提升樹的收斂速度。

正則化比較

正則化引數實際上有 3 類:

1.boosting 引數:樹的數量 M 和學習率η

2. 樹引數:在單個樹的複雜度上的約束和懲罰

3. 隨機化引數:行子取樣和列子取樣

兩種 boosting 方法的主要差別集中在樹引數以及隨機化引數上。

對於樹引數,MART 中的每個樹都有同樣數量的終端節點,但 XGBoost 可能還會包含終端節點懲罰 γ,因此其終端節點的數量可能會不一樣並且在最大終端節點數量的範圍內。XGBoost 也在葉權重上實現了 L2 正則化,並且還將在葉權重上實現 L1 正則化。

在隨機化引數方面,XGBoost 提供了列子取樣和行子取樣;而 MART 只提供了行子取樣。

為什麼 XGBoost 能贏得「每一場」競賽?

通過使用模擬資料,論文作者首次表明樹提升可以被看作是自適應地確定區域性鄰域。

使用

為什麼XGBoost在機器學習競賽中表現如此卓越?

生成

為什麼XGBoost在機器學習競賽中表現如此卓越?

然後使用區域性線性迴歸(使用了兩種不同靈活度的擬合)來擬合它:

為什麼XGBoost在機器學習競賽中表現如此卓越?

然後使用平滑樣條函式(使用了兩種不同靈活度的擬合)來擬合它:

為什麼XGBoost在機器學習競賽中表現如此卓越?

現在我們嘗試提升的樹樁(boosted tree stump)(兩個終端節點)擬合:

為什麼XGBoost在機器學習競賽中表現如此卓越?

本論文詳細說明了權重函式影響擬合的確定的方式,並且表明樹提升可以被看作是直接在擬合階段考慮偏置-方差權衡。這有助於鄰域保持儘可能大,以避免方差不必要地增大,而且只有在複雜結構很顯然的時候才會變小。

儘管當涉及到高維問題時,樹提升「打敗了」維度的詛咒(curse of dimensionality),而沒有依賴任何距離指標。另外,資料點之間的相似性也可以通過鄰域的自適應調整而從資料中學習到。這能使模型免疫維度的詛咒。

另外更深度的樹也有助於獲取特徵的互動。因此無需搜尋合適的變換。

因此,是提升樹模型(即自適應的確定鄰域)的幫助下,MART 和 XGBoost 一般可以比其它方法實現更好的擬合。它們可以執行自動特徵選擇並且獲取高階互動,而不會出現崩潰。

通過比較 MART 和 XGBoost,儘管 MART 確實為所有樹都設定了相同數量的終端節點,但 XGBoost 設定了 Tmax 和一個正則化引數使樹更深了,同時仍然讓方差保持很低。相比於 MART 的梯度提升,XGBoost 所使用的牛頓提升很有可能能夠學習到更好的結構。XGBoost 還包含一個額外的隨機化引數,即列子取樣,這有助於進一步降低每個樹的相關性。

機器之心分析師的看法

這篇論文從基礎開始,後面又進行了詳細的解讀,可以幫助讀者理解提升樹方法背後的演算法。通過實證和模擬的比較,我們可以更好地理解提升樹相比於其它模型的關鍵優勢以及 XGBoost 優於一般 MART 的原因。因此,我們可以說 XGBoost 帶來了改善提升樹的新方法。

本分析師已經參與過幾次 Kaggle 競賽了,深知大家對 XGBoost 的興趣以及對於如何調整 XGBoost 的超引數的廣泛深度的討論。相信這篇文章能夠啟迪和幫助初學者以及中等水平的參賽者更好地詳細理解 XGBoost。

參考文獻

  • Chen, T. and Guestrin, C. (2016). Xgboost: A scalable tree boosting system. In Proceedings of the 22Nd ACM SIGKDD International Conference on Knowl- edge Discovery and Data Mining, KDD 』16, pages 785–794, New York, NY, USA. ACM.
  • Freund, Y. and Schapire, R. E. (1996). Experiments with a new boosting algorithm. In Saitta, L., editor, Proceedings of the Thirteenth International Conference on Machine Learning (ICML 1996), pages 148–156. Morgan Kaufmann.
  • Friedman, J. H. (2002). Stochastic gradient boosting. Comput. Stat. Data Anal., 38(4):367–378.
  • Hastie, T., Tibshirani, R., and Friedman, J. (2009). The Elements of Statistical Learning: Data Mining, Inference, and Prediction, Second Edition. Springer Series in Statistics. Springer.
  • Kuhn, M. and Johnson, K. (2013). Applied Predictive Modeling. SpringerLink : Bu ̈cher. Springer New York.
  • Lichman, M. (2013). UCI machine learning repository.
  • Murphy, K. P. (2012). Machine Learning: A Probabilistic Perspective. The MIT Press.
  • Strobl, C., laure Boulesteix, A., and Augustin, T. (2006). Unbiased split selection for classification trees based on the gini index. Technical report.
  • Vapnik, V. N. (1999). An overview of statistical learning theory. Trans. Neur. Netw., 10(5):988–999.
  • Wei-Yin Loh, Y.-S. S. (1997). Split selection methods for classification trees. Statistica Sinica, 7(4):815–840.
  • Wikipedia::Lasso. https://en.wikipedia.org/wiki/Lasso_(statistics)
  • Wikipedia::Tikhonov regularization. https://en.wikipedia.org/wiki/Tikhonov_regularization

相關文章