本文章只用于學習交流不用于任何商業(yè)行為,所有知識點資料來源于網絡,如有任何不當之處請私信聯系,作者會及時改正
本文中總結自文檔所有標注的頁碼都是附件參考文檔中的頁碼
由于markdown不支持附件下載,附件鏈接如下
http://note.youdao.com/noteshare?id=05a144c93bd1f66d0a25881a5fe5ce65
1xgboost庫使用流程 & 參數總表
=============================
參數調節(jié)順序:
0 根據情況決定 silent&booster & objective
-> 1 n_estimator & eta
-> 2 max_depth OR gamma
觀察模型處于什么樣的狀態(tài)(過擬合還是欠擬合,處于方差-偏差圖像的左邊還是右邊?)決定是否需要剪枝(對于XGB這種樹模型來說一般都是要的)
-> 3 subsample(視情況在使用與否) & 三個樹的剪枝參數
“colsample_bytree” “colsample_bylevel” “colsample_bynode”
4 alpha OR/AND lambda正則化參數(受最大深度和和gamma影響)
調參思路:
- 單個參數先利用學習曲線確定大范圍/交叉(XGboost.cv)驗證,小范圍組合參數使用網格搜索
PS:如果是大數據集就只能手動CV調
-
CV調節(jié)方式(P36) 讓我們先從最原始的,設定默認參數開始,先觀察一下默認參數下,我們的交叉驗證曲線長什么樣.在這里,我們要使用三組曲線。一組用于展示原始數據上的結果,一組用于展示上一個參數調節(jié)完畢后的結果,最后一組用于展示現在我們在調節(jié)的參數的結果。
2重要參數及其詳細說明
重要參數1:n_estimators(模型角度P5)
說明:
弱分類器的數量,就是建立多少課樹
作用:
n_estimators越大,模型的學習能力就會越強,模型也越容易過擬合
參數推薦:
一般都不會建議一個太大的數目,300以下為佳,如果數據量是幾十萬甚至百萬可以適當調高。
注意點:
1樹的數量前期影響模型效果大,后期減小,并且可能因為數量過多導致效果下降或者過擬合
重要參數2: subsample(數據角度P12)
說明:
控制抽樣抽出來的樣本量大概是多少(通常在樣本量大的時候使用)
作用:
讓模型更加集中于那些困難樣本
參數推薦:
可借助學習曲線一般(0.05,1,20)確定大范圍
注意點:
1數據量少時不推薦使用
重要參數3: eta(評估器角度P14)
說明:
迭代決策樹時的步長(shrinkage),又叫做學習率(learning rate)。
作用:
越大,迭代的速度越快,算法的極限很快被達到,有可能無法收斂到真正的最佳。 越小,越有可能找到更精確的最佳值,更多的空間被留給了后面建立的樹,但迭代速度會比較緩慢。
參數推薦:
一般和n_estimators交互,使用網格交搜索來同時確定兩者參數值,一般在0.01~0.2之間
注意點:
1從評估器角度出發(fā),新建的評估器一定是要比之前的好,是當前最優(yōu).
重要參數4:booster(評估器角度P17)
說明:
booster'來控制我們究竟使用怎樣的弱評估器。
作用:
不同情況下不同的弱評估器的選擇對最后模型的效果影響很大。
參數推薦:
gtree:默認
gnlinear:一般數據成線性關系時候使用
dart:比梯度提升樹有更好的防過擬合功能
注意點:
1數據量不大時:gbtree和dart效果是相似的。
重要參數5:objective(損失函數角度P18)
說明:
objective 來控制我們究竟使用怎樣的損失函數
作用:
不同情況下不同的損失函數對最后模型的效果影響很大。
參數推薦:
更多詳見:
https://xgboost./en/latest/parameter.html#general-parameters
注意點:
1分類型的目標函數導入回歸類中會直接報錯。
重要參數7:gamma(樹結構角度P31)
說明:
被稱為“復雜性控制”(complexity control),是Gain中的懲罰項,增加的葉子越多,結構分之差Gain會被懲罰越重在樹的葉節(jié)點上進行進一步分枝所需的最小目標函數減少量,是用來防止過擬合的重要參數。對梯度提升樹影響最大的參數之一。
作用:
設定越大,算法就越保守,樹的葉子數量就越少,模型的復雜度就越低。
參數推薦:
一般學習曲線,具體需要自己試,如果學習曲線無法看出的話,就用xgboost.cv。
注意點:
1學習曲線運行速度較緩慢并且曲線的效果匪夷所思,推薦使用xgboost.cv。
重要剪枝參數:max_depth & colsample_bytree(樹結構角度P35)
說明:
剪枝參數。
作用:
控制過擬合。
參數推薦:
一般使用max_depth & colsample_bytree & colsample_ bilevel
注意點:
1最大深度的功能與參數gamma相似,因此如果先調節(jié)了 ,則最大深度可能無法展示出巨大的效果。當然,如果先調整了最大深度,則也有可能無法顯示明顯的效果。通常來說,這兩個參數中我們只使用一個,不過兩個都試試也沒有壞處。
2學習曲線運行速度較緩慢并且曲線的效果匪夷所思,推薦使用xgboost.cv
3其他參數及其詳細說明
正則化參數alpha,lambda(P23)
說明:
都是控制正則化強度的參數。
作用:
我們可以二選一使用,也可以一起使用加大正則化的力度。當alpha和lambda都為0的時候,目標函數就是普通的梯度提升樹的目標函數。
參數推薦:
一般先用L2,效果還不好再加上L1,配合網格搜索。
注意點:
1實際使用防止過擬合還是先考慮剪枝,或者是參數伽馬。
樣本平衡參數 scale_pos_weight (P41)
說明:
調節(jié)樣本不平衡的參數。
作用:
正負樣本比例。
參數推薦 & 注意點:
官網上說,如果我們只在意模型的整表現,則使用AUC作為模型評估指標,使用scale_pos_weight來處理樣本不平衡問題,如果我們在意預測出正確的概率,那我們就無法通過調節(jié)scale_pos_weight來減輕樣本不平衡問題帶來的影響。
這種時候,我們需要考慮另一個參數:max_delta_step。這個參數非常難以理解,它被稱之為是“樹的權重估計中允許的單次最大增量”,既可以考慮成是影響 的估計的參數。xgboost官網上認為,如果我們在處理樣本不均衡問題,并且十分在意得到正確的預測概率,則可以設置
max_delta_step參數為一個有限的數(比如1)來幫助收斂。max_delta_step參數通常不進行使用,二分類下的樣本不均衡問題時這個參數唯一的用途。
其他參數(P45)
更多計算資源:n_jobs
nthread和n_jobs都是算法運行所使用的線程,與sklearn中規(guī)則一樣,輸入整數表示使用的線程,輸入-1表示使用計
算機全部的計算資源。如果我們的數據量很大,則我們可能需要這個參數來為我們調用更多線程。
降低學習難度:base_score
base_score是一個比較容易被混淆的參數,它被叫做全局偏差,在分類問題中,它是我們希望關注的分類的先驗概率。比如說,如果我們有1000個樣本,其中300個正樣本,700個負樣本,則base_score就是0.3。對于回歸來說,
這個分數默認0.5,但其實這個分數在這種情況下并不有效。許多使用XGBoost的人已經提出,當使用回歸的時候base_score的默認應該是標簽的均值,不過現在xgboost庫尚未對此做出改進。使用這個參數,我們便是在告訴模型一些我們了解但模型不一定能夠從數據中學習到的信息。通常我們不會使用這個參數,但對于嚴重的樣本不均衡問題,設置一個正確的base_score取值是很有必要的。
生成樹的隨機模式:random_state
在xgb庫和sklearn中,都存在空值生成樹的隨機模式的參數random_state。在之前的剪枝中,我們提到可以通過隨機抽樣樣本,隨機抽樣特征來減輕過擬合的影響,我們可以通過其他參數來影響隨機抽樣的比例,卻無法對隨機抽樣干涉更多,因此,真正的隨機性還是由模型自己生成的。如果希望控制這種隨機性,可以在random_state參數中輸入固定整數。需要注意的是,xgb庫和sklearn庫中,在random_state參數中輸入同一個整數未必表示同一個隨機模
式,不一定會得到相同的結果,因此導致模型的feature_importances也會不一致。
自動處理缺失值:missing
XGBoost被設計成是能夠自動處理缺失值的模型,這個設計的初衷其實是為了讓XGBoost能夠處理稀疏矩陣。我們可以在參數missing中輸入一個對象,比如np.nan,或數據的任意取值,表示將所有含有這個對象的數據作為空值處理。XGBoost會將所有的空值當作稀疏矩陣中的0來進行處理,因此在使用XGBoost的時候,我們也可以不處理缺失值。當然,通常來說,如果我們了解業(yè)務并且了解缺失值的來源,我們還是希望手動填補缺失值。在GBDT或其他算法中使用1階是為了求極值在XG中使用2階是為了簡化目標函數,求導為了符合泰勒展開的要求,是為了使目標函數僅僅與樹結構ft相關,還并未開始取極值,求極值時也是求一階
屬性的特征重要性類型:importances_type
XGBOOST自帶importance參數說明:
https://www.cnblogs.com/RainLa/p/11929515.html
https://www./archives/77628.html
XGBOOST自帶importance實戰(zhàn):
https://blog.csdn.net/weixin_43469047/article/details/100181972
https://blog.csdn.net/weixin_43469047/article/details/101310435
Shap可視化可解釋性特征重要性庫(推薦先看):
https://zhuanlan.zhihu.com/p/64799119
https://zhuanlan.zhihu.com/p/101352812?utm_source=qq
https://zhuanlan.zhihu.com/p/83412330
參考文檔代碼示例:
樹模型的優(yōu)勢之一:能夠查看模型的重要性分數,可以使用嵌入法進行特征選擇-P9
進化的學習曲線:方差與泛化誤差 8.細化學習曲線,找出最佳 n estimators-P10
細化學習曲線,找出最佳eta-p16
使用網格搜索來查找最佳的參數組合(alpha和lambda) p25
細化學習曲線,找出最佳 gamma-p31
使用xgboost調節(jié)gamma-p32
完整CV調參示例-p36
使用Joblib保存和調用模型 p40
特別注意:
XGB vs GBDT 核心區(qū)別1:求解預測值 的方式不同GBDT中預測值是由所有弱分類器上的預測結果的加權求和,其中每個樣本上的預測結果就是樣本所在的葉子節(jié)點的均值。而XGBT中的預測值是所有弱分類器上的葉子權重直接求和得到,計算葉子權重是一個復雜的過程。
XGB vs GBDT 核心區(qū)別2:正則項的存在
在普通的梯度提升樹GBDT中,我們是不在目標函數中使用正則項的。但XGB借用正則項來修正樹模型天生容易
過擬合這個缺陷,在剪枝之前讓模型能夠盡量不過擬合。
實戰(zhàn)推薦:
https://blog.csdn.net/u013709270/article/details/78156207
|