XGBoost面試級別回顧

2021-09-12 11:05:55 字數 1182 閱讀 6655

介紹

xgboost是gb演算法的高效實現,xgboost中的基學習器除了可以是cart(gbtree)也可以是線性分類器(gblinear)。

與gbdt不同之處

xgboost在目標函式中顯示的加上了正則化項,基學習為cart時,正則化項與樹的葉子節點的數量t和葉子節點的值有關。

gb中使用loss function對f(x)的一階導數計算出偽殘差用於學習生成fm(x),xgboost不僅使用到了一階導數,還使用二階導數。gb中使用loss function對f(x)的一階導數計算出偽殘差用於學習生成fm(x),xgboost不僅使用到了一階導數,還使用二階導數

上面提到cart回歸樹中尋找最佳分割點的衡量標準是最小化均方差,xgboost尋找分割點的標準是最大化,lamda,gama與正則化項相關 上面提到cart回歸樹中尋找最佳分割點的衡量標準是最小化均方差,xgboost尋找分割點的標準是最大化,lamda,gama與正則化項相關

支援並行化,這是xgboost的閃光點,雖然樹與樹之間是序列關係,但是同層級節點可並行。具體的對於某個節點,節點內選擇最佳**點,候選**點計算增益用多執行緒並行。訓練速度快。

xgboost演算法的步驟和gb基本相同,都是首先初始化為乙個常數,gb是根據一階導數ri,xgboost是根據一階導數gi和二階導數hi,迭代生成基學習器,相加更新學習器。

優化內容

xgboost與gdbt除了上述三點的不同,xgboost在實現時還做了許多優化:

在尋找最佳分割點時,考慮傳統的列舉每個特徵的所有可能分割點的貪心法效率太低,xgboost實現了一種近似的演算法。大致的思想是根據百分位法列舉幾個可能成為分割點的候選者,然後從候選者中根據上面求分割點的公式計算找出最佳的分割點。

xgboost考慮了訓練資料為稀疏值的情況,可以為缺失值或者指定的值指定分支的預設方向,這能大大提公升演算法的效率,*****提到50倍。

特徵列排序後以塊的形式儲存在記憶體中,在迭代中可以重複使用;雖然boosting演算法迭代必須序列,但是在處理每個特徵列時可以做到並行。

按照特徵列方式儲存能優化尋找最佳的分割點,但是當以行計算梯度資料時會導致記憶體的不連續訪問,嚴重時會導致cache miss,降低演算法效率。*****中提到,可先將資料收集到執行緒內部的buffer,然後再計算,提高演算法的效率。

xgboost 還考慮了當資料量比較大,記憶體不夠時怎麼有效的使用磁碟,主要是結合多執行緒、資料壓縮、分片的方法,盡可能的提高演算法的效率。

機器學習面試題 XGBoost

相同點 不同點 先說說lrlr lr和g bd tgbdt gbdt 的區別 當在高維稀疏特徵的場景下,lrlr lr的效果一般會比gbd tgbdt gbdt 好。原因如下 先看乙個例子 假設乙個二分類問題,label為0和1,特徵有100維,如果有1w個樣本,但其中只要10個正樣本1,而這些樣本...

面試必備 XGBoost優點解析

1.二階導數資訊 gbdt在優化時只用到了一階導數資訊,而xgboost則對損失函式進行了二階泰勒展開,同時用到了一階和二階導數。2.防止過擬合 1 正則項 xgboost在代價函式裡新增了正則項,用於控制模型的複雜度。正則項包括葉子結點的個數以及葉子節點值的l2範數。從bias variance ...

java面試回顧

最近去一家公司面試,一道筆試題引起了我的思考 測試建立物件前後變數的初始化過程 author administrator public class demo1 static public demo1 string string private static int print string stri...