说明:本文是阅读XGBoost有关的论文和一些博客后的入门笔记。有什么不足之处还望大家多多赐教,欢迎交流,转载。
一. 前言
- XGBoost是提升方法中的一个可扩展的机器学习系统。XGBoost在许多机器学习和数据挖掘问题中产生了广泛的影响。2015年发表在Kaggle竞赛的博客的29个冠军解决方案中,有17个是使用XGBoost解决的,其中有8个是仅使用了XGBoost方法去训练模型,剩余的是用XGBoost和其他模型相结合使用的。相比较而言,第二个受欢迎的方法是深度神经网络,有11个是使用该方法的。
- XGBoost成功的最重要因素就是它在任何场景下的可扩展性。XGBoost系统在单台机器上的运行速度比现有流行的解决方案快10倍以上,并可在分布式或内存限制设置中扩展到数十亿个示例。XGBoost的可扩展性是由于在它的系统实现中的一些创新,包括:
- 为处理稀疏数据使用了一个新颖的树学习算法;
- 理论上合理的加权分位数草图过程,使得能够在近似树学习中处理实例权重;
- 平行和分布式计算使得学习更快,从而能够更快的进行模型探索;
- 最重要的是XGBoost使用核外计算并且能够让数据科学家在台式机上处理数以亿计的示例;
- 更令人兴奋的是结合这些技术使端到端系统以最少的集群资源扩展到更大的数据。
- 为处理稀疏数据使用了一个新颖的树学习算法;
-
二. XGBoost原理
1. 学习目标
在讨论学习目标之前,先说一说XGBoost是如何预测输出值的。XGBoost是一个树集成模型,它使用的是K(树的总数为K)个树的每棵树对样本的预测值的和作为该样本在XGBoost系统中的预测,定义函数如下:
对于所给的数据集有n个样本,m个特征,定义为:
其中Xi表示第i个样本,yi表示第i个样本的类别标签。CART树的空间为F,如下:
其中q表示每棵树的结构映射每个样本到相应的叶节点的分数,即q表示树的模型,输入一个样本,根据模型将样本映射到叶节点输出预测的分数;Wq(x)表示树q的所有叶节点的分数组成集合;T是树q的叶节点数量。
所以,由(1)式可以看出,XGBoost的预测值为每棵树的预测值之和,即每棵树相应的叶节点的得分之和(Wi的和,Wi表示第i个叶节点的得分)。
我们的目标就是学习这样的K个树模型f(x).。为了学习模型f(x),我们定义下面的目标函数:
其中,(2)式右边第一项为损失函数项,即训练误差,是一个可微的凸函数(比如用于回归的均方误差和