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里有。