XGBoost算法
1 XGBoost简介
XGBoost的全称是eXtreme Gradient Boosting,它是经过优化的分布式梯度提升库,旨在高效、灵活且可移植。XGBoost是大规模并行boosting tree的工具,它是目前最快最好的开源boosting tree工具包,比常见的工具包快10倍以上。在数据科学方面,有大量的Kaggle选手选用XGBoost进行数据挖掘比赛,是各大数据科学比赛的必杀武器;在工业界大规模数据方面,XGBoost的分布式版本有广泛的可移植性,支持在Kubernetes、Hadoop、SGE、MPI、 Dask等各个分布式环境上运行,使得它可以很好地解决工业界大规模数据的问题
2 XGBoost的目标函数
2.1 学习第t棵树
XGBoost和GBDT两者都是boosting方法,除了工程实现、解决问题上的一些差异外,最大的不同就是目标函数的定义
XGBoost是由
式中,
2.2 XGBoost的目标函数
损失函数可由预测值
式中,
式中,
由于XGBoost是boosting族中的算法,所以遵从前向分步加法,以第
式中,
式中,只有第
2.3 泰勒公式展开
泰勒公式是将一个在
其中的多项式称为函数在
根据泰勒公式,把函数
在XGBoost的目标函数中,
式中,
以平方损失函数为例:
分别对
将上述的二阶展开式,带入到XGBoost的目标函数中,可以得到目标函数的近似值:
由于在
所以我们只需要求出每一步损失函数的一阶导和二阶导的值(由于前一步的
2.4 定义一棵树
XGBoost的基模型不仅支持决策树,还支持线性模型,本文我们主要介绍基于决策树的目标函数。我们可以重新定义一棵决策树,其包括两个部分:
- 叶子结点的权重向量
- 实例(样本)到叶子结点的映射关系
(本质是树的分支结构)
将决策树定义为:
-
是长度为的一维向量,代表树各叶子结点的权重
-
为一棵树的结构,将输入映射到某个叶子结点,假设这棵树有个叶子结点
2.5 定义树的复杂度
决策树的复杂度