XGBoost-Python完全调参指南-参数解释篇
本文轉自XGBoost-Python完全調參指南-參數解釋篇。對XGBoost有需要小伙伴可以參看。并在此基礎上,添加了一些內容。
在analytics vidhya上看到一篇《Complete Guide to Parameter Tuning in XGBoost in Python》,寫的很好。因此打算翻譯一下這篇文章,也讓自己有更深的印象。具體內容主要翻譯文章的關鍵意思。
這篇文章按照原文的分節,共分為三個部分,其中本章介紹第一部分。
1、簡介與XGboost?
2、參數理解?
3、參數調優
關于XGBoost的參數,發現已經有比較完善的翻譯了。故本文轉載其內容,并作了一些修改與拓展。?
原文鏈接見:http://blog.csdn.NET/zc02051126/article/details/46711047
XGBoost參數
XGBoost的參數可以分為三種類型:通用參數、booster參數以及學習目標參數
General parameters:參數控制在提升(boosting)過程中使用哪種booster,常用的booster有樹模型(gbtree)和線性模型(gblinear model)。?
Booster parameters:這取決于使用哪種booster。?
Learning Task parameters:控制學習的場景,例如在回歸問題中會使用不同的參數控制排序。?
除了以上參數還可能有其它參數,在命令行中使用
General Parameters
- booster?[default=gbtree]?
有兩種模型可以選擇gbtree和gblinear。gbtree使用基于樹的模型進行提升計算,gblinear使用線性模型進行提升計算。缺省值為gbtree - silent [default=0]?
取0時表示打印出運行時信息,取1時表示以緘默方式運行,不打印運行時的信息。缺省值為0?
建議取0,過程中的輸出數據有助于理解模型以及調參。另外實際上我設置其為1也通常無法緘默運行。。 - nthread [default to maximum number of threads available if not set]?
XGBoost運行時的線程數。缺省值(-1)是當前系統可以獲得的最大線程數?
如果你希望使用CPU所有的核,建議不設置這個參數,算法將自動檢測并獲得最大線程 - num_feature [set automatically by xgboost, no need to be set by user]?
boosting過程中用到的特征維數,設置為特征個數。XGBoost會自動設置,不需要手工設置
Booster Parameters
From xgboost-unity, the bst: prefix is no longer needed for booster parameters. Parameter with or without bst: prefix will be equivalent(i.e. both bst:eta and eta will be valid parameter setting) .
Parameter for Tree Booster
- eta [default=0.3]?
為了防止過擬合,更新過程中用到的收縮步長。在每次提升計算之后,算法會直接獲得新特征的權重。 eta通過縮減特征的權重使提升計算過程更加保守。缺省值為0.3。這個值越小,說明對防止過擬合的要求越高。因此:eta和n_estimators是成反比的:即當n_estimators的值很大的時候,eta應該越小。?
取值范圍為:[0,1]?
通常最后設置eta為0.01~0.2 - gamma [default=0]?
節點分裂所需的最小損失函數下降值?
range: [0,∞]?
模型在默認情況下,對于一個節點的劃分只有在其loss function 得到結果大于0的情況下才進行,而gamma 給定了所需的最低loss function的值?
gamma值使得算法更保守,且其值依賴于loss function ,在模型中應該進行調參(某種程度上,類似于前剪枝(front-pruning))。 - max_depth [default=6]?
樹的最大深度。缺省值為6?
取值范圍為:[1,∞]?
指樹的最大深度?
樹的深度越大,則對數據的擬合程度越高(過擬合程度也越高)。即該參數也是控制過擬合?
建議通過交叉驗證(xgb.cv ) 進行調參?
通常取值:3-10 - min_child_weight [default=1]?
葉子節點中最小的樣本權重(Hessian)和。如果一個葉子節點的樣本權重和小于min_child_weight則拆分過程結束。在現行回歸模型中,這個參數是指建立每個模型所需要的最小樣本數。該成熟越大算法越conservative。即調大這個參數能夠控制過擬合。?
取值范圍為: [0,∞] - max_delta_step [default=0]?
允許的樹的最大權重?
取值范圍為:[0,∞]?
如果取值為0,那么意味著無限制。如果取為正數,則其使得xgboost更新過程更加保守。?
通常不需要設置這個值,但在使用logistics 回歸時,若類別極度不平衡,則調整該參數可能有效果 - subsample [default=1]?
用于訓練模型的子樣本占整個樣本集合的比例。如果設置為0.5則意味著XGBoost將隨機的從整個樣本集合中抽取出50%的子樣本建立樹模型,這能夠防止過擬合。同sklearn的GBM類似。?
取值范圍為:(0,1] - colsample_bytree [default=1]?
在建立樹時對特征隨機采樣的比例。缺省值為1?
取值范圍:(0,1] - colsample_bylevel[default=1]?
決定樹在每次節點劃分時采樣特征例的比例?
通常不使用,因為subsample和colsample_bytree已經可以起到相同的作用了?
-?scale_pos_weight[default=0]?
大于0的取值可以處理類別不平衡的情況。幫助模型更快收斂。例如對二分類問題:可以設置成樣本較多類別的樣本數/樣本較少類別的樣本數樣本較多類別的樣本數/樣本較少類別的樣本數
Parameter for Linear Booster
- reg_alpha [default=0]?
L2 正則的懲罰系數?
用于處理XGBoost的正則化部分。通常不使用,但可以用來降低過擬合 - reg_lambda [default=0]?
L1 正則的懲罰系數?
當數據維度極高時可以使用,使得算法運行更快。 - lambda_bias?
在偏置上的L2正則。缺省值為0(在L1上沒有偏置項的正則,因為L1時偏置不重要)
Task Parameters
- objective?[ default=reg:linear ]?
定義學習任務及相應的學習目標,可選的目標函數如下:?
“reg:linear” –線性回歸。?
“reg:logistic” –邏輯回歸。?
“binary:logistic” –二分類的邏輯回歸問題,輸出為概率。?
“binary:logitraw” –二分類的邏輯回歸問題,輸出的結果為wTx。?
“count:poisson” –計數問題的poisson回歸,輸出結果為poisson分布。?
在poisson回歸中,max_delta_step的缺省值為0.7。(used to safeguard optimization)?
“multi:softmax” –讓XGBoost采用softmax目標函數處理多分類問題,同時需要設置參數num_class(類別個數)?
“multi:softprob” –和softmax一樣,但是輸出的是ndata * nclass的向量,可以將該向量reshape成ndata行nclass列的矩陣。每行數據表示樣本所屬于每個類別的概率。?
“rank:pairwise” –set XGBoost to do ranking task by minimizing the pairwise loss - base_score [ default=0.5 ]?
每個樣本的初始估計,全局偏差 - eval_metric [ default according to objective ]?
校驗數據所需要的評價指標,不同的目標函數將會有缺省的評價指標(比如:回歸用”rmse”, 分類用”error”)?
用戶可以添加多種評價指標,對于Python用戶要以list傳遞參數對給程序,而不是map參數list參數不會覆蓋’eval_metric’?
The choices are listed below:?
“rmse”: root mean square error?
“logloss”: negative log-likelihood?
“error”: Binary classification error rate. It is calculated as #(wrong cases)/#(all cases). For the predictions, the evaluation will regard the instances with prediction value larger than 0.5 as positive instances, and the others as negative instances.?
“merror”: Multiclass classification error rate. It is calculated as #(wrong cases)/#(all cases).?
“mlogloss”: Multiclass logloss?
“auc”: Area under the curve for ranking evaluation.?
“ndcg”:Normalized Discounted Cumulative Gain?
“map”:Mean average precision?
“ndcg@n”,”map@n”: n can be assigned as an integer to cut off the top positions in the lists for evaluation.?
“ndcg-“,”map-“,”ndcg@n-“,”map@n-“: In XGBoost, NDCG and MAP will evaluate the score of a list without any positive samples as 1. By adding “-” in the evaluation metric XGBoost will evaluate these score as 0 to be consistent under some conditions.?
training repeatively - seed [ default=0 ]?
隨機數的種子。缺省值為0?
可以用于產生可重復的結果(每次取一樣的seed即可得到相同的隨機劃分)
Console Parameters
下面的這些參數僅能用于控制臺版本的xgboost。?
* use_buffer [ default=1 ]?
- 是否為輸入創建二進制的緩存文件,緩存文件可以加速計算。缺省值為1?
* num_round?
- boosting迭代計算次數。?
* data?
- 輸入數據的路徑?
* test:data?
- 測試數據的路徑?
* save_period [default=0]?
- 表示保存第i*save_period次迭代的模型。例如save_period=10表示每隔10迭代計算XGBoost將會保存中間結果,設置為0表示每次計算的模型都要保持。?
* task [default=train] options: train, pred, eval, dump?
- train:訓練模型?
- pred:對測試數據進行預測?
- eval:通過eval[name]=filenam定義評價指標?
- dump:將學習模型保存成文本格式?
* model_in [default=NULL]?
- 指向模型的路徑在test, eval, dump都會用到,如果在training中定義XGBoost將會接著輸入模型繼續訓練?
* model_out [default=NULL]?
- 訓練完成后模型的保存路徑,如果沒有定義則會輸出類似0003.model這樣的結果,0003是第三次訓練的模型結果。?
* model_dir [default=models]?
- 輸出模型所保存的路徑。?
* fmap?
- feature map, used for dump model?
* name_dump [default=dump.txt]?
- name of model dump file?
* name_pred [default=pred.txt]?
- 預測結果文件?
* pred_margin [default=0]?
- 輸出預測的邊界,而不是轉換后的概率
如果你比較習慣scikit-learn的參數形式,那么XGBoost的python 版本也提供了sklearn形式的接口 XGBClassifier。它使用sklearn形式的參數命名方式,對應關系如下:?
eta –> learning_rate?
lambda –> reg_lambda?
alpha –> reg_alpha
當然,想獲取更多更詳細的休息,請參考XGBoost的官方文檔,也會有更多更新的內容。?
①XGBoost Parameters (official guide)?
②XGBoost Demo Codes (xgboost GitHub repository)?
③Python API Reference (official guide)
總結
以上是生活随笔為你收集整理的XGBoost-Python完全调参指南-参数解释篇的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 受限玻尔兹曼机(Restricted B
- 下一篇: 将Python脚本打包成可执行文件