相关文章链接
机器学习——人工神经网络(NN)
机器学习——卷积神经网络(CNN)
机器学习——循环神经网络(RNN)
机器学习——长短期记忆(LSTM)
机器学习——决策树(decision tree)
机器学习——随机森林(Random forest)
机器学习——梯度提升决策树(GBDT)
一、XGBoost概述:
XGBoost:在训练出一棵树的基础上再训练下一棵树预测它与真是分布间的差距。通过不断训练用来弥补差距的树,最终用树的组合实现对真是分布的模拟。XGBoost本质上还是一个GBDT,但是力争把速度和效率发挥到极致,所以叫X (Extreme) GBoosted。
XGBoost与GBDT比较大的区别就是目标函数的定义。XGboost的目标函数包括损失函数和正则项两部分。
- 损失函数:代表模型拟合数据的程度。通常用其一阶导数指出梯度下降的方向,XGboost还计算了它的二阶导数,进一步考虑了梯度的变化趋势,拟合更快,精度更高。
- 正则项:用来控制模型的复杂程度。叶子结点越多,模型越大,不仅运算时间长,超过一定限度后还会过拟合,导致分类效果的下降。XGboost的正则项是一个惩罚机制,叶子结点的数量越多,惩罚力度越大,从而限制他们的数量。
XGboost的目标函数:
其中:
- 红色箭头所指向的L 即为损失函数(比如平方损失函数:
- 红色方框所框起来的是正则项(包括L1正则、L2正则)
- 红色圆圈所圈起来的为常数项
- 对于f(x),XGBoost利用泰勒展开三项,做一个近似。f(x)表示的是其中一颗回归树。
二、XGBoost核心思想
XGBoost的核心算法思想是:
- 不断的添加树,不断地进行特征分裂来生长一棵树,每次添加一棵树,其实是学习一个新函数f(x),去拟合上次预测的残差。
- 当我们训练完成得到k棵树,我们要预测一个样本的分数,其实就是根据这个样本的特征,在每棵树中会落到对应的一个叶子节点,每个叶子节点就对应一个分数。
- 最后只需要将每棵树对应的分数加起来就是该样本的预测值。
目标是要使得树群的预测值yi’尽量接近真实值yi,而且有尽量大的泛化能力。XGBoost也是需要将多棵树的得分累加得到最终的预测得分(每一次迭代,都在现有树的基础上,增加一棵树去拟合前面树的预测结果与真实值之间的残差)。
其中选取一个f来使我们的目标函数尽量最大地降低。这里f可以使用泰勒展开公式近似。
数学原理外XGBoost最大的改进是大幅提升了计算速度。数的构建中最耗时的部分是为确定最佳分裂点而进行的特征值排序。XGBoost在训练前会将特征值进行排序,存储为Block结构,此后重复使用这些结构,从而减少计算量。
三、树的生长与停止
树的生长:
XGBoost作者在其原始论文中给出了一种分裂节点的方法:枚举所有不同树结构的贪心法。不断的枚举不同树的结构,然后利用打分函数来寻找出一个最优结构的树,接着加入到模型中,不断重复这样的操作。寻找的过程使用的就是贪心算法。选择一个feature分裂,计算loss function最小值,然后再选一个feature分裂,又得到一个loss function最小值,枚举完,找到一个效果最好的,把树给分裂,就得到了小树苗。
XGBoost使用了和CART回归树一样的想法,利用贪心算法,遍历所有特征的所有特征划分点,不同的是使用的目标函数不一样。具体做法就是分裂后的目标函数值比单叶子节点的目标函数的增益,同时为了限制树的生长过深,还加了个阀值,只有当增益大于该阀值才进行分裂。从而继续分裂,形成一棵树,再形成一棵树,每次在上一次的预测基础上取最优进一步分裂/建树。
停止树的生长
设置树的最大深度,当样本权重和小于设定阀值时会停止生长防止过拟合。
- 当引入的分裂带来的增益小于设定阀值的时候,我们可以忽略掉这个分裂,所以并不是每一次分裂loss function整体都会增加的;
- 当树达到最大深度时则停止建立决策树,设置一个超参数max_depth,避免树太深导致学习局部样本,从而过拟合;
- 样本权重和小于设定阀值时则停止建树。
四、XGBoost的优缺点
优点:
- 善于捕捉复杂数据之间的依赖关系。
- 能从大规模数据集中获取有效模型。
- 在实用性上支持多种系统和语言。
缺点:
在高纬稀疏特征数据集和小规模数据集上的表现不是很好。
XGBoost和GBDT的不同:
- GBDT是机器学习算法,XGBoost是该算法的工程实现。
- 在使用CART作为基分类器时,XGBoost显式地加入了正则项来控制模型的复杂度,有利于防止过拟合,从而提高模型的泛化能力。
- GBDT在模型训练时只使用了代价函数的一阶导数信息,XGBoost对代价函数进行二阶泰勒展开,可以同时使用一阶和二阶导数。
- 传统的GBDT采用CART作为基分类器,XGBoost支持多种类型的基分类器,比如线性分类器。
- 传统的GBDT在每轮迭代时使用全部的数据,XGBoost采用了与随机森林相似的策略,支持对数据进行采样。
- 传统的GBDT没有设计对缺失值进行处理,XGBoost能够自动学习出缺失值的处理策略。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)