1.xgb有多種訓練形式,一種是原生接口形式,一種是sklearn接口形式。
其中原生接口形式可以有xgb.train()和xgb.cv()兩種。前者完成后返回個模型,后者只返回在訓練集和測試集的表現,不返回模型。
sklearn接口形式是xgb.XGBClassifier()(本文僅考慮分類問題),每種形式的模型參數不一樣,具體的參考文檔。
2.關於參數的問題要重視
一般分為三類參數:
第一類,General parameters,relate to which booster we are using to do boosting, commonly tree or linear model
第二類,Booster parameters,這是模型的參數,平時大家討論的基本都是這一類參數,
比如learning_rate,max_depth,min_child_weight,n_estimators, colsample_bytree等。
第二類,learning task parameters, 這是對訓練過程或目標的參數,大家平時討論的少,比如objective,num_boost_round,
early_stopping等。
3.n_estimators和num_boost_round這兩個參數要着重說一下。
首先說明一下這兩個變量含義一樣,只是出現在不同的接口里。參考這里
num_boost_round是在原生接口中出現的參數,num_boost_round默認是10,如果不手工修改,會導致模型訓練不完整,樣本分不開。
出現類似下圖的問題,如果用原生接口訓練模型,即便xgb.train(params, dtrain, evals, obj)的params中你放了n_estimators變量,但
這是原生接口調用,根本沒有n_estimators參數,模型不會報錯(在sklearn接口形式的validate_parameters參數可以設置是否報警),
但同時它還是按照num_boost_round默認的10來進行計算的,這里要注意。
n_estimators是sklearn接口中的參數,如果你放在原生接口(.train)里使用,不管你取什么值,都沒有任何作用。
4.對於xgb0-1二分類問題,xgb預測的評分有時>1或者<0的情況,這個原因可能是
You have to set the option objective = binary:logistic to get probabilities between 0 and 1, otherwise you only get relative scores.
DecisionTreeClassifer和DecisionTreeRegressor重要參數調參注意點
xgboost sklearn接口版用gridsearch來進行調參
當gridsearch遇上xgboost 講述了不同接口的調用方式,以及sklearn接口用gs調參的過程
disscuss about overfit in xgboost
complete guide to params tuning in xgboost with python code
python機器學習筆記:常用評估模型指標的用法這篇文章較多的從理論的角度進行總結,而對具體python實現中sklearn相應函數使用情況介紹的較少
python機器學習|為風控業務定制損失函數與評價函數(XGB/LGB)
xgboost中objective和eval_metrics的區別?
model_selection.GridSearchCV和model_selection.cross_val_score中的scoring參數
我自己的總結:score_metrics(有些地方叫scoring)和objective/loss_function的關系?他們會在什么地方出現?什么樣的模型叫完全一樣的模型?
先回答
第二個問題,score_metrics/scoring和objective都是在模型訓練的時候出現的,更進一步,objective/loss_function是在訓練某一個模型中用到。
score_metrics/scoring是在gridsearchCV中,比較多個模型用到的。如果是僅僅只有一套超參數,那score_metrics/scoring就沒有使用的必要,
即便是有,就和eval_results一樣,是僅僅作為查看結果出現的,並不會影響模型。
第一個,它們的關系就是,objective/loss_function是訓練模型必要的,而score_metrics/scoring是對比多個模型之間(調參)時用到的,它只在gridsearchCV里有。