xgboost算法梳理

ぃ、小莉子 提交于 2019-11-27 03:45:20

任务内容:

1. XGB算法梳理

XGB是前向可加算法,t轮的预测与t-1轮预测的关系如下,


其中ft(x)为t轮的预测函数,在XGB中即为决策树。
损失函数为可变化如下:在这里插入图片描述
其中在这里插入图片描述为复杂程度的惩罚项,上式根据泰勒二阶展开式可进一步展开为(注:GBDT按照泰勒一阶展开式):
在这里插入图片描述
其中在这里插入图片描述,由于在这里插入图片描述是t-1轮的损失函数,当迭代到t轮时,可看做是已知的,因此目标函数可转化为在这里插入图片描述,把在这里插入图片描述代入上式,可得在这里插入图片描述,其中在这里插入图片描述为样本xi所属叶节点的值,在这里插入图片描述为叶节点j的值。
上式是从样本的角度描述,把所有样本的预测损失进行汇总。现假设t轮生成的决策树中有T个叶节点,每个样本必落在其中一个叶节点中,因此可以从叶节点的角度,把所有叶节点中所有的样本的预测损失进行汇总,变化如下:
在这里插入图片描述,其中表示j叶子节点内的所有样本。当树的结构已知时,上式可看做在这里插入图片描述的一元二次方程,当在这里插入图片描述时,最小的值为在这里插入图片描述,其中在这里插入图片描述

2. 分裂结点算法

此时,问题从在t轮迭代时,找到一棵使目标函数在这里插入图片描述最小的树,变为在所有的树中找到一棵使在这里插入图片描述达到最小的树,此时树节点的值为在这里插入图片描述 。在现实中,树的数量是非常巨大的,无法穷尽每一棵树,所以退而求其次,使用贪婪算法,用局部最优逼近全局最优。具体算法框架跟GBDT类似,不同的是,划分的标准不再是gini系数或信息熵比率,而是在这里插入图片描述,并且叶节点的数值为
3.如何找到最佳特征的最佳分裂节点:

对于数值特征,把每个特征的值按从小到大排列,假设有5个不同的数值,那么存在5-1=4中划分的方案,分别计算划分后的两个子节点的obj之和,及划分前母节点的obj,计算两者的差值:在这里插入图片描述,找到差值最大划分方案,类似的,找到其余特征的差值最大的划分方案,最后,各特征间进行比较,找到差值最大的特征。
对于种类的特征,使用one_hot 进行独热编码,变为数值特征,

4.正则化
在这里插入图片描述xgbt中的正则化项主要是针对叶节点的数量,叶节点值的L2惩罚项。

5.对缺失值处理
xgboost把缺失值当做稀疏矩阵来对待,本身的在节点分裂时不考虑的缺失值的数值。缺失值数据会被分到左子树和右子树分别计层损失,选择较优的那一个。如果训练中没有数据缺失,预测时出现了数据缺失,那么默认被分类到右子树。
在这里插入图片描述
6 优缺点
优点:

  • 相对于GBDT来说,由于对损失函数进行了二阶的泰勒展开,从而减少了结果的偏差,让结果更精确,此外对还增加了叶节点数量及叶节点值的复杂度惩罚系数,减少了预测结果的方差,缓解了过拟合。
    缺点:
  • 相对于RF,boosting 是个串行的过程,不能并行化,计算复杂度较高

7. 应用场景
可用于回归问题与分类问题。

8.sklearn参数
分为通用参数、基学习器参数、任务参数
General parameters:参数控制在提升(boosting)过程中使用哪种booster,常用的booster有树模型(tree)和线性模型(linear model)。
Booster parameters:这取决于使用哪种booster。
Task parameters:控制学习的场景,例如在回归问题中会使用不同的参数控制排序。
General Parameters

  • booster [default=gbtree]

有两中模型可以选择gbtree和gblinear。gbtree使用基于树的模型进行提升计算,gblinear使用线性模型进行提升计算。缺省值为gbtree

  • silent [default=0]

取0时表示打印出运行时信息,取1时表示以缄默方式运行,不打印运行时信息。缺省值为0

  • nthread [default to maximum number of threads available if not set]

