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的提公升還是比較明顯的:
還有,先粗調,再微調2. 非平衡資料集怎麼辦-- 降低learning_rate,當然同時,提高n_estimators
-- 想辦法弄到更多的資料
-- 想辦法把資料弄平衡
-- 利用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的實現沒有像...