日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【数据挖掘】XGBoost面试题:与GBDT的区别?为什么使用泰勒二阶展开?为什么可以并行训练?为什么快?防止过拟合的方法?如何处理缺失值?

發(fā)布時間:2023/12/20 编程问答 54 豆豆

1、簡單介紹XGB

是一種基于boosting增強(qiáng)策略的加法模型,訓(xùn)練的時候采用前向分布算法進(jìn)行貪婪的學(xué)習(xí),每次迭代都學(xué)習(xí)一棵CART樹來擬合之前 t-1 棵樹的預(yù)測結(jié)果與訓(xùn)練樣本真實值的殘差。XGB對GBDT進(jìn)行了一系列優(yōu)化,比如損失函數(shù)進(jìn)行了二階泰勒展開、目標(biāo)函數(shù)加入正則項、支持并行和默認(rèn)缺失值處理等,在可擴(kuò)展性和訓(xùn)練速度上有了巨大的提升,但其核心思想沒有大的變化。

2、XGB與GBDT的區(qū)別

  • 基分類器:XGB的基分類器不僅支持CART決策樹,還支持線性分類器。
  • 導(dǎo)數(shù)信息:XGB對損失函數(shù)做了二階泰勒展開,GBDT只用了一階導(dǎo)數(shù)信息,并且XGB還支持自定義損失函數(shù),只要損失函數(shù)一階、二階可導(dǎo)。
  • 正則項:XGB的目標(biāo)函數(shù)加了正則項, 相當(dāng)于預(yù)剪枝,使得學(xué)習(xí)出來的模型更加不容易過擬合。
  • 列抽樣:XGB支持列采樣,與隨機(jī)森林類似,用于防止過擬合。
  • 缺失值處理:對樹中的每個非葉子結(jié)點,XGB可以自動學(xué)習(xí)出它的默認(rèn)分裂方向。如果某個樣本該特征值缺失,會將其劃入默認(rèn)分支。
  • 并行化:注意不是tree維度的并行,而是特征維度的并行。XGBt預(yù)先將每個特征按特征值排好序,存儲為塊結(jié)構(gòu),分裂結(jié)點時可以采用多線程并行查找每個特征的最佳分割點,極大提升訓(xùn)練速度。

3、XGBoost為什么使用泰勒二階展開

  • 精準(zhǔn)性:相對于GBDT的一階泰勒展開,XGB采用二階泰勒展開,可以更為精準(zhǔn)的逼近真實的損失函數(shù)
  • 可擴(kuò)展性:損失函數(shù)支持自定義,只需要新的損失函數(shù)二階可導(dǎo)。

4、XGBoost為什么可以并行訓(xùn)練

  • XGB的并行,并不是說每棵樹可以并行訓(xùn)練,XGB本質(zhì)上仍然采用boosting思想,每棵樹訓(xùn)練前需要等前面的樹訓(xùn)練完成才能開始訓(xùn)練。
  • XGBoost的并行,指的是特征維度的并行。在訓(xùn)練之前,每個特征按特征值對樣本進(jìn)行預(yù)排序,并存儲為Block結(jié)構(gòu),在后面查找特征分割點時可以重復(fù)使用,而且特征已經(jīng)被存儲為一個個block結(jié)構(gòu),那么在尋找每個特征的最佳分割點時,可以利用多線程對每個block并行計算。

5、XGBoost為什么快

  • 分塊并行:訓(xùn)練前每個特征按特征值進(jìn)行排序并存儲為Block結(jié)構(gòu),后面查找特征分割點時重復(fù)使用,并且支持并行查找每個特征的分割點
  • 候選分位點:每個特征采用常數(shù)個分位點作為候選分割點
  • CPU cache 命中優(yōu)化: 使用緩存預(yù)取的方法,對每個線程分配一個連續(xù)的buffer,讀取每個block中樣本的梯度信息并存入連續(xù)的Buffer中。
  • Block 處理優(yōu)化:Block預(yù)先放入內(nèi)存;Block按列進(jìn)行解壓縮;將Block劃分到不同硬盤來提高吞吐。

6、XGBoost防止過擬合的方法

XGB在設(shè)計時,為了防止過擬合做了很多優(yōu)化,具體如下:

  • 目標(biāo)函數(shù)添加正則項:葉子節(jié)點個數(shù)+葉子節(jié)點權(quán)重的L2正則化
  • 列抽樣:訓(xùn)練的時候只用一部分特征(不考慮剩余的block塊即可)
  • 子采樣:每輪計算可以不使用全部樣本,使算法更加保守
  • shrinkage: 可以叫學(xué)習(xí)率或步長,在XGB 進(jìn)行完一次迭代后,會將葉子節(jié)點的權(quán)重乘上該系數(shù),主要是為了削弱每棵樹的影響,讓后面有更大的學(xué)習(xí)空間。

7、XGBoost如何處理缺失值

XGB模型的一個優(yōu)點就是允許特征存在缺失值。對缺失值的處理方式如下:

  • 在特征k上尋找最佳分割點時,不會對該列特征缺失的樣本進(jìn)行遍歷,而只對該列特征值為無缺失值的樣本上對應(yīng)的特征值進(jìn)行遍歷,通過這個技巧來減少了為稀疏離散特征尋找分割點 的時間開銷。
  • 在邏輯實現(xiàn)上,為了保證完備性,會將該特征值缺失的樣本分別分配到左葉子結(jié)點和右葉子結(jié)點,兩種情形都計算一遍后,選擇分裂后增益最大的那個方向(左分支或是右分支),作為預(yù)測時特征值缺失樣本的默認(rèn)分支方向。
  • 如果在訓(xùn)練中沒有缺失值而在預(yù)測中出現(xiàn)缺失,那么會自動將缺失值的劃分方向放到右子結(jié)點。

總結(jié)

以上是生活随笔為你收集整理的【数据挖掘】XGBoost面试题:与GBDT的区别?为什么使用泰勒二阶展开?为什么可以并行训练?为什么快?防止过拟合的方法?如何处理缺失值?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。