机器学习-XGBoost
XGBoost 是一种 Boosting 方法,而 Boosting 方法又是集成学习的一个分支,先简单介绍下Boosting的概念。
Boosting 是一个机器学习技术,可以用于回归和分类问题,它每一步产生一个弱预测模型(准确了率不高),并加权累积到总模型中。采用集成学习方法,其主要思想是将弱分类器组装成一个强分类器。在 PAC(概率近似正确)学习框架下,则一定可以将弱分类器组装成一个强分类器。
图一 Boosting方法示意图
- GBDT,Gradient Boosting Decision Trees)
如果每一步的弱预测模型生成都是移库函数损失的梯度方向,则称之为梯度提升(Gradient Boosting)。梯度提升算法首先给定一个目标损失函数,它的定义域是所有可行的弱函数集合(基函数)。提升算法通过迭代选择一个负梯度方向上的基函数来逐渐逼近局部极小值。对分类问题,决策树是二叉分类树,对回归问题决策树是二叉回归树。提升树模型可以表示为决策树的加法模型:
其中 ,
为包含所有回归树的函数空间。因此,我们可以这样认为:回归树是一个将实例的特征向量映射为一个分值的函数。通过经验风险极小化确定下一刻决策树参数
梯度提升使用损失函数的负梯度作为回归问题提升树算法中的残差近似值,拟合一个回归树:
提升树算法步骤:
2. XGBoost 原理详解
XGBoost 是对GBDT的改进,传统 GBDT 算法的目标函数只有损失函数这一项,而 XGBoost 在此基础上进行了改进,增加了正则项以防止模型过度复杂:
如果对上式子对进行二阶泰勒展开:
因此可以得出有:
而上式中的正则项的形式为:
因此可以表示为:
如果对叶子节点做如下定义:
,
则有:
对于一元二次函数,有如下两条结论:
因此对于目标函数进行最小化,当时我们得到:
刚才所有的过程如下:
于一个叶子节点,如何进行分裂我们需要遵循的原则是分裂后的两颗子树的最优目标函数值之和要小于未分裂之前的父节点,为了叙述方便我们定义如下的目标函数值的 “增益” :
关于XGBoost的代码实例:
http://xgboost.readthedocs.io/en/latest/build.html
https://github.com/dmlc/xgboost/tree/master/demo/guide-python