xgboost學習總結

2021-08-29 20:16:09 字數 3608 閱讀 2260

特徵處理:

缺失值處理:

啞變數處理:

附:需要處理啞變數的演算法有,

knn、

glmnet

、svm

、xgboost

;不需處理為啞變數的演算法有,

logistic regression

、raprt

、gbm

、randomforest

一、模型引數:

在訓練過程中主要用到兩個方法:

xgboost.train()

和xgboost.cv().

xgboost.train(params,dtrain,num_boost_round=10,evals=(),obj=none,feval=none,maximize=false,early_stopping_rounds=none, evals_result=none,verbose_eval=true,learning_rates=none,xgb_model=none)

params

這是乙個字典,裡面包含著訓練中的引數關鍵字和對應的值,形式是

params =

dtrain

訓練的資料

num_boost_round

這是指提公升迭代的個數

evals

這是乙個列表,用於對訓練過程中進行評估列表中的元素。形式是

evals = [(dtrain,』train』),(dval,』val』)]

或者是evals = [(dtrain,』train』)],

對於第一種情況,它使得我們可以在訓練過程中觀察驗證集的效果。

obj,

自定義目的函式

feval,

自定義評估函式

maximize ,

是否對評估函式進行最大化

early_stopping_rounds,

早期停止次數 ,假設為

100,驗證集的誤差迭代到一定程度在

100次內不能再繼續降低,就停止迭代。這要求

evals

裡至少有 乙個元素,如果有多個,按最後乙個去執行。返回的是最後的迭代次數(不是最好的)。如果

early_stopping_rounds

存在,則模型會生成三個屬性,

bst.best_score,bst.best_iteration,

和bst.best_ntree_limit

evals_result

字典,儲存在

watchlist

中的元素的評估結果。

verbose_eval (

可以輸入布林型或數值型

),也要求

evals

裡至少有 乙個元素。如果為

true ,

則對evals

中元素的評估結果會輸出在結果中;如果輸入數字,假設為

5,則每隔

5個迭代輸出一次。

learning_rates

每一次提公升的學習率的列表,

xgb_model ,

在訓練之前用於載入的

xgb model。

二、引數調優

初始設定引數:

params =

colsample_bytree

要依據特徵個數來判斷

objective

目標函式的選擇要根據問題確定,如果引數初步定之後劃分

20%為驗證集,準備乙個

watchlist

給train

和validation set ,

設定num_round

足夠大(比如

100000

),以至於你能發現每乙個

round

的驗證集**結果,如果在某乙個

round

後 validation set

的**誤差上公升了,你就可以停止掉正在執行的程式了。是回歸問題 ,一般是

reg:linear , reg:logistic , count:poisson

如果是分類問題,一般是

binary:logistic ,rank:pairwise

引數初步定之後劃分

20%為驗證集,準備乙個

watchlist

給train

和validation set ,

設定num_round

足夠大(比如

100000

),以至於你能發現每乙個

round

的驗證集**結果,如果在某乙個

round

後 validation set

的**誤差上公升了,你就可以停止掉正在執行的程式了。

watchlist = [(dtrain,'train'),(dval,'val')] model = xgb.train(params,dtrain,num_boost_round=100000,evals = watchlist)

逐個調優:

首先調整

max_depth,

通常max_depth

這個引數與其他引數關係不大,初始值設定為

10,找到乙個最好的誤差值,然後就可以調整引數與這個誤差值進行對比。比如調整到

8,如果此時最好的誤差變高了,那麼下次就調整到

12;如果調整到

12,誤差值比

10 的低,那麼下次可以嘗試調整到

15.         

——降低模型複雜度

在找到了最優的

max_depth

之後,可以開始調整

subsample,

初始值設定為

1,然後調整到

0.8

如果誤差值變高,下次就調整到

0.9,如果還是變高,就保持為

1.0

接著開始調整

min_child_weight,

方法與上面同理

再接著調整

colsample_bytree     ——以上隨機化

經過上面的調整,已經得到了一組引數,這時調整

eta

0.05

,然後讓程式執行來得到乙個最佳的

num_round,(

在 誤差值開始上公升趨勢的時候為最佳

)    

——正則化

主要思路:

機器學習演算法的建立——k層交叉檢驗(資料分折、交叉檢驗)——計算評價指標——指標深度分析(單因素方差分析、多元正態檢驗)——視覺化(rog、折線圖)

XGBoost 學習過程

最近開始入手學習python處理資料,在看 的時候發現了xgboost,並且作為第三方庫在pycharm中無法匯入,很是一籌莫展,那就從部落格上搜尋開始入手,首先了解這個庫到底是完成了什麼事情呢。下面開始據此對xgboost的原理做簡單的介紹 xgboost 1 是2014年2月誕生的專注於梯度提公...

機器學習 xgboost

xgb中引數分為三類 1.通用引數 2.整合引數 3.任務引數 1 隨機森林在ligthgbm 有很多整合演算法 中有,裡面更全。2 xgboost 裡面有gdbt是樹的串型疊加的各種包,梯度增強的方法 裡面沒有隨機森林包。xgboost是乙個支援多種資料格式的庫。libsvm資料儲存格式,xgbo...

XGBoost學習資料彙總

參考bryan大神的xgboost課程 1.自定義目標函式 2.機器學習演算法中gdbt和xgboost的區別有哪些 3.dart 4.xgboost reliable large scale tree boosting system 5.xgboost a scalable treeboostin...