xgboost模型训练流程及要点
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参数,模型不会报错(validate_parameters参数可以设置是否报警),但同时它还是按照
num_boost_round默认的10来进行计算的,这里要注意。
n_estimators是sklearn接口中的参数,如果你放在原生接口(.train)里使用,不管你取什么值,都没有任何作用。
DecisionTreeClassifer和DecisionTreeRegressor重要参数调参注意点
xgboost sklearn接口版用gridsearch来进行调参
当gridsearch遇上xgboost 讲述了不同接口的调用方式,以及sklearn接口用gs调参的过程