小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

機(jī)器不學(xué)習(xí):機(jī)器學(xué)習(xí)時(shí)代三大神器GBDT、XGBoost、LightGBM

 萬(wàn)皇之皇 2018-01-01

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

AdaBoost原理

原始的AdaBoost算法是在算法開(kāi)始的時(shí)候,為每一個(gè)樣本賦上一個(gè)權(quán)重值,初始的時(shí)候,大家都是一樣重要的。在每一步訓(xùn)練中得到的模型,會(huì)使得數(shù)據(jù)點(diǎn)的估計(jì)有對(duì)有錯(cuò),我們就在每一步結(jié)束后,增加分錯(cuò)的點(diǎn)的權(quán)重,減少分對(duì)的點(diǎn)的權(quán)重,這樣使得某些點(diǎn)如果老是被分錯(cuò),那么就會(huì)被“重點(diǎn)關(guān)注”,也就被賦上一個(gè)很高的權(quán)重。然后等進(jìn)行了N次迭代(由用戶指定),將會(huì)得到N個(gè)簡(jiǎn)單的分類(lèi)器(basic learner),然后我們將它們組合起來(lái)(比如說(shuō)可以對(duì)它們進(jìn)行加權(quán)、或者讓它們進(jìn)行投票等),得到一個(gè)最終的模型。

關(guān)鍵字:樣本的權(quán)重分布

GBDT概述

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

Gradient Boost與AdaBoost的區(qū)別

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

  • Adaboost是另一種boost方法,它按分類(lèi)對(duì)錯(cuò),分配不同的weight,計(jì)算cost function時(shí)使用這些weight,從而讓“錯(cuò)分的樣本權(quán)重越來(lái)越大,使它們更被重視”

    Gradient Boost優(yōu)缺點(diǎn)

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

  • 缺點(diǎn):Boost是一個(gè)串行過(guò)程,不好并行化,而且計(jì)算復(fù)雜度高,同時(shí)不太適合高維稀疏特征。

XGBoost

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

  • 傳統(tǒng)GBDT以CART作為基分類(lèi)器,特指梯度提升決策樹(shù)算法,而XGBoost還支持線性分類(lèi)器(gblinear),這個(gè)時(shí)候XGBoost相當(dāng)于帶L1和L2正則化項(xiàng)的邏輯斯蒂回歸(分類(lèi)問(wèn)題)或者線性回歸(回歸問(wèn)題)。

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

  • xgboost在代價(jià)函數(shù)里加入了正則項(xiàng),用于控制模型的復(fù)雜度。正則項(xiàng)里包含了樹(shù)的葉子節(jié)點(diǎn)個(gè)數(shù)、每個(gè)葉子節(jié)點(diǎn)上輸出的score的L2模的平方和。從Bias-variance tradeoff角度來(lái)講,正則項(xiàng)降低了模型的variance,使學(xué)習(xí)出來(lái)的模型更加簡(jiǎn)單,防止過(guò)擬合,這也是xgboost優(yōu)于傳統(tǒng)GBDT的一個(gè)特性。

機(jī)器不學(xué)習(xí):機(jī)器學(xué)習(xí)時(shí)代三大神器GBDT、XGBoost、LightGBM

  • xgboost中樹(shù)節(jié)點(diǎn)分裂時(shí)所采用的公式:

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

  • 列抽樣(column subsampling)。xgboost借鑒了隨機(jī)森林的做法,支持列抽樣,不僅能降低過(guò)擬合,還能減少計(jì)算,這也是xgboost異于傳統(tǒng)gbdt的一個(gè)特性。

  • 對(duì)缺失值的處理。對(duì)于特征的值有缺失的樣本,xgboost可以自動(dòng)學(xué)習(xí)出它的分裂方向。

  • xgboost工具支持并行。注意xgboost的并行不是tree粒度的并行,xgboost也是一次迭代完才能進(jìn)行下一次迭代的(第t次迭代的代價(jià)函數(shù)里包含了前面t-1次迭代的預(yù)測(cè)值)。xgboost的并行是在特征粒度上的。我們知道,決策樹(shù)的學(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ì)算就可以開(kāi)多線程進(jìn)行。(特征粒度上的并行,block結(jié)構(gòu),預(yù)排序)

