机器学习基础篇(一)---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 假设空间
2.1 目标函数
3、模型训练过程
XGBoost模型的基本优化方法是贪心法,逐颗树进行学习,每棵树拟合之前树的偏差。XGBoost采用二叉树,初始时所有样本都在一个节点上,然后该节点不断进行二分裂,逐渐形成一棵树。
XGBOOST采用LEVELWISE的生成策略,即每次对同一层级的全部叶子节点尝试进行分裂。对叶子节点分裂生成树的过程中有几个问题:是否要进行分裂?选择哪个特征进行分裂?在特征的什么点上进行分裂?以及分裂后新的叶子节点的取值?
3.1 是否要进行分裂
根据树的不同剪枝策略,这个问题有两种处理方法。如果是预剪枝策略,那么只有在存在某种分裂方式使得分裂后目标函数下降,才会进行分裂。
但如果是后剪枝策略,则会无条件进行分裂,等树生成完成后,再从上而下检查树的各个分支是否对目标函数下降产生正面作业,从而进行剪枝。
XGBoost采用预剪枝策略,只有分裂后的增益大于0才会进行分裂。
3.2 选择什么特征进行分裂
XGBoost采用特征并行的方法计算要分裂的特征,即用多个线程把每个特征都作为分裂的特征,找到各个特征的最优分割点,计算他们分裂后产生的增益,选择增益最大的那个特征作为分裂的特征
3.3 选择什么分裂点位
XGBoost选择某个特征的分裂点位方法有两个,一个是全局扫描法,一个是候选分为点法。
全局扫描法将所有样本在该特征下的取值按从小至大排列,将所有可能的分裂位置都试一遍,找到其中增益最大的那个分裂点,其计算复杂度与叶子节点上样本特征的取值个数成正比。
另一种就是候选分位点法,这是一种近似算法,仅选择常数个(例如256)候选分裂位置,从这些分裂位置中找出最优的那个。
浙公网安备 33010602011771号