XGBoost接口
注:XGBoost有分类,也有回归,此处以分类为例,回归和分类主要是目标函数
不一样;
fit函数中,可以设置一个样验的集合(参数:eval_set),然后再设置一个估计的准则(eval_metric),当模型连续opping_rounds次在校验集上都没有提升时,结束训练过程;(上一章:决策树提升-GBDT中的early stop)
注:learning_rate(学习率)和n_estimators(弱分类器数目,如决策树的棵数)是这两个参数是相关的,学习率越大时,所需的弱学习器数目越小,通常为使得模型的效果好一些时,会让学习率小一点,弱学习器的数目多一点;
gamma为节点分裂时(如决策树的分裂),损失函数的下降值,如果分裂后,损失函数的下降值小天gamma的值,则停止分裂,通常该值设为0,即节点分裂后,只要损失函数的值不增加,就继续分裂;
min_child_weight为节点分裂后,如果某个叶子节点上,所有样本的权重小于min_child_weighht所设定的值,则停止分裂,权重即样本hessian的和;
注:subsample、colsample_bytree、colsample_bylevel这三个参数主要用于随机采样,subsample用于控制采样的比例,如0.7,0.8,默认值为1;colsample_bytree、colsample_bylevel用于构造树时,所使用的特征比例,如0.7,0.8;通过这三个参数的设置,可以控制树之间的相关性不是太强,如同随机森林;
reg_alpha和reg_lambda为正则项,即决策树的复杂度的定义中, reg_alpha为叶子节点数的处罚,即
,reg_lambda为叶子节点分数的L2正则,即
;
在两分类分类问题中,如果正负样本不均衡的话,可以通过scale_pos_weight来调整正负样本的权重;
参数类别
注:reg:logistic-逻辑回归输出的是结果;multi:softmax输出分类结果;
XGBoost评价函数
注:rmse:均方误差开根号;logloss:负log似然损失;error:错误率,平均0-1损失;merror:多类的误分率;mlogloss:多类的logloss;
注:上图中参数应为:feval='evalerror' ;
booster参数
注:如果一个叶子节点的样本权重太小,说明该叶子节点里的样本数太少,表示得太局部,同时该叶子节点的决策边界也比较复杂;叶子节点的权重指的是hessian;
注:欠拟合时,除了加大学习率,还可以改变树的深度和数目;
注:稀有事件如多类分类问题时,类别数里样本最少的那类;
Kaggle竞赛案例分析
参数调优
注:参数调优,最好一次性最调整一个或两个参数,一次性调整的参数过多的话,参数范围过大,计算资源的消耗过多;一次性调整一两参数时,可以在用相对少量的计算资源获取次优解;
通常,如果两个参数之间有强关联性,如max_depth和min_child_weight,调优就起调整,如果弱关联性的参数则单独调整;
注:目前,就单个模型而言,XGBoost是最好的,LightGBM速度上XGBoost快,但性能上差不多。对一个实际问题,往往需要做模型融合,以达到更好效果;
注:上图中用的是-logloss,所以该值是越大越好;
注:得到较好的max_depth和min_child_weight后,可以利用这两个参数返回去调整弱学习器n_estimators,以得到更好的参数和效果;
树的复杂度定义:
,第一项为L2,第二项为L0
XGBoost并行处理
注:XGBoost中的树与树之间是有关联的,所以建树时是一个串行操作,随机森林中,树与树之间没有关联,所以建树时是并行的,可以同时利用多个核建多个树;
注:参数模型及非参数模型说明:参数模型如线性回归,其参数w的数目与特征维数是一样的,但XGBoost,我们没法明确的说它有多少个参数,因此称为非参数模型;