XGBoost 的优点
1. Regularization
- XGBoost被看作是 ‘regularized boosting’ 技术.
- BGM是没有regularization的
2. Parallel Processing:
- XGBoost实现了并行化计算====>快
- 提问:boosting是sequential process,怎么并行?
- XGBoost能在Hadoop上执行
3. High Flexibility
- 可以自定义优化目标和评估标准(custom optimization objectives and evaluation criteria.)
- 如此一来增加了新的维度,使得 there is no limit to what we can do.
4. Handling Missing Values
- XGBoost有内置的routine处理缺失值
- 用户需要提供与其他观察值不同的值,并将其作为参数传递。
XGBoost在任何节点上遇到缺失的值的时候,会尝试不同的方法,学习填充缺失值应该使用哪条路径。
5. Tree Pruning
- GBM采用的是贪心算法,分裂时候遇到 negative loss 就会停止划分 (走一步看一步)
- XGBoost使分割达到指定的max_depth,然后开始向后修剪树并移除没有正增益的分割(走完全部,回头审查)
- GBM看到 loss == -2 的时候可能就停止了,但是也许后面 loss == +10。XGBoost会继续下去,使得 loss== +8
6. Built-in Cross-Validation
- 允许 每次迭代进行交叉验证
- This is unlike GBM where we have to run a grid-search and only a limited values can be tested.
7. Continue on Existing Model
- 我们可以基于上一次迭代来训练XGBoost
- 不过,sklearn 中的GBM也有这个功能实现
XGBoost Parameters
General Parameters: Guide the overall functioning
Booster Parameters: Guide the individual booster (tree/regression) at each step
Learning Task Parameters: Guide the optimization performed
1. General Parameters
1.1 booster [default=gbtree]
每次迭代选择何种模型,主要有两种选择:
- gbtree: tree-based models
- gblinear: linear models
1.2 silent [default=0]
- 设置为1,表示不打印任何信息。(Silent mode is activated is set to 1 )
- 设置为0,打印适时有用信息
1.3 nthread [default to maximum number of threads available if not set]
- 用于平行处理(number of cores in the system should be entered)
- 不设置改参数,则会使用所有cores
2. Booster Parameters
下文主要介绍 tree booster
2.1 eta [default=0.3]
- 类似于GBM中的学习率
- 通过缩小每个步骤的权重使模型更健壮
- 典型的最终值将被使用:0.01-0.2
2.2 min_child_weight [default=1]
- 孩子节点的样本权重和的最小值。
- 如果一个叶子节点的样本权重和小于min_child_weight则拆分过程结束。在现行回归模型中,这个参数是指建立每个模型所需要的最小样本数。该成熟越大算法越保守。
- 可以理解为某些节点的分裂对损失函数的贡献很小,因此不再分裂
- 和GBM的 min_child_leaf 参数类似,但不完全一样。XGBoost的这个参数是最小样本权重的和,而GBM参数是最小样本总数。
- 这个参数用于避免过拟合。当它的值较大时,可以避免模型学习到局部的特殊样本。
- 但是如果这个值过高,会导致欠拟合。这个参数需要使用CV来调整。
2.3 max_depth [default=6]
- 和GBM中的参数相同,这个值为树的最大深度。
- 这个值也是用来避免过拟合的。max_depth越大,模型会学到更具体更局部的样本。
- 需要使用CV函数来进行调优。
- 典型值:3-10
2.4 max_leaf_nodes
- 树上最大的节点或叶子的数量。
- 可以替代max_depth的作用。因为如果生成的是二叉树,一个深度为n的树最多生成n2个叶子。
- 如果定义了这个参数,GBM会忽略max_depth参数。
2.5 gamma [default=0]
- 在节点分裂时,只有分裂后损失函数的值下降了,才会分裂这个节点。Gamma指定了节点分裂所需的最小损失函数下降值。
- 这个参数的值越大,算法越保守。这个参数的值和损失函数息息相关,所以是需要调整的。### 2.6
2.6 max_delta_step [default=0]
- 这参数限制每棵树权重改变的最大步长。如果这个参数的值为0,那就意味着没有约束。如果它被赋予了某个正值,那么它会让这个算法更加保守。
- 通常,这个参数不需要设置。但是当各类别的样本十分不平衡时,它对逻辑回归是很有帮助的。
- 这个参数一般用不到,但是你可以挖掘出来它更多的用处。
2.7 subsample [default=1]
- 和GBM中的subsample参数一模一样。这个参数控制对于每棵树,随机采样的比例。
- 减小这个参数的值,算法会更加保守,避免过拟合。但是,如果这个值设置得过小,它可能会导致欠拟合。
- 典型值:0.5-1
2.8 colsample_bytree [default=1]
- 和GBM里面的max_features参数类似。用来控制每棵随机采样的列数的占比(每一列是一个特征)。
- 典型值:0.5-1
2.9 colsample_bylevel [default=1]
- 用来控制树的每一级的每一次分裂,对列数的采样的占比。
- 一般不太用这个参数,因为subsample参数和colsample_bytree参数可以起到相同的作用。但是如果感兴趣,可以挖掘这个参数更多的用处。
2.10 lambda [default=1]
- 权重的L2正则化项。(和Ridge regression类似)。
- 这个参数是用来控制XGBoost的正则化部分的。虽然大部分数据科学家很少用到这个参数,但是这个参数在减少过拟合上还是可以挖掘出更多用处的。
2.11 alpha [default=0]
- 权重的L1正则化项。(和Lasso regression类似)。
- 可以应用在很高维度的情况下,使得算法的速度更快。
2.12 scale_pos_weight [default=1]
- 在各类别样本十分不平衡时,把这个参数设定为一个正值,可以使算法更快收敛。
3. Learning Task Parameters
3.1 objective [default=reg:linear]
这个参数定义需要被最小化的损失函数。最常用的值有:
- binary:logistic :二分类的逻辑回归,返回预测的概率(不是类别)。
- multi:softmax : 使用softmax的多分类器,返回预测的类别(不是概率)。 在这种情况下,你还需要多设一个参数:num_class(类别数目)。
- multi:softprob: 和multi:softmax参数一样,但是返回的是每个数据属于各个类别的概率。
3.2 eval_metric [ default according to objective ]
- 对于有效数据的度量方法。
- 对于回归问题,默认值是rmse,对于分类问题,默认值是error。
- 典型值有:
- rmse 均方根误差
- mae 平均绝对误差
- logloss 负对数似然函数值
- error 二分类错误率(阈值为0.5)
- merror 多分类错误率
- mlogloss 多分类logloss损失函数
- auc 曲线下面积
3.3 seed [default=0]
- 随机数的种子
- 设置它可以复现随机数据的结果,也可以用于调整参数
Scikit-learn中有个XGBClassifier包,有些函数名需要变动:
1、eta -> learning_rate
2、lambda -> reg_lambda
3、alpha -> reg_alpha