XGBoost 简介

Boosting

是一种可以用来减小监督式学习中偏差的机器学习算法。一组“弱学习者”的集合能否生成一个“强学习者”?弱学习者一般是指一个分类器,它的结果只比随机分类好一点点;强学习者指分类器的结果非常接近真值。

GBDT

Gradient Boosting Decision Tree,全名叫梯度提升决策树,使用的是Boosting的思想。
gbdt通过多轮迭代,每轮迭代产生一个弱分类器,每个分类器在上一轮分类器的残差基础上进行训练。对弱分类器的要求一般是足够简单,并且是低方差和高偏差的。因为训练的过程是通过降低偏差来不断提高最终分类器的精度。
通过采用加法模型(即基函数的线性组合),以及不断减小训练过程产生的残差来达到将数据分类或者回归的算法;
优点:

  1. 预测阶段的计算速度快,树与树之间可并行化计算。
  2. 在分布稠密的数据集上,泛化能力和表达能力都很好,这使得GBDT在Kaggle的众多竞赛中,经常名列榜首。
  3. 采用决策树作为弱分类器使得GBDT模型具有较好的解释性和鲁棒性,能够自动发现特征间的高阶关系。

局限性:

  1. GBDT在高维稀疏的数据集上,表现不如支持向量机或者神经网络。
  2. GBDT在处理文本分类特征问题上,相对其他模型的优势不如它在处理数值特征时明显。
  3. 训练过程需要串行训练,只能在决策树内部采用一些局部并行的手段提高训练速度。

GBDT通过多轮迭代,每轮迭代产生一个弱分类器,每个分类器在上一轮分类器的残差基础上进行训练。对弱分类器的要求一般是足够简单,并且是低方差和高偏差的。因为训练的过程是通过降低偏差来不断提高最终分类器的精度。

XGBoost

XGBoost本质上还是一个GBDT,但是力争把速度和效率发挥到极致,所以叫X (Extreme) GBoosted。两者都是boosting方法。
问题1:预测一家人对电子游戏的喜好程度
在这里插入图片描述
就这样,训练出了2棵树tree1和tree2,类似之前gbdt的原理,两棵树的结论累加起来便是最终的结论,所以小孩的预测分数就是两棵树中小孩所落到的结点的分数相加:2 + 0.9 = 2.9。爷爷的预测分数同理:-1 + (-0.9)= -1.9。
XGBoost的核心算法思想:

  1. 不断地添加树,不断地进行特征分裂来生长一棵树,每次添加一个树,其实是学习一个新函数f(x),去拟合上次预测的残差。
  2. 当我们训练完成得到k棵树,我们要预测一个样本的分数,其实就是根据这个样本的特征,在每棵树中会落到对应的一个叶子节点,每个叶子节点就对应一个分数。
  3. 最后只需要将每棵树对应的分数加起来就是该样本的预测值。

个人理解:

  1. 每一个预测Tree都是对一些特征进行判断,也就是一个独立的预测方法f(x);
  2. 我们可能有很多影响分类的特征,特征在Tree ->
    f(x)下都会算出一个类似(预测值 * 权值)的东西,树上的每个叶子权值不同,因为不是每个特征对最终预测结果的权重都是相同的;
  3. 之所以说是在上一个模型的残差基础上进行训练其实描述的就是这个累加的过程,大家综合综合产出的预测成果以降低偏差,所以XGBoost应该是有点“三个臭皮匠顶个诸葛亮”的意思,然后从宏观上来看,三个臭皮匠(Tree)其实产出了一个诸葛亮(最终模型)

机器学习算法GBDT:https://www.cnblogs.com/bnuvincent/p/9693190.html
终于有人说清楚了–XGBoost算法:https://juejin.im/post/5d2590e1e51d45106b15ffaa
史上最详细的XGBoost实战:https://zhuanlan.zhihu.com/p/31182879
手把手教写出XGBoost实战程序:https://juejin.im/post/5a1bb29e51882531ba10aa49

XGBoost官方文档:https://xgboost.readthedocs.io/en/latest/index.html XGBoost中文文档地址:http://xgboost.apachecn.org/cn/latest/ 床长人工智能教程:https://www.captainbed.net/