XGBoost原理

更好的閱讀體驗請?zhí)D(zhuǎn)至XGBoost原理

一.緒論
在實際應(yīng)用的機器學(xué)習(xí)方法里,GradientTree Boosting (GBDT)是一個在很多應(yīng)用里都很出彩的技術(shù)莫矗。XGBoost是一套提升樹可擴展的機器學(xué)習(xí)系統(tǒng)捅膘。2015年Kaggle發(fā)布的29個獲勝方法里有17個用了XGBoost涡上。在這些方案里猩系,有8個僅用了XGBoost,另外的大多數(shù)用它結(jié)合了神經(jīng)網(wǎng)絡(luò)兆蕉。對比來看羽戒,第二流行的方法,深度神經(jīng)網(wǎng)絡(luò)虎韵,只被用了11次易稠。這個系統(tǒng)的成功性也被KDDCup2015所見證了,前十的隊伍都用了XGBoost包蓝。此外驶社,據(jù)勝出的隊伍說,很少有別的集成學(xué)習(xí)方法效果能超過調(diào)好參的XGBoost测萎。
主要創(chuàng)新點:
設(shè)計和構(gòu)建高度可擴展的端到端提升樹系統(tǒng)衬吆。
提出了一個理論上合理的加權(quán)分位數(shù)略圖(weighted quantile
sketch )來計算候選集。
引入了一種新穎的稀疏感知算法用于并行樹學(xué)習(xí)绳泉。 令缺失值有默認方向逊抡。
提出了一個有效的用于核外樹形學(xué)習(xí)的緩存感知塊結(jié)構(gòu)。 用緩存加速尋找排序后被打亂的索引的列數(shù)據(jù)的過程零酪。

二.算法原理
1.學(xué)習(xí)目標
首先來看下我們是如何預(yù)測的:
XGBoost是一個樹集成模型冒嫡,他將K(樹的個數(shù))個樹的結(jié)果進行求和,作為最終的預(yù)測值四苇。即:


假設(shè)給定的樣本集有n個樣本孝凌,m個特征,則

其中 xi 表示第i個樣本月腋,yi 表示第i個類別標簽蟀架,回歸樹(CART樹)的空間F為

其中q代表每棵樹的結(jié)構(gòu),他將樣本映射到對應(yīng)的葉節(jié)點榆骚;T是對應(yīng)樹的葉節(jié)點個數(shù)片拍;f(x)對應(yīng)樹的結(jié)構(gòu)q和葉節(jié)點權(quán)重w。所以XGBoost的預(yù)測值是每棵樹對應(yīng)的葉節(jié)點的值的和妓肢。
我們的目標是學(xué)習(xí)這k個樹捌省,所以我們最小化下面這個帶正則項的目標函數(shù):


上式的第一項是損失誤差,如MSE和logistic等碉钠,第二項是正則項纲缓,控制樹的復(fù)雜度卷拘,防止過擬合。
式子2中目標函數(shù)的優(yōu)化參數(shù)是模型(functions)祝高,不能使用傳統(tǒng)的優(yōu)化方法在歐氏空間優(yōu)化栗弟,但是模型在訓(xùn)練時,是一種加法的方式(additive manner)工闺,所以在第t輪乍赫,我們將f(t)加入模型,最小化下面的目標函數(shù):

訓(xùn)練時斤寂,新的一輪加入一個新的f函數(shù)耿焊,來最大化的降低目標函數(shù),在第t輪遍搞,我們的目標函數(shù)為 :

接下來我們將目標函數(shù)進行泰勒展開罗侯,取前三項,移除高階小無窮小項溪猿,最后我們的目標函數(shù)轉(zhuǎn)化為:

其中:

接下來我們求解這個目標函數(shù)

最終我們將關(guān)于樹模型的迭代轉(zhuǎn)化為關(guān)于樹的葉子節(jié)點的迭代钩杰,并求出最優(yōu)的葉節(jié)點分數(shù)。
將葉節(jié)點的最優(yōu)值帶入目標函數(shù)诊县,最終目標函數(shù)的形式為:



上式可以作為得分函數(shù)用來測量樹結(jié)構(gòu)q的質(zhì)量讲弄,他類似與決策樹的不純度得分,只是他通過更廣泛的目標函數(shù)得到



通過上式我們可以看到依痊,當樹結(jié)構(gòu)確定時避除,樹的結(jié)構(gòu)得分只與其一階倒數(shù)和二階倒數(shù)有關(guān),得分越小胸嘁,說明結(jié)構(gòu)越好瓶摆。

節(jié)點劃分

而通常情況下,我們無法枚舉所有可能的樹結(jié)構(gòu)然后選取最優(yōu)的性宏,所以我們選擇用一種貪婪算法來代替:我們從單個葉節(jié)點開始群井,迭代分裂來給樹添加節(jié)點。節(jié)點切分后的損失函數(shù):



