XGBoost簡(jiǎn)介

XGBoost

Extreme Gradient Boosting(XGBoost)是由華盛頓大學(xué)(University of Washington)的陳天奇作為 Distributed (Deep) Machine Learning Community (DMLC) 組員所開發(fā)的一個(gè)研究項(xiàng)目。在陳天奇與隊(duì)友一起贏得了Higgs Machine Learning Challenge后谆奥,許多的數(shù)據(jù)科學(xué)競(jìng)賽隊(duì)伍使用XGBoost并獲得了冠軍,促進(jìn)了該工具在數(shù)據(jù)科學(xué)應(yīng)用中的廣泛使用。

目標(biāo)函數(shù)

在有監(jiān)督學(xué)習(xí)中,我們的目標(biāo)函數(shù)可以分解為訓(xùn)練損失和正則化項(xiàng):
obj(\theta)=L(\theta)+\Omega(\theta)
如果對(duì)每個(gè)樣本棕兼,訓(xùn)練損失函數(shù)為l(y,\hat{y})违寞,則L(\theta)=\sum\limits_{i=1}^n l(y_i,\hat{y}_i)
對(duì)樹模型而言,\hat{y}=f(x)=w_{q(x)},\ w\in R^T,\ q:\mathbb{R}^d\rightarrow\{1,2,\cdots,T\}锭沟,其中w_i是第i個(gè)葉子結(jié)點(diǎn)上的socre,每個(gè)樣本點(diǎn)x會(huì)落在某一個(gè)葉子節(jié)點(diǎn)q(x)上识补,T是葉子數(shù)族淮。在XGBoost中,樹的復(fù)雜度描述為:
\Omega(f)=\gamma T+\frac{1}{2}\lambda \sum\limits_{i=1}^Tw_i^2
當(dāng)然還可以加上其他正則項(xiàng)凭涂,如L1正則(對(duì)應(yīng)正則化系數(shù)\alpha)等祝辣。

Boosting

Boosting的過程,是擬合一個(gè)加性模型切油。假設(shè)我們已經(jīng)訓(xùn)練了t-1步蝙斜,對(duì)應(yīng)的模型為\hat{y}^{(t-1)}(x)=\sum\limits_{k=1}^{t-1}f_k(x)
t步,我們的目標(biāo)是找到f_t(x)澎胡,以最小化目標(biāo)函數(shù):
\begin{align} \min\limits_{f_k}\quad &obj^{(t)}=\sum\limits_{i=1}^n l(y_i,\hat{y}_i^{(t)})+\Omega(f_t)\\ where\quad & \hat{y}_i^{(t)} = \sum\limits_{k=1}^{t}f_k(x_i)\\ \end{align}

