論XGBOOST科學調參

2021-07-27 04:15:39 字數 2125 閱讀 7278

xgboost的威力不用贅述,反正我是離不開它了。

具體xgboost的原理可以參見之前的文章《比xgboost更快--lightgbm介紹》

今天說下如何調參。

bias-variance trade-off

xgboost一共有幾十個引數:

中文版解釋:

文藝青年的調參一般這樣的:

1. 設定引數,評判指標;

2. 根據在驗證集上的大小,確定樹的棵樹n_estimators;

3. 採用引數、n_estimators,訓練模型,並應用到測試集

乙個字:糙!(kuai)

資料探勘師的調參一般這樣的:

設定基礎引數,基礎評判指標;

在訓練集上做cross-validation,做訓練集/交叉驗證集上偏差/方差與樹棵樹的關係圖;

判斷模型是過擬合 or 欠擬合,更新相應引數;

重複2、3步,確定樹的棵樹n_estimators;

採用引數、n_estimators,訓練模型,並應用到測試集;

資料集大小:70000*100,隨機準確率 0.17%

在設定了基礎引數,設定了樹的範圍後,可以看到模型在訓練集和交叉驗證集上的效果是這樣子滴:

陰影部分,表示的是模型的方差

從上圖,可以得出以下幾個結論:

- 驗證集上偏差最小&方差最小:n_estimators=66

- 訓練集和驗證集誤差較大:過擬合-----模型過於複雜

- 方差較大----模型過於複雜

這符合下面這個圖

- 直接降低模型複雜度

max_depth、min_child_weight、gamma

- 隨機化

subsample、colsample_bytree

- 正則化

lambda、alpha

通過,grid-search,再調整了以上的引數後,如下圖。最佳trade-off點的variance從0.361降低到0.316,auc_mean從0.8312降低到0.8308。

p-r的提公升還是比較明顯的:

還有,先粗調,再微調

-- 降低learning_rate,當然同時,提高n_estimators

2. 非平衡資料集怎麼辦

-- 想辦法弄到更多的資料

-- 想辦法把資料弄平衡

-- 利用smote等演算法來過取樣/欠取樣

-- 設定weight(初始化dmatrix時)

-- 使用更好的metrics:auc、f1

-- min_child_weight 設的小一點

-- scale_pos_weight = 0值的樣本數量/1值的樣本數量

-- max_delta_step

-- 自定義評價函式

xgb.train(params, dtrain, num_rounds, watchlist, feval=misclassified, maximize=false)

def misclassified(pred_probs, dtrain):

labels = dtrain.get_label() # obtain true labels

preds = pred_probs > 0.5 # obtain predicted values

return 'misclassified', np.sum(labels != preds)

Python機器學習(六) XGBoost調參

當了建了乙個模型,為了達到最佳效能,通常需要對引數進行調整。這樣你的模型,才會像一碗加了辣油精心調製過的香氣撲鼻的餛飩。所以 調參 調料?一 xgboost 及調參簡介 import xgboost as xgb 調入xgboost模組 xgbr xgb.xgbregressor 呼叫xgbregr...

XGBoost引數調優

xgboost extreme gradient boosting 是gradient boosting演算法的乙個優化的版本。xgboost演算法可以給 模型帶來能力的提公升。當我對它的表現有更多了解的時候,當我對它的高準確率背後的原理有更多了解的時候,我發現它具有很多優勢 標準gbm的實現沒有像...

XGBoost引數調優

xgboost extreme gradient boosting 是gradient boosting演算法的乙個優化的版本。xgboost演算法可以給 模型帶來能力的提公升。當我對它的表現有更多了解的時候,當我對它的高準確率背後的原理有更多了解的時候,我發現它具有很多優勢 標準gbm的實現沒有像...