XGBoost运行时的线程数。缺省值是当前系统可以获得的最大线程数
num_pbuffer [set automatically by xgboost, no need to be set by user]
size of prediction buffer, normally set to number of training instances. The buffers are used to save the prediction results of last boosting step.
num_feature [set automatically by xgboost, no need to be set by user]
boosting过程中用到的特征维数,设置为特征个数。XGBoost会自动设置,不需要手工设置
Booster Parameters
From xgboost-unity, the bst: prefix is no longer needed for booster parameters. Parameter with or without bst: prefix will be equivalent(i.e. both bst:eta and eta will be valid parameter setting) .

Parameter for Tree Booster

  • eta [default=0.3]

为了防止过拟合,更新过程中用到的收缩步长。在每次提升计算之后,算法会直接获得新特征的权重。 eta通过缩减特征的权重使提升计算过程更加保守。缺省值为0.3
取值范围为:[0,1]

  • gamma [default=0]

minimum loss reduction required to make a further partition on a leaf node of the tree. the larger, the more conservative the algorithm will be.
range: [0,∞]

  • max_depth [default=6]

数的最大深度。缺省值为6
取值范围为:[1,∞]

  • min_child_weight [default=1]

孩子节点中最小的样本权重和。如果一个叶子节点的样本权重和小于min_child_weight则拆分过程结束。在现行回归模型中,这个参数是指建立每个模型所需要的最小样本数。该成熟越大算法越conservative
取值范围为: [0,∞]

  • max_delta_step [default=0]

Maximum delta step we allow each tree’s weight estimation to be. If the value is set to 0, it means there is no constraint. If it is set to a positive value, it can help making the update step more conservative. Usually this parameter is not needed, but it might help in logistic regression when class is extremely imbalanced. Set it to value of 1-10 might help control the update
取值范围为:[0,∞]

  • subsample [default=1]

用于训练模型的子样本占整个样本集合的比例。如果设置为0.5则意味着XGBoost将随机的冲整个样本集合中随机的抽取出50%的子样本建立树模型,这能够防止过拟合。
取值范围为:(0,1]

  • colsample_bytree [default=1]

在建立树时对特征采样的比例。缺省值为1
取值范围:(0,1]
Parameter for Linear Booster

  • lambda [default=0]

L2 正则的惩罚系数

  • alpha [default=0]

L1 正则的惩罚系数

  • lambda_bias

在偏置上的L2正则。缺省值为0(在L1上没有偏置项的正则,因为L1时偏置不重要)
Task Parameters

  • objective [ default=reg:linear ]

定义学习任务及相应的学习目标,可选的目标函数如下:
“reg:linear” –线性回归。
“reg:logistic” –逻辑回归。
“binary:logistic” –二分类的逻辑回归问题,输出为概率。
“binary:logitraw” –二分类的逻辑回归问题,输出的结果为wTx。
“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” –set XGBoost to do ranking task by minimizing the pairwise loss
base_score [ default=0.5 ]
the initial prediction score of all instances, global bias

  • eval_metric [ default according to objective ]

校验数据所需要的评价指标,不同的目标函数将会有缺省的评价指标(rmse for regression, and error for classification, mean average precision for ranking)
用户可以添加多种评价指标,对于Python用户要以list传递参数对给程序,而不是map参数list参数不会覆盖’eval_metric’
The choices are listed below:
“rmse”: root mean square error
“logloss”: negative log-likelihood
“error”: Binary classification error rate. It is calculated as #(wrong cases)/#(all cases). For the predictions, the evaluation will regard the instances with prediction value larger than 0.5 as positive instances, and the others as negative instances.
“merror”: Multiclass classification error rate. It is calculated as #(wrong cases)/#(all cases).
“mlogloss”: Multiclass logloss
“auc”: Area under the curve for ranking evaluation.
“ndcg”:Normalized Discounted Cumulative Gain
“map”:Mean average precision
“ndcg@n”,”map@n”: n can be assigned as an integer to cut off the top positions in the lists for evaluation.
“ndcg-“,”map-“,”ndcg@n-“,”map@n-“: In XGBoost, NDCG and MAP will evaluate the score of a list without any positive samples as 1. By adding “-” in the evaluation metric XGBoost will evaluate these score as 0 to be consistent under some conditions.
training repeatively
seed [ default=0 ]
随机数的种子。缺省值为0

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!