將樣本損失函數(shù)在y'=\hat{y}^{(t-1)}處做二階泰勒展開,
l(y,y')=l(y,\hat{y}^{(t-1)})+\dfrac{\partial l(y,y')}{\partial y'}\Bigg|_{y'=\hat{y}^{(t-1)}}f_t(x)+\frac{1}{2}\dfrac{\partial^2 l(y,y')}{\partial y'\partial y'}\Bigg|_{y'=\hat{y}^{(t-1)}}f_t^2(x)+O(f_t^2(x))
對(duì)應(yīng)地孕荠,將每個(gè)樣本代入可得:
obj^{(t)}=\sum\limits_{i=1}^n \left[l(y_i,\hat{y}_i^{(t-1)})+g_if_t(x_i)+\frac{1}{2}h_if_t^2(x_i)\right]+\Omega(f_t)
其中
\begin{align} g_i&=\dfrac{\partial l(y_i,y')}{\partial y'}\Bigg|_{y'=\hat{y}_i^{(t-1)}} \\ h_i&=\dfrac{\partial^2 l(y_i,y')}{\partial y'\partial y'}\Bigg|_{y'=\hat{y}_i^{(t-1)}}\\ \end{align}
\sum\limits_{i=1}^n l(y_i,\hat{y}_i^{(t-1)})是與f_t(x)無關(guān)的娩鹉,因此,我們的目標(biāo)函數(shù)可以簡(jiǎn)化為:
obj^{(t)}\approx\sum\limits_{i=1}^n \left[g_if_t(x_i)+\frac{1}{2}h_if_t^2(x_i)\right]+\Omega(f_t)

t棵樹的目標(biāo)函數(shù)是理論目標(biāo)函數(shù)最優(yōu)值與前t-1棵樹預(yù)測(cè)的目標(biāo)函數(shù)值的殘差稚伍,即以目標(biāo)函數(shù)的負(fù)梯度來作為第t棵樹的學(xué)習(xí)目標(biāo)弯予。

樹的分裂準(zhǔn)則

我們可以將目標(biāo)函數(shù)重寫為
\begin{align} obj^{(t)}&\approx \sum\limits_{i=1}^n[ g_i w_{q(x_i)}+ \frac{1}{2}h_i w^2_{q(x_i)}]+\gamma T+ \frac{1}{2}\lambda \sum\limits_{j=1}^Tw_j^2\\ &= \sum\limits_{j=1}^T\left[\left(\sum\limits_{i\in I_j}g_i\right)w_j+ \frac{1}{2}\left(\sum\limits_{i\in I_j}h_i+\lambda\right)w_j^2\right]+\gamma T\\ &\triangleq \sum\limits_{j=1}^T\left[G_jw_j+ \frac{1}{2}\left(H_j+\lambda\right)w_j^2\right]+\gamma T\\ \end{align}
其中I_j=\{i | q(x_i) = j\}。因此个曙,
\begin{align} w_j^*&=-\frac{G_j}{H_j+\lambda}\\ obj^*&=-\frac{1}{2} \sum\limits_{j=1}^T \dfrac{G^2}{H_j+\lambda}+\gamma T\\ \end{align}
因此后者可以用來衡量樹結(jié)構(gòu)的好壞锈嫩,用來決定樹的分裂。這里我們定義結(jié)點(diǎn)分裂的增益為
\begin{align} Gain&=\frac{1}{2}\left[\frac{G_L^2}{H_L+\lambda}+\frac{G_R^2}{H_R+\lambda}-\frac{(G_L+G_R)^2}{H_L+H_R+\lambda}\right]-\gamma \end{align}

特性

  1. 支持線性分類器垦搬、DART(Dropouts meet Multiple Additive Regression Trees)以及Tweedie Regression呼寸;支持分類、回歸猴贰、排序任務(wù)对雪;
  2. 二階導(dǎo)信息。傳統(tǒng)GBDT在優(yōu)化時(shí)只用到一階導(dǎo)數(shù)信息米绕,xgboost則對(duì)代價(jià)函數(shù)進(jìn)行了二階泰勒展開慌植,同時(shí)用到了一階和二階導(dǎo)數(shù)。順便提一下义郑,xgboost工具支持自定義代價(jià)函數(shù),只要函數(shù)可一階和二階求導(dǎo)丈钙。
  3. 正則化項(xiàng)非驮。xgboost在代價(jià)函數(shù)里加入了正則項(xiàng),用于控制模型的復(fù)雜度雏赦。正則項(xiàng)里包含了樹的葉子節(jié)點(diǎn)個(gè)數(shù)劫笙、每個(gè)葉子節(jié)點(diǎn)上輸出的score的L2模的平方和。從Bias-variance tradeoff角度來講星岗,正則項(xiàng)降低了模型的variance填大,使學(xué)習(xí)出來的模型更加簡(jiǎn)單,防止過擬合俏橘,這也是xgboost優(yōu)于傳統(tǒng)GBDT的一個(gè)特性允华。
  4. 縮減(Shrinkage)。相當(dāng)于學(xué)習(xí)速率(xgboost中的eta)寥掐。xgboost在進(jìn)行完一次迭代后靴寂,會(huì)將葉子節(jié)點(diǎn)的權(quán)重乘上該系數(shù),主要是為了削弱每棵樹的影響召耘,讓后面有更大的學(xué)習(xí)空間百炬。實(shí)際應(yīng)用中,一般把eta設(shè)置得小一點(diǎn)污它,然后迭代次數(shù)設(shè)置得大一點(diǎn)剖踊。(補(bǔ)充:傳統(tǒng)GBDT的實(shí)現(xiàn)也有學(xué)習(xí)速率)
  5. 列抽樣(column subsampling)庶弃。xgboost借鑒了隨機(jī)森林的做法,支持列抽樣德澈,不僅能降低過擬合歇攻,還能減少計(jì)算,這也是xgboost異于傳統(tǒng)gbdt的一個(gè)特性圃验。
  6. 對(duì)缺失值的處理掉伏。xgboost把缺失值當(dāng)做稀疏矩陣來對(duì)待,本身的在節(jié)點(diǎn)分裂時(shí)不考慮的缺失值的數(shù)值澳窑。缺失值數(shù)據(jù)會(huì)被分到左子樹和右子樹分別計(jì)算損失斧散,選擇較優(yōu)的那一個(gè)。如果訓(xùn)練中沒有數(shù)據(jù)缺失摊聋,預(yù)測(cè)時(shí)出現(xiàn)了數(shù)據(jù)缺失鸡捐,那么默認(rèn)被分類到右子樹。
  7. 支持并行麻裁。boosting不是一種串行的結(jié)構(gòu)嗎?怎么并行的箍镜?注意xgboost的并行不是tree粒度的并行,xgboost也是一次迭代完才能進(jìn)行下一次迭代的(第t次迭代的代價(jià)函數(shù)里包含了前面t-1次迭代的預(yù)測(cè)值)煎源。xgboost的并行是在特征粒度上的色迂。我們知道,決策樹的學(xué)習(xí)最耗時(shí)的一個(gè)步驟就是對(duì)特征的值進(jìn)行排序(因?yàn)橐_定最佳分割點(diǎn))手销,xgboost在訓(xùn)練之前歇僧,預(yù)先對(duì)數(shù)據(jù)進(jìn)行了排序,然后保存為block結(jié)構(gòu)锋拖,后面的迭代中重復(fù)地使用這個(gè)結(jié)構(gòu)诈悍,大大減小計(jì)算量。這個(gè)block結(jié)構(gòu)也使得并行成為了可能兽埃,在進(jìn)行節(jié)點(diǎn)的分裂時(shí)侥钳,需要計(jì)算每個(gè)特征的增益,最終選增益最大的那個(gè)特征去做分裂柄错,那么各個(gè)特征的增益計(jì)算就可以開多線程進(jìn)行舷夺。
  8. 可并行的近似直方圖算法。樹節(jié)點(diǎn)在進(jìn)行分裂時(shí)鄙陡,我們需要計(jì)算每個(gè)特征的每個(gè)分割點(diǎn)對(duì)應(yīng)的增益冕房,即用貪心法枚舉所有可能的分割點(diǎn)。當(dāng)數(shù)據(jù)無法一次載入內(nèi)存或者在分布式情況下趁矾,貪心算法效率就會(huì)變得很低耙册,所以xgboost還提出了一種可并行的近似直方圖算法,用于高效地生成候選的分割點(diǎn)毫捣,大致的思想是根據(jù)百分位法列舉幾個(gè)可能成為分割點(diǎn)的候選者详拙,然后從候選者中計(jì)算Gain按最大值找出最佳的分割點(diǎn)帝际。
  9. 特征重要性。XGBoost在訓(xùn)練的過程中給出各個(gè)特征的評(píng)分饶辙,Gain蹲诀、Cover、Frequency弃揽,從而表明每個(gè)特征對(duì)模型訓(xùn)練的重要性脯爪。

常見問題

  1. XGBoost在什么地方做的剪枝,怎么做的矿微?
    答:XGBoost 先從頂?shù)降捉渲钡阶畲笊疃群勐購(gòu)牡椎巾敺聪驒z查是否有不滿足分裂條件的結(jié)點(diǎn),進(jìn)行剪枝涌矢。

  2. XGBoost如何分布式掖举?特征分布式和數(shù)據(jù)分布式? 各有什么存在的問題娜庇?
    答:XGBoost在訓(xùn)練之前塔次,預(yù)先對(duì)數(shù)據(jù)按列進(jìn)行排序,然后保存block結(jié)構(gòu)名秀。(1)特征分布式/特征間并行:由于將數(shù)據(jù)按列存儲(chǔ)励负,可以同時(shí)訪問所有列,那么可以對(duì)所有屬性同時(shí)執(zhí)行split finding算法匕得,從而并行化split finding(切分點(diǎn)尋找)熄守;(2)數(shù)據(jù)分布式/特征內(nèi)并行:可以用多個(gè)block(Multiple blocks)分別存儲(chǔ)不同的樣本集,多個(gè)block可以并行計(jì)算耗跛。
    問題:(1)不能從本質(zhì)上減少計(jì)算量;(2)通訊代價(jià)高攒发。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末调塌,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子惠猿,更是在濱河造成了極大的恐慌羔砾,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件偶妖,死亡現(xiàn)場(chǎng)離奇詭異姜凄,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)趾访,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門态秧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人扼鞋,你說我怎么就攤上這事申鱼》哂眨” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵捐友,是天一觀的道長(zhǎng)淫半。 經(jīng)常有香客問我,道長(zhǎng)匣砖,這世上最難降的妖魔是什么科吭? 我笑而不...
    開封第一講書人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮猴鲫,結(jié)果婚禮上对人,老公的妹妹穿的比我還像新娘。我一直安慰自己变隔,他們只是感情好规伐,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著匣缘,像睡著了一般猖闪。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上肌厨,一...
    開封第一講書人閱讀 51,301評(píng)論 1 301
  • 那天培慌,我揣著相機(jī)與錄音,去河邊找鬼柑爸。 笑死吵护,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的表鳍。 我是一名探鬼主播馅而,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼譬圣!你這毒婦竟也來了瓮恭?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤厘熟,失蹤者是張志新(化名)和其女友劉穎屯蹦,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體绳姨,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡登澜,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了飘庄。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片脑蠕。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖跪削,靈堂內(nèi)的尸體忽然破棺而出空郊,到底是詐尸還是另有隱情份招,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布狞甚,位于F島的核電站锁摔,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏哼审。R本人自食惡果不足惜谐腰,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望涩盾。 院中可真熱鬧十气,春花似錦、人聲如沸春霍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)址儒。三九已至芹枷,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間莲趣,已是汗流浹背鸳慈。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留喧伞,地道東北人走芋。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像潘鲫,于是被迫代替她去往敵國(guó)和親翁逞。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容