XGBoost是Kaggle上非常火的一种模型,很多项目用它拿到了第一。
python库安装
python的pip上还没有1,mac上略有麻烦,参见Installing XGBoost on Mac OSX
Mac上,CC, CXX的version应该是7
export CC = gcc-7
export CXX = g++-7
参数的说明
对于xgboost,有很多参数可以设置,这些参数的详细说明在这里,有几个重要的如下:
- 一般参数,设置选择哪个booster算法
- booster: 可以选择gbtree,dart和gblinear。gbtree, dart使用基于树的模型进行提升计算,gblinear使用线性模型进行提升计算。缺省值为gbtree
- silent: 取0时表示打印出运行时信息,取1时表示以缄默方式运行,不打印运行时信息。缺省值为0
- nthread: XGBoost运行时的线程数。缺省值是当前系统可以获得的最大线程数
- num_pbuffer: 预测缓冲区大小,通常设置为训练实例的数目。缓冲用于保存最后一步提升的预测结果,无需人为设置。
- num_feature: Boosting过程中用到的特征维数,设置为特征个数。XGBoost会自动设置,无需人为设置。
使用的booster算法的参数
gbtree参数设置
- eta(学习率): 为了防止过拟合,更新过程中用到的收缩步长。在每次提升计算之后,算法会直接获得新特征的权重。 eta通过缩减特征的权重使提升计算过程更加保守。缺省值为0.3。取值范围为:[0,1] 在 Scikit-Learn中,这个参数名是learning_rate
- gamma(最小扩展损失): 决定树的节点是否扩展为区域的最小损失。如多一个节点split的时候,对于loss function带来的降低量大于gamma时,则进行split。值越大,算法越保守。==需要调参==。缺省值是0,取值范围是[0,∞]
- max_depth:树的深度,越大模型越复杂,也越可能过拟合。0表示没限制,默认值是6。==需要调参==,一般在3到10之间。
- min_child_weight: 子节点中最小的样本权重和。如果一个叶子节点的样本权重和小于min_child_weight则拆分过程结束。在现行回归模型中,这个参数是指建立每个模型所需要的最小样本数。值越大,算法越保守conservative,但太大会导致模型欠拟合,==需要调参==。默认值是1,取值范围为:[0,∞]
- max_delta_step: 我们允许每个树的权重被估计的最大值。如果它的值被设置为0,意味着没有约束;如果它被设置为一个正值,它能够使得更新的步骤更加保守。通常无需设置该参数,但是如果在逻辑回归中极其不平衡时它可能会有帮助。把它范围设置为1-10之间也许能控制更新。默认值是0,取值范围为:[0,∞]
- subsample: 用于训练模型的子样本占整个样本集合的比例。如果设置为0.5则意味着XGBoost将随机的从整个样本集合中随机的抽取出50%的子样本建立树模型,这能够防止过拟合,但取值太小可能欠拟合。一般在[0.5, 1]之间比较合适,允许的取值范围为:(0,1]
- colsample_bytree: 在建立树时对特征采样的比例。缺省值为1,取值范围为:(0,1]
- colsample_bylevel: 在建立树时,split时,对于每一层的特征采样比例。缺省值为1,取值范围为:(0,1]
- alpha: L1 正则的惩罚系数,值越大越不容易过拟合,缺省值为0,增加这个值会让算法更保守。在 Scikit-Learn中,这个参数名是reg_alpha
- lambda: L2 正则的惩罚系数,值越大越不容易过拟合,缺省值为1,增加这个值会让算法更保守。在 Scikit-Learn中,这个参数名是reg_lambda
- scale_pos_weight: 当分类很不平衡的时候,把它设置为正值,可以加快收敛。默认值是1。
还有很多,感觉不是特别重要,就没写上来
学习任务的参数
objective: 定义学习目标,可选的目标函数如下:
- “reg:linear” —— 线性回归。
- “reg:logistic”—— 逻辑回归。
- “binary:logistic”—— 二分类的逻辑回归问题,输出为概率。
- “binary:logitraw”—— 二分类的逻辑回归问题,输出的结果为逻辑变换前的分值。
- “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” –设置XGBoost使用最小化pairwise损失做排名。
- “reg:gamma”
- “reg:tweedie”
base_score: 所有实例的初始化预测分数,全局的偏差值; 只要经历足够多的迭代次数,这个值对最终结果将不会有太大的影响。初始化为0.5
eval_metric: 校验数据所需要的评价指标,不同的目标函数将会有缺省的评价指标(rmse for regression, and error for classification, mean average precision for ranking),用户可以添加多种评价指标,对于Python用户要以list传递参数对给程序,而不是dict,否则后面的参数会覆盖之前。参数选择有
- rmse: root mean square error
- mae: mean absolute error
- logloss: negative log-likelihood
- error: Binary classification error rate (超过 0.5 threshold,认为是positive),就是