各種集成方法比較
1. AdaBoost和RF
- AdaBoost改變了訓(xùn)練數(shù)據(jù)的權(quán)值,即樣本的概率分布,減少上一輪被正確分類的樣本權(quán)值,提高被錯(cuò)誤分類的樣本權(quán)值,而隨機(jī)森林在訓(xùn)練每棵樹的時(shí)候,隨機(jī)挑選部分訓(xùn)練集進(jìn)行訓(xùn)練。
- 在對(duì)新數(shù)據(jù)進(jìn)行預(yù)測(cè)時(shí),AdaBoost中所有樹加權(quán)投票進(jìn)行預(yù)測(cè),每棵樹的權(quán)重和錯(cuò)誤率有關(guān),而隨機(jī)森林對(duì)所有樹的結(jié)果按照少數(shù)服從多數(shù)的原則進(jìn)行預(yù)測(cè)。
2. AdaBoost和GBDT
- AdaBoost通過(guò)調(diào)整錯(cuò)分的數(shù)據(jù)點(diǎn)的權(quán)重來(lái)改進(jìn)模型
- GBDT是從負(fù)梯度的方向去擬合改進(jìn)模型
3. RF和GBDT
- Random Forest 是bootstrap(bagging)的方法的tree based ensemble: 即有放回的對(duì)訓(xùn)練數(shù)據(jù)采樣,分別訓(xùn)練decision tree, 最后用簡(jiǎn)單的投票方式作為最終結(jié)果。
- GBDT 是 boosting 的代表,每次訓(xùn)練都是使用所有數(shù)據(jù),但是認(rèn)為最終結(jié)果是多顆樹的疊加,訓(xùn)練完一棵樹以后,將結(jié)果的殘差作為下一棵樹的訓(xùn)練目標(biāo)。在這個(gè)過(guò)程中還使用了梯度近似殘差的方法。
3.1. GBDT和RF的相同點(diǎn)
- 都是由多棵樹組成
- 最終的結(jié)果都是由多棵樹一起決定
3.2. GBDT和RF的不同點(diǎn)
- 組成RF的樹可以是分類樹,也可以是回歸樹;而GBDT只由回歸樹組成;
- 組成RF的樹可以并行生成;而GBDT只能是串行生成;
- 對(duì)于最終的輸出結(jié)果而言,RF采用多數(shù)投票等;而GBDT則是將所有結(jié)果累加起來(lái),或者加權(quán)累加起來(lái);
- RF對(duì)異常值不敏感,GBDT對(duì)異常值非常敏感;
- RF對(duì)訓(xùn)練集一視同仁,GBDT是基于權(quán)值的弱分類器的集成;
- RF是通過(guò)減少模型方差提高性能,GBDT是通過(guò)減少模型偏差提高性能。
- RF每次訓(xùn)練集的樣本權(quán)重是數(shù)據(jù)集中樣本的比例權(quán)重,Adaboost是根據(jù)上一輪訓(xùn)練誤差來(lái)更新樣本權(quán)重,GBDT計(jì)算的是殘差,要求殘差最小化而非誤差
- RF的子采樣是有放回的抽樣,GBDT的子采樣是無(wú)放回的抽樣,是否放回主要針對(duì)的是每次抽取的一個(gè)樣本;如果每棵樹抽樣的整體都是100個(gè)樣本,抽樣80個(gè),隨機(jī)森林抽樣是放回的,最極端的80個(gè)可能全部都重復(fù),即一個(gè)樣本;無(wú)放回抽樣主要是樣本不會(huì)重復(fù),GBDT的每棵樹都會(huì)用80個(gè)不同的樣本來(lái)訓(xùn)練
3.4. 為什么GBDT的樹深度較RF通常都比較淺
- 對(duì)于機(jī)器學(xué)習(xí)來(lái)說(shuō),泛化誤差可以理解為兩部分,分別是偏差(bias)和方差(variance);偏差指的是算法的期望預(yù)測(cè)與真實(shí)預(yù)測(cè)之間的偏差程度,反應(yīng)了模型本身的擬合能力;方差度量了同等大小的訓(xùn)練集的變動(dòng)導(dǎo)致學(xué)習(xí)性能的變化,刻畫了數(shù)據(jù)擾動(dòng)所導(dǎo)致的影響。
- 當(dāng)模型越復(fù)雜時(shí),擬合的程度就越高,模型的訓(xùn)練偏差就越?。坏藭r(shí)如果換一組數(shù)據(jù)可能模型的變化就會(huì)很大,即模型的方差很大,所以模型過(guò)于復(fù)雜的時(shí)候會(huì)導(dǎo)致過(guò)擬合。
- 對(duì)于RF來(lái)說(shuō)由于并行訓(xùn)練很多不同的分類器的目的就是降低這個(gè)方差(variance)。所以對(duì)于每個(gè)基分類器來(lái)說(shuō),目標(biāo)就是如何降低這個(gè)偏差(bias),所以我們會(huì)采用深度很深甚至不剪枝的決策樹
- 對(duì)于GBDT來(lái)說(shuō)由于利用的是殘差逼近的方式,即在上一輪的基礎(chǔ)上更加擬合原數(shù)據(jù),所以可以保證偏差(bias),所以對(duì)于每個(gè)基分類器來(lái)說(shuō),問(wèn)題就在于如何選擇 variance 更小的分類器,即更簡(jiǎn)單的分類器,所以我們選擇了深度很淺的決策樹。
4. XGBOOST和GDBT
將樹模型的復(fù)雜度加入到正則項(xiàng)中,來(lái)避免過(guò)擬合,因此泛化性能會(huì)優(yōu)于GBDT。
GDBT在函數(shù)空間中利用梯度下降法進(jìn)行優(yōu)化,XGB在函數(shù)空間中使用了牛頓法進(jìn)行優(yōu)化。GDBT在優(yōu)化中使用了一階導(dǎo),而XGB對(duì)損失函數(shù)進(jìn)行了二階泰勒展開,用到了一階和二階導(dǎo), 可以加快優(yōu)化速度。
XGB除了支持CART作為基分類器之外,還支持線性分類器,在使用線性分類器的時(shí)候可以使用L1(alpha),L2正則化(lambda)。
列抽樣:XGBoost借鑒了隨機(jī)森林的做法,支持列抽樣(特征子采樣),不僅防止過(guò)擬合,還能減少計(jì)算。
-
在尋找最佳分割點(diǎn)時(shí),考慮到傳統(tǒng)的貪心算法效率較低,實(shí)現(xiàn)了一種近似貪心算法,用來(lái)加速和減小內(nèi)存消耗,首先根據(jù)特征分布的百分位數(shù)(percentiles)提出候選分裂點(diǎn)。然后,該算法將連續(xù)特征映射到由這些候選點(diǎn)分割的桶中,然后僅僅將桶邊界上的特征的值作為分裂點(diǎn)的候選,從而獲取計(jì)算性能的提升。分桶有兩種模式:
-
全局模式:在算法開始時(shí),對(duì)每個(gè)維度分桶一次,后續(xù)的分裂都依賴于該分桶并不再更新。
- 優(yōu)點(diǎn):只需要計(jì)算一次,不需要重復(fù)計(jì)算。
- 缺點(diǎn):在經(jīng)過(guò)多次分裂之后,葉結(jié)點(diǎn)的樣本有可能在很多全局桶中是空的。
-
局部模式:除了在算法開始時(shí)進(jìn)行分桶,每次拆分之后再重新分桶。
- 優(yōu)點(diǎn):每次分桶都能保證各桶中的樣本數(shù)量都是均勻的。
- 缺點(diǎn):計(jì)算量較大。
-
XGBoost支持并行處理,XGBoost的并行不是在模型上的并行,而是在特征上的并行,將特征列排序后以block的形式存儲(chǔ)在內(nèi)存中,在后面的迭代中重復(fù)使用這個(gè)結(jié)構(gòu)。這個(gè)block也使得并行化成為了可能,其次在進(jìn)行節(jié)點(diǎn)分裂時(shí),計(jì)算每個(gè)特征的增益,最終選擇增益最大的那個(gè)特征去做分割,那么各個(gè)特征的增益計(jì)算就可以開多線程進(jìn)行。
-
對(duì)缺失值的處理:對(duì)于特征的值有缺失的樣本,XGBoost可以自動(dòng)學(xué)習(xí)出它的分裂方向。
- 在邏輯實(shí)現(xiàn)上,為了保證完備性,會(huì)分別處理將missing該特征值的樣本分配到左葉子結(jié)點(diǎn)和右葉子結(jié)點(diǎn)的兩種情形,計(jì)算增益后選擇增益大的方向進(jìn)行分裂即可。
4.1. XGBoost相關(guān)知識(shí)
4.2. XGBoost中g(shù)amma參數(shù)的含義
- 分裂節(jié)點(diǎn)時(shí),損失函數(shù)減小值只有大于等于gamma節(jié)點(diǎn)才分裂,gamma值越大,算法越保守,越不容易過(guò)擬合,但性能就不一定能保證,需要平衡。