機(jī)器不學(xué)習(xí):機(jī)器學(xué)習(xí)時(shí)代三大神器GBDT、XGBoost、LightGBM

  • 這個(gè)公式形式上跟ID3算法、CART算法是一致的,都是用分裂后的某種值減去分裂前的某種值,從而得到增益。為了限制樹(shù)的生長(zhǎng),我們可以加入閾值,當(dāng)增益大于閾值時(shí)才讓節(jié)點(diǎn)分裂,上式中的gamma即閾值,它是正則項(xiàng)里葉子節(jié)點(diǎn)數(shù)T的系數(shù),所以xgboost在優(yōu)化目標(biāo)函數(shù)的同時(shí)相當(dāng)于做了預(yù)剪枝。另外,上式中還有一個(gè)系數(shù)lambda,是正則項(xiàng)里leaf score的L2模平方的系數(shù),對(duì)leaf score做了平滑,也起到了防止過(guò)擬合的作用,這個(gè)是傳統(tǒng)GBDT里不具備的特性。

  • XGBoost實(shí)現(xiàn)層面

  • 內(nèi)置交叉驗(yàn)證方法

  • 能夠輸出特征重要性文件輔助特征篩選

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

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

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

  • 允許使用列抽樣(column(feature) sampling)來(lái)防止過(guò)擬合,借鑒了Random Forest的思想,sklearn里的gbm好像也有類(lèi)似實(shí)現(xiàn)。

  • 實(shí)現(xiàn)了一種分裂節(jié)點(diǎn)尋找的近似算法,用于加速和減小內(nèi)存消耗。

  • 節(jié)點(diǎn)分裂算法能自動(dòng)利用特征的稀疏性。

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

  • penalty function Omega主要是對(duì)樹(shù)的葉子數(shù)和葉子分?jǐn)?shù)做懲罰,這點(diǎn)確保了樹(shù)的簡(jiǎn)單性。

  • 支持分布式計(jì)算可以運(yùn)行在MPI,YARN上,得益于底層支持容錯(cuò)的分布式通信框架rabit。

LightGBM

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

lightGBM與XGBoost的區(qū)別:

  • 切分算法(切分點(diǎn)的選取)

  • 占用的內(nèi)存更低,只保存特征離散化后的值,而這個(gè)值一般用8位整型存儲(chǔ)就足夠了,內(nèi)存消耗可以降低為原來(lái)的1/8。

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

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

  • 時(shí)間上也有較大開(kāi)銷(xiāo),遍歷每個(gè)分割點(diǎn)時(shí)都需要進(jìn)行分裂增益的計(jì)算,消耗代價(jià)大

  • 對(duì)cache優(yōu)化不友好,在預(yù)排序后,特征對(duì)梯度的訪問(wèn)是一種隨機(jī)訪問(wèn),并且不同的特征訪問(wèn)的順序不一樣,無(wú)法對(duì)cache進(jìn)行優(yōu)化。同時(shí),在每一層長(zhǎng)樹(shù)的時(shí)候,需要隨機(jī)訪問(wèn)一個(gè)行索引到葉子索引的數(shù)組,并且不同特征訪問(wèn)的順序也不一樣,也會(huì)造成較大的cache miss。

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

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

  • 決策樹(shù)生長(zhǎng)策略上:

  • XGBoost采用的是帶深度限制的level-wise生長(zhǎng)策略,Level-wise過(guò)一次數(shù)據(jù)可以能夠同時(shí)分裂同一層的葉子,容易進(jìn)行多線程優(yōu)化,不容易過(guò)擬合;但不加區(qū)分的對(duì)待同一層的葉子,帶來(lái)了很多沒(méi)必要的開(kāi)銷(xiāo)(因?yàn)閷?shí)際上很多葉子的分裂增益較低,沒(méi)必要進(jìn)行搜索和分裂)

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

機(jī)器不學(xué)習(xí):機(jī)器學(xué)習(xí)時(shí)代三大神器GBDT、XGBoost、LightGBM

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

  • 直接支持類(lèi)別特征:LightGBM優(yōu)化了對(duì)類(lèi)別特征的支持,可以直接輸入類(lèi)別特征,不需要額外的0/1展開(kāi)。并在決策樹(shù)算法上增加了類(lèi)別特征的決策規(guī)則。

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

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

  • 在數(shù)據(jù)并行中使用分散規(guī)約(Reduce scatter)把直方圖合并的任務(wù)分?jǐn)偟讲煌臋C(jī)器,降低通信和計(jì)算,并利用直方圖做差,進(jìn)一步減少了一半的通信量?;谕镀钡臄?shù)據(jù)并行(Parallel Voting)則進(jìn)一步優(yōu)化數(shù)據(jù)并行中的通信代價(jià),使通信代價(jià)變成常數(shù)級(jí)別。

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

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

  • 原始

  • LightGBM針對(duì)這兩種并行方法都做了優(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時(shí), 采樣一定比例g(梯度)大的樣本

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

  • 速度更快

  • 內(nèi)存消耗更低

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類(lèi)似文章 更多