机器学习基础篇(一)---XGBoost的基本原理

XGBoost是一种集成学习算法,属于三类常用的集成方法(bagging、boosting、stacking)中的boosting类别。它是一个加法模型,基模型一般选择树模型,但也可以选择其它类型的模型如逻辑回归等。

XGBoost属于梯度提升树(GBDT)模型这个范畴,GBDT的基本想法是让新的基模型(GBDT以CART分类回归树为基模型)去拟合前面模型的偏差,从而不断将加法模型的偏差降低。

1、对比模型

1.1 GBDT模型

相比于经典的GBDT,XGBoost做了一些改进,从而在效果和性能上有明显的提升。

  • GBDT将目标函数泰勒展开到一阶,而XGBoost将目标函数展开到了二阶。保留了更多目标函数的信息,对提升效果有帮助。
  • GBDT是给新的基模型寻找新的拟合标签,而XGBoost是给新的基模型寻找新的目标函数。
  • XGBoost加入了叶子权重的L2正则化项,因而有利于模型获得更低的方差。
  • XGBoost增加了自动处理缺失值特征的策略,通过把带缺失值样本分别划分到左子树或右子树,比较两种方案下目标函数的优劣,从而自动对有缺失的样本进行划分,无需对缺失特征进行填充处理。

 

2、XGBoost的原理

2.1 假设空间

\[\hat y=F[x]=\sum_{t=1}^kf_t[x] \]

2.1 目标函数

\[J(F)=L[F]+\Omega[F](损失项加正则项) \]

\[J(F)=\sum_{i=1}^nL[y^{(i)},\hat y^{(i)}]+\sum_{t=1}^k\Omega[f_t](L是一棵树的损失函数) \]

\[\Omega[f_t]=\mu T+\frac{1}{2} \lambda\sum_{j=1}^Tw_j^2 \]

\[(T是树的叶子节点数量,w_j是每个叶子节点的权重),\mu和\lambda用来调节节点数量和节点权重的比例 \]

3、模型训练过程

XGBoost模型的基本优化方法是贪心法,逐颗树进行学习,每棵树拟合之前树的偏差。XGBoost采用二叉树,初始时所有样本都在一个节点上,然后该节点不断进行二分裂,逐渐形成一棵树。

XGBOOST采用LEVELWISE的生成策略,即每次对同一层级的全部叶子节点尝试进行分裂。对叶子节点分裂生成树的过程中有几个问题:是否要进行分裂?选择哪个特征进行分裂?在特征的什么点上进行分裂?以及分裂后新的叶子节点的取值?

3.1 是否要进行分裂

根据树的不同剪枝策略,这个问题有两种处理方法。如果是预剪枝策略,那么只有在存在某种分裂方式使得分裂后目标函数下降,才会进行分裂。

但如果是后剪枝策略,则会无条件进行分裂,等树生成完成后,再从上而下检查树的各个分支是否对目标函数下降产生正面作业,从而进行剪枝。

XGBoost采用预剪枝策略,只有分裂后的增益大于0才会进行分裂。

3.2 选择什么特征进行分裂

XGBoost采用特征并行的方法计算要分裂的特征,即用多个线程把每个特征都作为分裂的特征,找到各个特征的最优分割点,计算他们分裂后产生的增益,选择增益最大的那个特征作为分裂的特征

3.3 选择什么分裂点位

XGBoost选择某个特征的分裂点位方法有两个,一个是全局扫描法,一个是候选分为点法。

全局扫描法将所有样本在该特征下的取值按从小至大排列,将所有可能的分裂位置都试一遍,找到其中增益最大的那个分裂点,其计算复杂度与叶子节点上样本特征的取值个数成正比。

另一种就是候选分位点法,这是一种近似算法,仅选择常数个(例如256)候选分裂位置,从这些分裂位置中找出最优的那个。

posted @ 2022-11-13 21:32  宽扁担  阅读(426)  评论(0)    收藏  举报