機(jī)器學(xué)習(xí)時代三大神器GBDT满着、XGBoost准谚、LightGBM

本文主要簡要的比較了常用的boosting算法的一些區(qū)別挫剑,從AdaBoost到LightGBM,包括AdaBoost,GBDT,XGBoost,LightGBM四個模型的簡單介紹,一步一步從原理到優(yōu)化對比柱衔。

AdaBoost原理:原始的AdaBoost算法是在算法開始的時候樊破,為每一個樣本賦上一個權(quán)重值愉棱,初始的時候,大家都是一樣重要的哲戚。在每一步訓(xùn)練中得到的模型奔滑,會使得數(shù)據(jù)點的估計有對有錯,我們就在每一步結(jié)束后顺少,增加分錯的點的權(quán)重朋其,減少分對的點的權(quán)重,這樣使得某些點如果老是被分錯脆炎,那么就會被“重點關(guān)注”梅猿,也就被賦上一個很高的權(quán)重。然后等進(jìn)行了N次迭代(由用戶指定)秒裕,將會得到N個簡單的分類器(basiclearner)袱蚓,然后我們將它們組合起來(比如說可以對它們進(jìn)行加權(quán)、或者讓它們進(jìn)行投票等)几蜻,得到一個最終的模型喇潘。

GBDT介紹:(點擊鏈接詳細(xì)介紹GBDT)

GBDT(Gradient Boosting Decison Tree)中的樹都是回歸樹,GBDT用來做回歸預(yù)測梭稚,調(diào)整后也可以用于分類(設(shè)定閾值响蓉,大于閾值為正例,反之為負(fù)例)哨毁,可以發(fā)現(xiàn)多種有區(qū)分性的特征以及特征組合枫甲。GBDT是把所有樹的結(jié)論累加起來做最終結(jié)論的,GBDT的核心就在于扼褪,每一棵樹學(xué)的是之前所有樹結(jié)論和的殘差(負(fù)梯度)想幻,這個殘差就是一個加預(yù)測值后能得真實值的累加量。比如A的真實年齡是18歲话浇,但第一棵樹的預(yù)測年齡是12歲脏毯,差了6歲,即殘差為6歲幔崖。那么在第二棵樹里我們把A的年齡設(shè)為6歲去學(xué)習(xí)食店,如果第二棵樹真的能把A分到6歲的葉子節(jié)點,那累加兩棵樹的結(jié)論就是A的真實年齡赏寇;如果第二棵樹的結(jié)論是5歲吉嫩,則A仍然存在1歲的殘差,第三棵樹里A的年齡就變成1歲嗅定,繼續(xù)學(xué)自娩。Boosting的最大好處在于,每一步的殘差計算其實變相地增大了分錯instance的權(quán)重渠退,而已經(jīng)分對的instance則都趨向于0忙迁。這樣后面的樹就能越來越專注那些前面被分錯的instance脐彩。

Gradient Boost每一次的計算是為了減少上一次的殘差(residual),而為了消除殘差姊扔,我們可以在殘差減少的梯度(Gradient)方向上建立一個新的模型惠奸。所以說,在Gradient Boost中恰梢,每個新的模型的建立是為了使得之前模型的殘差往梯度方向減少晨川。Shrinkage(縮減)的思想認(rèn)為,每次走一小步逐漸逼近結(jié)果的效果删豺,要比每次邁一大步很快逼近結(jié)果的方式更容易避免過擬合。即它不完全信任每一個棵殘差樹愧怜,它認(rèn)為每棵樹只學(xué)到了真理的一小部分呀页,累加的時候只累加一小部分,通過多學(xué)幾棵樹彌補(bǔ)不足拥坛。本質(zhì)上蓬蝶,Shrinkage為每棵樹設(shè)置了一個weight,累加時要乘以這個weight猜惋,但和Gradient并沒有關(guān)系丸氛。

Adaboost是另一種boost方法,它按分類對錯著摔,分配不同的weight缓窜,計算cost function時使用這些weight,從而讓“錯分的樣本權(quán)重越來越大谍咆,使它們更被重視”禾锤。

Gradient Boost優(yōu)缺點

優(yōu)點: 它的非線性變換比較多,表達(dá)能力強(qiáng)摹察,而且不需要做復(fù)雜的特征工程和特征變換恩掷。

缺點:Boost是一個串行過程,不好并行化供嚎,而且計算復(fù)雜度高黄娘,同時不太適合高維稀疏特征。

XGBoost

XGBoost能自動利用cpu的多線程克滴,而且適當(dāng)改進(jìn)了gradient boosting逼争,加了剪枝,控制了模型的復(fù)雜程度

