Xgboost演算法梳理

2021-09-17 21:33:27 字數 1954 閱讀 8157

目錄

1 演算法思想

2 演算法原理

3 損失函式

4 **結點演算法

5 正則化

6 對缺失值處理

7 優缺點

8 應用場景

9 sklearn引數

官方文件

引數調整注意事項

python 包介紹

10 參考文章

該演算法思想就是不斷地新增樹,不斷地進行特徵**來生長一棵樹,每次新增乙個樹,其實是學習乙個新函式,去擬合上次**的殘差。當我們訓練完成得到k棵樹,我們要**乙個樣本的分數,其實就是根據這個樣本的特徵,在每棵樹中會落到對應的乙個葉子節點,每個葉子節點就對應乙個分數,最後只需要將每棵樹對應的分數加起來就是該樣本的**值。

xgboost

對應的模型:一堆

cart

樹。

注:wq(x)為葉子節點q的分數,f(x)為其中一棵回歸樹

如下圖例子,訓練出了2棵決策樹,小孩的**分數就是兩棵樹中小孩所落到的結點的分數相加。爺爺的**分數同理。

因此通過上式的改寫,我們可以將目標函式改寫成關於葉子結點分數w的乙個一元二次函式,求解最優的w和目標函式值就變得很簡單了,直接使用頂點公式即可。

由上面的原理可知,損失函式進行了二次泰勒展開

我們知道基於空間切分去構造一顆決策樹是乙個np難問題,我們不可能去遍歷所有樹結構,因此,xgboost使用了和cart回歸樹一樣的想法,利用貪婪演算法,遍歷所有特徵的所有特徵劃分點,不同的是使用上式目標函式值作為評價函式。具體做法就是**後的目標函式值比單子葉子節點的目標函式的增益,同時為了限制樹生長過深,還加了個閾值,只有當增益大於該閾值才進行**。同時可以設定樹的最大深度、當樣本權重和小於設定閾值時停止生長去防止過擬合

注意:這裡出現了γ和λ,這是xgboost自己定義的,在使用xgboost時,你可以設定它們的值,顯然,γ越大,表示越希望獲得結構簡單的樹,因為此時對較多葉子節點的樹的懲罰越大。λ越大也是越希望獲得結構簡單的樹。

第缺失值處理也可以說是對稀疏資料的處理,當樣本的第i個特徵值缺失時,無法利用該特徵進行劃分時,xgboost的想法是將該樣本分別劃分到左結點和右結點,然後計算其增益,哪個大就劃分到哪邊。演算法流程如下:

優點使用許多策略去防止過擬合,如:正則化項、shrinkage and column subsampling等。

目標函式優化利用了損失函式關於待求函式的二階導數

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

新增了對稀疏資料的處理,當資料的某個特徵缺失時,將該資料劃分到預設的子節點,本文提出了乙個演算法來求解這個預設方向。。

交叉驗證,early stop,當**結果已經很好的時候可以提前停止建樹,加快訓練速度。

支援設定樣本權重,該權重體現在一階導數g和二階導數h,通過調整權重可以去更加關注一些樣本。

xgboost支援列取樣,類似於隨機森林,構建每棵樹時對屬性進行取樣,訓練速度快,效果好

類似於學習率,學習到一棵樹後,對其權重進行縮減,從而降低該棵樹的作用,提公升可學習空間

構建樹的演算法包括精確的演算法和近似的演算法,近似的演算法對每維特徵加權分位進行分桶,具體的演算法利用到了損失函式關於待求樹的二階導數。

缺點採用貪心策略來生成決策樹的每個節點,頗耗時間以及資源。

分類回歸

xgboost演算法原理

全稱 extreme gradient boosting 基礎 gbdt 所屬 boosting迭代型 樹類演算法。適用範圍 分類 回歸 優點 速度快 效果好 能處理大規模資料 支援多種語言 支 持自定義損失函式等等。缺點 發布時間短 2014 工業領域應用較少,待檢驗 xgboost是在gbdt的...

分類演算法(五) xgboost 安裝

win7下 xgboost安裝踩了一堆坑,記錄一下 總體概述,掃一眼,跳到下個鏈結 首先按照這個邏輯一步步安裝 具體一點看 後面繼續鏈結2後面的步驟。但是我還是遇到了其它問題,python版本,scipy版本問題等。正在解決中 我擦。解決了,居然下個whl直接就能安裝,網上寫的那麼複雜搞什麼。首先到...

XGBoost演算法 學習筆記

學習背景 最近想要學習和實現一下xgboost演算法,原因是最近對專案有些想法,準備做個回歸 作為當下比較火的回歸 演算法,準備直接套用試試效果。一 基礎知識 1 泰勒公式 泰勒公式是乙個用函式在某點的資訊描述其附近取值的公式。具有區域性有效性。基本形式如下 由以上的基本形式可知泰勒公式的迭代形式為...