1 算法原理

XGBoost(eXtreme Gradient Boosting)是大规模并行boosted tree的工具,它是目前最快最好的开源boosted tree工具包,比常见的工具包快10倍以上。XGBoost是对GBDT算法的一种改良实现,主要包括了正则化、损失函数、学习策略、并行实现等方面。
GBDT中预测值是由所有弱分类器上的预测结果加权求和,其中每个样本上的预测结果是样本所在的叶子节点的均值。而XGB中的预测值是所有弱分类器上的叶子权重(预测分数)直接求和得到,计算叶子权重是一个复杂的过程。
TASK3 XGB算法梳理
其中:
TASK3 XGB算法梳理
继续化简:
TASK3 XGB算法梳理

2损失函数

TASK3 XGB算法梳理

3分裂结点算法

  1. 精确的贪心法,枚举所有分割点。当数据量十分庞大,以致于不能全部放入内存时,Exact Greedy 算法就会很慢。
  2. 针对精确贪心法的不足,引入了近似的算法。简单来说,就是根据特征k的分布来确定l个候选切分点Sk={sk1,sk2,…,skl},然后根据这些候选切分点把相应的样本放入对应的桶中,对每个桶中的G,H进行累加。最后在候选切分点集合上贪心查找。
  3. 加权分位法
  4. 稀疏自适应分割策略

4正则化

gboost在目标函数中使用了正则化惩罚项。gama越大,越希望获得结构简单的树,因为此时对较多叶子节点的树的惩罚越大;lambda越大也是越希望获得结构简单的树。
TASK3 XGB算法梳理
同时,xgboost也可以加入步长,可防止过拟合
TASK3 XGB算法梳理

5对缺失值处理

通常情况下,人为处理缺失值的时候大多会选用中位数、均值或二者的融合来对数值型特征进行填补,使用出现次数多的类别来填补缺失的类别特征。

6优缺点

优点:
(1)xgBoosting支持线性分类器,相当于引入L1和L2正则化项的逻辑回归(分类问题)和线性回归(回归问题);
(2)xgBoosting对代价函数做了二阶Talor展开,引入了一阶导数和二阶导数;
(3)当样本存在缺失值是,xgBoosting能自动学习分裂方向;
(4)xgBoosting借鉴RF的做法,支持列抽样,这样不仅能防止过拟合,还能降低计算;
(5)xgBoosting的代价函数引入正则化项,控制了模型的复杂度,正则化项包含全部叶子节点的个数,每个叶子节点输出的score的L2模的平方和。从贝叶斯方差角度考虑,正则项降低了模型的方差,防止模型过拟合;
(6)xgBoosting在每次迭代之后,为叶子结点分配学习速率,降低每棵树的权重,减少每棵树的影响,为后面提供更好的学习空间;
(7)xgBoosting工具支持并行,但并不是tree粒度上的,而是特征粒度,决策树最耗时的步骤是对特征的值排序,xgBoosting在迭代之前,先进行预排序,存为block结构,每次迭代,重复使用该结构,降低了模型的计算;block结构也为模型提供了并行可能,在进行结点的分裂时,计算每个特征的增益,选增益最大的特征进行下一步分裂,那么各个特征的增益可以开多线程进行;
(8)可并行的近似直方图算法,树结点在进行分裂时,需要计算每个节点的增益,若数据量较大,对所有节点的特征进行排序,遍历的得到最优分割点,这种贪心法异常耗时,这时引进近似直方图算法,用于生成高效的分割点,即用分裂后的某种值减去分裂前的某种值,获得增益,为了限制树的增长,引入阈值,当增益大于阈值时,进行分裂;

缺点:
(1)xgBoosting采用预排序,在迭代之前,对结点的特征做预排序,遍历选择最优分割点,数据量大时,贪心法耗时,LightGBM方法采用histogram算法,占用的内存低,数据分割的复杂度更低;
(2)xgBoosting采用level-wise生成决策树,同时分裂同一层的叶子,从而进行多线程优化,不容易过拟合,但很多叶子节点的分裂增益较低,没必要进行跟进一步的分裂,这就带来了不必要的开销;LightGBM采用深度优化,leaf-wise生长策略,每次从当前叶子中选择增益最大的结点进行分裂,循环迭代,但会生长出更深的决策树,产生过拟合,因此引入了一个阈值进行限制,防止过拟合.

相关文章:

  • 2021-12-19
  • 2021-06-12
  • 2021-12-22
  • 2021-10-07
  • 2022-01-17
猜你喜欢
  • 2021-11-11
  • 2022-01-08
相关资源
相似解决方案