上式用來評估切分后的損失函數(shù)毫胜,我們的目標是尋找一個特征及對應(yīng)的值书斜,使得切分后的loss reduction最大。γ除了控制樹的復(fù)雜度酵使,另一個作用是作為閾值荐吉,只有當分裂后的增益大于γ時,才選擇分裂凝化,起到了預(yù)剪枝的作用稍坯。

縮減與列采樣

除了在目標函數(shù)中引入正則項,為了防止過擬合搓劫,XGBoost還引入了縮減(shrinkage)和列抽樣(column subsampling)瞧哟,通過在每一步的boosting中引入縮減系數(shù),降低每個樹和葉子對結(jié)果的影響枪向;列采樣是借鑒隨機森林中的思想勤揩,根據(jù)反饋,列采樣有時甚至比行抽樣效果更好秘蛔,同時陨亡,通過列采樣能加速計算。

尋找最佳分割點算法
樹模型學(xué)習(xí)的一個關(guān)鍵問題是如何尋找最優(yōu)分割點深员。第一種方法稱為基本精確貪心算法(exact greedy algorithm):枚舉所有特征的所有可能劃分负蠕,尋找最優(yōu)分割點。該算法要求為連續(xù)特征枚舉所有可能的切分倦畅,這個對計算機要求很高遮糖,為了有效做到這一點,XGBoost首先對特征進行排序叠赐,然后順序訪問數(shù)據(jù)欲账,累計loss reduction中的梯度統(tǒng)計量(式6)。

上述方法是一個非常精確的分割點算法芭概,但是當數(shù)據(jù)無法完全加載進內(nèi)存或分布式的情況下赛不,該算法就不是特別有效了。為了支持這兩種場景罢洲,提出了一種近似算法:根據(jù)特征分布的百分位數(shù)踢故,提出n個候選切分點,然后將樣本映射到對應(yīng)的兩個相鄰的切分點組成的桶中惹苗,聚會統(tǒng)計值殿较,通過聚會后的統(tǒng)計值及推薦分割點,計算最佳分割點鸽粉。該算法有兩種形式:全局近似和局部近似斜脂,其差別是全局近似是在生成一棵樹之前,對各個特征計算其分位點并劃分樣本触机;局部近似是在每個節(jié)點進行分裂時采用近似算法帚戳。近似算法的流程:


帶權(quán)重的分位數(shù)略圖(weighted quantile sketch)算法
在近似算法中重要的一步是尋找候選分割點,通常情況下儡首,特征的百分位數(shù)使數(shù)據(jù)均勻的分布在數(shù)據(jù)上∑危現(xiàn)在我們定義一個數(shù)據(jù)集Dk = {(x1k, h1), (x2k, h2) ... }代表樣本的第k個特征及其對應(yīng)的二階梯度,現(xiàn)在我們定義一個函數(shù)rk:


上式代表特征k小于特征z的樣本比例蔬胯,我們的目標是尋找候選分割點{sk1, sk2,...}对供,使它滿足:

其中e是候選因子,即切分的百分位數(shù),所以最后有大約1/e個候選分割點产场。那為什么可以用二階倒數(shù)h來代替權(quán)重呢鹅髓?我們將目標函數(shù)變形為

上式可以看成是label是gi/hi,權(quán)重是hi的平方損失京景,這對于大數(shù)據(jù)下尋找劃分點非常重要窿冯。在以往的分位法中,沒有考慮權(quán)值确徙,許多存在的近似方法中醒串,或者通過排序或者通過啟發(fā)式方法(沒有理論保證)劃分。文章的貢獻是提供了理論保證的分布式加權(quán)分位法鄙皇。
為什么要對目標函數(shù)進行類似的變形芜赌?思考一下我們劃分分割點的目標是什么?是希望均勻的劃分loss伴逸,而不同樣本對loss的權(quán)重不同缠沈,不考慮權(quán)重直接按樣本劃分時,loss的分布是不均勻的违柏,對應(yīng)的分位點就會有偏差博烂。
PS:文章中的近似變形感覺不太近似,更近似的變形可能是

即label是-gi/hi的帶權(quán)重平方損失漱竖。不知道文章內(nèi)為啥是另一種形式
稀疏自適應(yīng)分割策略
實際情況下避免不了數(shù)據(jù)稀疏禽篱,產(chǎn)生數(shù)據(jù)稀疏的原因主要有三個:1,數(shù)據(jù)缺失馍惹,2躺率,統(tǒng)計上為0,3万矾,one-hot編碼悼吱。而適應(yīng)稀疏數(shù)據(jù)非常重要。XGBoost提出的是在計算分割后的分數(shù)時良狈,遇到缺失值后添,分別將缺失值帶入左右兩個分割節(jié)點,然后取最大值的方向為其默認方向薪丁。