傳統(tǒng)GBDT以CART作為基分類器劝赔,特指梯度提升決策樹算法氮凝,而XGBoost還支持線性分類器(gblinear),這個時候XGBoost相當(dāng)于帶L1和L2正則化項的邏輯斯蒂回歸(分類問題)或者線性回歸(回歸問題)望忆。

傳統(tǒng)GBDT在優(yōu)化時只用到一階導(dǎo)數(shù)信息罩阵,xgboost則對代價函數(shù)進(jìn)行了二階泰勒展開竿秆,同時用到了一階和二階導(dǎo)數(shù)。順便提一下稿壁,xgboost工具支持自定義代價函數(shù)幽钢,只要函數(shù)可一階和二階求導(dǎo)。

xgboost在代價函數(shù)里加入了正則項傅是,用于控制模型的復(fù)雜度匪燕。正則項里包含了樹的葉子節(jié)點個數(shù)、每個葉子節(jié)點上輸出的score的L2模的平方和喧笔。從Bias-variance

tradeoff角度來講帽驯,正則項降低了模型的variance,使學(xué)習(xí)出來的模型更加簡單书闸,防止過擬合尼变,這也是xgboost優(yōu)于傳統(tǒng)GBDT的一個特性。

xgboost的成本函數(shù)

xgboost中樹節(jié)點分裂時所采用的公式:

Shrinkage(縮減)浆劲,相當(dāng)于學(xué)習(xí)速率(xgboost中的eta)嫌术。xgboost在進(jìn)行完一次迭代后,會將葉子節(jié)點的權(quán)重乘上該系數(shù)牌借,主要是為了削弱每棵樹的影響度气,讓后面有更大的學(xué)習(xí)空間。實際應(yīng)用中膨报,一般把eta設(shè)置得小一點磷籍,然后迭代次數(shù)設(shè)置得大一點。(傳統(tǒng)GBDT的實現(xiàn)也有學(xué)習(xí)速率)

列抽樣(column subsampling)现柠。xgboost借鑒了隨機(jī)森林的做法择示,支持列抽樣,不僅能降低過擬合晒旅,還能減少計算栅盲,這也是xgboost異于傳統(tǒng)gbdt的一個特性。

對缺失值的處理废恋。對于特征的值有缺失的樣本谈秫,xgboost可以自動學(xué)習(xí)出它的分裂方向。

xgboost工具支持并行鱼鼓。注意xgboost的并行不是tree粒度的并行拟烫,xgboost也是一次迭代完才能進(jìn)行下一次迭代的(第t次迭代的代價函數(shù)里包含了前面t-1次迭代的預(yù)測值)。xgboost的并行是在特征粒度上的迄本。我們知道硕淑,決策樹的學(xué)習(xí)最耗時的一個步驟就是對特征的值進(jìn)行排序(因為要確定最佳分割點),xgboost在訓(xùn)練之前,預(yù)先對數(shù)據(jù)進(jìn)行了排序置媳,然后保存為block結(jié)構(gòu)于樟,后面的迭代中重復(fù)地使用這個結(jié)構(gòu),大大減小計算量拇囊。這個block結(jié)構(gòu)也使得并行成為了可能迂曲,在進(jìn)行節(jié)點的分裂時,需要計算每個特征的增益寥袭,最終選增益最大的那個特征去做分裂路捧,那么各個特征的增益計算就可以開多線程進(jìn)行。(特征粒度上的并行传黄,block結(jié)構(gòu)杰扫,預(yù)排序)。

這個公式形式上跟ID3算法膘掰、CART算法是一致的章姓,都是用分裂后的某種值減去分裂前的某種值,從而得到增益炭序。為了限制樹的生長,我們可以加入閾值苍日,當(dāng)增益大于閾值時才讓節(jié)點分裂惭聂,上式中的gamma即閾值,它是正則項里葉子節(jié)點數(shù)T的系數(shù)相恃,所以xgboost在優(yōu)化目標(biāo)函數(shù)的同時相當(dāng)于做了預(yù)剪枝辜纲。另外,上式中還有一個系數(shù)lambda拦耐,是正則項里leafscore的L2模平方的系數(shù)耕腾,對leaf score做了平滑,也起到了防止過擬合的作用杀糯,這個是傳統(tǒng)GBDT里不具備的特性扫俺。

XGBoost優(yōu)勢小結(jié)

XGBoost優(yōu)勢小結(jié):

(1)內(nèi)置交叉驗證方法

(2)能夠輸出特征重要性文件輔助特征篩選

(3)顯式地將樹模型的復(fù)雜度作為正則項加在優(yōu)化目標(biāo)

(4)公式推導(dǎo)里用到了二階導(dǎo)數(shù)信息,而普通的GBDT只用到一階

(5)允許使用列抽樣(column(feature) sampling)來防止過擬合固翰,借鑒了Random Forest的思想狼纬,sklearn里的gbm好像也有類似實現(xiàn)。