以上就是XGBoost所涉及的算法原理遇西。
3.XGBoost的優(yōu)缺點
與GBDT對比
1.GBDT的基分類器只支持CART樹,而XGBoost支持線性分類器严嗜,此時相當于帶有L1和L2正則項的邏輯回歸(分類問題)和線性回歸(回歸問題)粱檀。
2.GBDT在優(yōu)化時只使用了一階倒數(shù),而XGBoost對目標函數(shù)進行二階泰勒展開漫玄,此外茄蚯,XGBoost支持自定義損失函數(shù),只要損失函數(shù)二階可導(dǎo)
3.XGBoost借鑒隨機森林算法,支持列抽樣和行抽樣渗常,這樣即能降低過擬合風(fēng)險壮不,又能降低計算。
4.XGBoost在目標函數(shù)中引入了正則項凳谦,正則項包括葉節(jié)點的個數(shù)及葉節(jié)點的輸出值的L2范數(shù)忆畅。通過約束樹結(jié)構(gòu)衡未,降低模型方差尸执,防止過擬合。
5.XGBoost對缺失值不敏感缓醋,能自動學(xué)習(xí)其分裂方向
6.XGBoost在每一步中引入縮減因子如失,降低單顆樹對結(jié)果的影響,讓后續(xù)模型有更大的優(yōu)化空間送粱,進一步防止過擬合褪贵。
7.XGBoost在訓(xùn)練之前,對數(shù)據(jù)預(yù)先進行排序并保存為block抗俄,后續(xù)迭代中重復(fù)使用脆丁,減少計算,同時在計算分割點時动雹,可以并行計算
8.可并行的近似直方圖算法槽卫,樹結(jié)點在進行分裂時,需要計算每個節(jié)點的增益胰蝠,若數(shù)據(jù)量較大歼培,對所有節(jié)點的特征進行排序,遍歷的得到最優(yōu)分割點茸塞,這種貪心法異常耗時躲庄,這時引進近似直方圖算法,用于生成高效的分割點钾虐,即用分裂后的某種值減去分裂前的某種值噪窘,獲得增益,為了限制樹的增長效扫,引入閾值倔监,當增益大于閾值時,進行分裂荡短;
與LightGBM對比
1.XGBoost采用預(yù)排序丐枉,在迭代之前,對結(jié)點的特征做預(yù)排序掘托,遍歷選擇最優(yōu)分割點瘦锹,數(shù)據(jù)量大時,貪心法耗時,LightGBM方法采用histogram算法弯院,占用的內(nèi)存低辱士,數(shù)據(jù)分割的復(fù)雜度更低,但是不能找到最精確的數(shù)據(jù)分割點听绳。同時颂碘,不精確的分割點可以認為是降低過擬合的一種手段。
2.LightGBM借鑒Adaboost的思想椅挣,對樣本基于梯度采樣头岔,然后計算增益,降低了計算
3.LightGBM對列進行合并鼠证,降低了計算
4.XGBoost采樣level-wise策略進行決策樹的生成峡竣,同時分裂同一層的節(jié)點,采用多線程優(yōu)化量九,不容易過擬合适掰,但有些節(jié)點分裂增益非常小,沒必要進行分割荠列,這就帶來了一些不必要的計算类浪;LightGBM采樣leaf-wise策略進行樹的生成,每次都選擇在當前葉子節(jié)點中增益最大的節(jié)點進行分裂肌似,如此迭代费就,但是這樣容易產(chǎn)生深度很深的樹,產(chǎn)生過擬合锈嫩,所以增加了最大深度的限制受楼,來保證高效的同時防止過擬合。

參考:https://arxiv.org/pdf/1603.02754.pdf
https://www.zhihu.com/question/41354392/answer/98658997

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末呼寸,一起剝皮案震驚了整個濱河市艳汽,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌对雪,老刑警劉巖河狐,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異瑟捣,居然都是意外死亡馋艺,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進店門迈套,熙熙樓的掌柜王于貴愁眉苦臉地迎上來捐祠,“玉大人,你說我怎么就攤上這事桑李□庵” “怎么了窿给?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長率拒。 經(jīng)常有香客問我崩泡,道長,這世上最難降的妖魔是什么猬膨? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任角撞,我火速辦了婚禮,結(jié)果婚禮上勃痴,老公的妹妹穿的比我還像新娘谒所。我一直安慰自己,他們只是感情好召耘,可當我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布百炬。 她就那樣靜靜地躺著,像睡著了一般污它。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上庶弃,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天衫贬,我揣著相機與錄音,去河邊找鬼歇攻。 笑死固惯,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的缴守。 我是一名探鬼主播葬毫,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼屡穗!你這毒婦竟也來了贴捡?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤村砂,失蹤者是張志新(化名)和其女友劉穎烂斋,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體础废,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡汛骂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了评腺。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片帘瞭。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖蒿讥,靈堂內(nèi)的尸體忽然破棺而出蝶念,到底是詐尸還是另有隱情锋拖,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布祸轮,位于F島的核電站兽埃,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏适袜。R本人自食惡果不足惜柄错,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望苦酱。 院中可真熱鬧售貌,春花似錦、人聲如沸疫萤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽扯饶。三九已至恒削,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間尾序,已是汗流浹背钓丰。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留每币,地道東北人携丁。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像兰怠,于是被迫代替她去往敵國和親梦鉴。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,037評論 2 355