(6)實現(xiàn)了一種分裂節(jié)點尋找的近似算法骂际,用于加速和減小內(nèi)存消耗疗琉。

(7)節(jié)點分裂算法能自動利用特征的稀疏性。

(8)樣本數(shù)據(jù)事先排好序并以block的形式存儲歉铝,利于并行計算

(9)penalty function Omega主要是對樹的葉子數(shù)和葉子分?jǐn)?shù)做懲罰盈简,這點確保了樹的簡單性。

(10)支持分布式計算可以運行在MPI,YARN上柠贤,得益于底層支持容錯的分布式通信框架rabit香浩。

lightGBM:基于決策樹算法的分布式梯度提升框架。

與xgboost的主要區(qū)別:

切分算法(切分點的選取) 占用的內(nèi)存更低种吸,只保存特征離散化后的值弃衍,而這個值一般用8位整型存儲就足夠了,內(nèi)存消耗可以降低為原來的1/8坚俗。

降低了計算的代價:預(yù)排序算法每遍歷一個特征值就需要計算一次分裂的增益镜盯,而直方圖算法只需要計算k次(k可以認(rèn)為是常數(shù)),時間復(fù)雜度從O(#data#feature)優(yōu)化到O(k#features)猖败。(相當(dāng)于LightGBM犧牲了一部分切分的精確性來提高切分的效率速缆,實際應(yīng)用中效果還不錯)

空間消耗大,需要保存數(shù)據(jù)的特征值以及特征排序的結(jié)果(比如排序后的索引恩闻,為了后續(xù)快速計算分割點)艺糜,需要消耗兩倍于訓(xùn)練數(shù)據(jù)的內(nèi)存

時間上也有較大開銷,遍歷每個分割點時都需要進(jìn)行分裂增益的計算幢尚,消耗代價大

對cache優(yōu)化不友好破停,在預(yù)排序后,特征對梯度的訪問是一種隨機(jī)訪問尉剩,并且不同的特征訪問的順序不一樣真慢,無法對cache進(jìn)行優(yōu)化。同時理茎,在每一層長樹的時候黑界,需要隨機(jī)訪問一個行索引到葉子索引的數(shù)組,并且不同特征訪問的順序也不一樣皂林,也會造成較大的cache

miss朗鸠。

XGBoost使用的是pre-sorted算法(對所有特征都按照特征的數(shù)值進(jìn)行預(yù)排序,基本思想是對所有特征都按照特征的數(shù)值進(jìn)行預(yù)排序础倍;然后在遍歷分割點的時候用O(#data)的代價找到一個特征上的最好分割點最后烛占,找到一個特征的分割點后,將數(shù)據(jù)分裂成左右子節(jié)點沟启。優(yōu)點是能夠更精確的找到數(shù)據(jù)分隔點扰楼;但這種做法有以下缺點

LightGBM使用的是histogram算法,基本思想是先把連續(xù)的浮點特征值離散化成k個整數(shù)美浦,同時構(gòu)造一個寬度為k的直方圖弦赖。在遍歷數(shù)據(jù)的時候,根據(jù)離散化后的值作為索引在直方圖中累積統(tǒng)計量浦辨,當(dāng)遍歷一次數(shù)據(jù)后蹬竖,直方圖累積了需要的統(tǒng)計量沼沈,然后根據(jù)直方圖的離散值,遍歷尋找最優(yōu)的分割點币厕;優(yōu)點在于

決策樹生長策略上:

XGBoost采用的是帶深度限制的level-wise生長策略列另,Level-wise過一次數(shù)據(jù)可以能夠同時分裂同一層的葉子,容易進(jìn)行多線程優(yōu)化旦装,不容易過擬合页衙;但不加區(qū)分的對待同一層的葉子,帶來了很多沒必要的開銷(因為實際上很多葉子的分裂增益較低阴绢,沒必要進(jìn)行搜索和分裂)店乐。

LightGBM采用leaf-wise生長策略,每次從當(dāng)前所有葉子中找到分裂增益最大(一般也是數(shù)據(jù)量最大)的一個葉子呻袭,然后分裂眨八,如此循環(huán);但會生長出比較深的決策樹左电,產(chǎn)生過擬合(因此LightGBM 在leaf-wise之上增加了一個最大深度的限制廉侧,在保證高效率的同時防止過擬合)。


histogram做差加速篓足。一個容易觀察到的現(xiàn)象:一個葉子的直方圖可以由它的父親節(jié)點的直方圖與它兄弟的直方圖做差得到段誊。通常構(gòu)造直方圖,需要遍歷該葉子上的所有數(shù)據(jù)栈拖,但直方圖做差僅需遍歷直方圖的k個桶连舍。利用這個方法,LightGBM可以在構(gòu)造一個葉子的直方圖后辱魁,可以用非常微小的代價得到它兄弟葉子的直方圖烟瞧,在速度上可以提升一倍诗鸭。

直接支持類別特征:LightGBM優(yōu)化了對類別特征的支持染簇,可以直接輸入類別特征,不需要額外的0/1展開强岸。并在決策樹算法上增加了類別特征的決策規(guī)則锻弓。

分布式訓(xùn)練方法上(并行優(yōu)化)

在特征并行算法中,通過在本地保存全部數(shù)據(jù)避免對數(shù)據(jù)切分結(jié)果的通信蝌箍;

在數(shù)據(jù)并行中使用分散規(guī)約(Reduce

scatter)把直方圖合并的任務(wù)分?jǐn)偟讲煌臋C(jī)器青灼,降低通信和計算,并利用直方圖做差妓盲,進(jìn)一步減少了一半的通信量杂拨。基于投票的數(shù)據(jù)并行(Parallel

Voting)則進(jìn)一步優(yōu)化數(shù)據(jù)并行中的通信代價悯衬,使通信代價變成常數(shù)級別弹沽。

特征并行的主要思想是在不同機(jī)器在不同的特征集合上分別尋找最優(yōu)的分割點,然后在機(jī)器間同步最優(yōu)的分割點。

數(shù)據(jù)并行則是讓不同的機(jī)器先在本地構(gòu)造直方圖策橘,然后進(jìn)行全局的合并炸渡,最后在合并的直方圖上面尋找最優(yōu)分割點。

原始

LightGBM針對這兩種并行方法都做了優(yōu)化丽已,

Cache命中率優(yōu)化

基于直方圖的稀疏特征優(yōu)化

DART(Dropout + GBDT)

GOSS(Gradient-based

One-Side Sampling):一種新的Bagging(row subsample)方法,前若干輪(1.0f /

gbdtconfig->learning_rate)不Bagging;之后Bagging時, 采樣一定比例g(梯度)大的樣本

LightGBM優(yōu)點小結(jié)(相較于XGBoost)

速度更快

內(nèi)存消耗更低

參考博文:點擊進(jìn)入

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蚌堵,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子沛婴,更是在濱河造成了極大的恐慌吼畏,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,366評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瘸味,死亡現(xiàn)場離奇詭異宫仗,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)旁仿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評論 3 395
  • 文/潘曉璐 我一進(jìn)店門藕夫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人枯冈,你說我怎么就攤上這事毅贮。” “怎么了尘奏?”我有些...
    開封第一講書人閱讀 165,689評論 0 356
  • 文/不壞的土叔 我叫張陵滩褥,是天一觀的道長。 經(jīng)常有香客問我炫加,道長瑰煎,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,925評論 1 295
  • 正文 為了忘掉前任俗孝,我火速辦了婚禮酒甸,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘赋铝。我一直安慰自己插勤,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,942評論 6 392
  • 文/花漫 我一把揭開白布革骨。 她就那樣靜靜地躺著农尖,像睡著了一般。 火紅的嫁衣襯著肌膚如雪良哲。 梳的紋絲不亂的頭發(fā)上盛卡,一...
    開封第一講書人閱讀 51,727評論 1 305
  • 那天,我揣著相機(jī)與錄音筑凫,去河邊找鬼滑沧。 笑死喇颁,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的嚎货。 我是一名探鬼主播橘霎,決...
    沈念sama閱讀 40,447評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼殖属!你這毒婦竟也來了姐叁?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,349評論 0 276
  • 序言:老撾萬榮一對情侶失蹤洗显,失蹤者是張志新(化名)和其女友劉穎外潜,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體挠唆,經(jīng)...
    沈念sama閱讀 45,820評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡处窥,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,990評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了玄组。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片滔驾。...
    茶點故事閱讀 40,127評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖俄讹,靈堂內(nèi)的尸體忽然破棺而出哆致,到底是詐尸還是另有隱情,我是刑警寧澤患膛,帶...
    沈念sama閱讀 35,812評論 5 346
  • 正文 年R本政府宣布摊阀,位于F島的核電站,受9級特大地震影響踪蹬,放射性物質(zhì)發(fā)生泄漏胞此。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,471評論 3 331
  • 文/蒙蒙 一跃捣、第九天 我趴在偏房一處隱蔽的房頂上張望漱牵。 院中可真熱鬧,春花似錦枝缔、人聲如沸布疙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至截型,卻和暖如春趴荸,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背宦焦。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評論 1 272
  • 我被黑心中介騙來泰國打工发钝, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留顿涣,地道東北人。 一個月前我還...
    沈念sama閱讀 48,388評論 3 373
  • 正文 我出身青樓酝豪,卻偏偏與公主長得像涛碑,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子孵淘,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,066評論 2 355

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