赞
踩
如有出入,敬请斧正
XGBoost是一种强大的机器学习算法, 在Kaggle等算法比赛中, 一直都被誉为"刷分神器", 经常能有出彩的准确率表现, 甚至排行榜的前若干名都是XGBoost的刷屏. 包括在实际应用中, XGBoost也是一大热门, 在以腾讯为代表的各大公司的算法岗面试中, XGBoost, 特别是其与GBDT的相互对比, 一直是考察热点.
本文试图从决策树与集成学习的基本概念开始, 全面详实地介绍这个算法.
集成学习是一类机器学习方法的总称. 顾名思义, "集成", 也就是构建多个机器学习模型, 然后将其结合成一个, 达到"众人抬柴火焰高"的效果.
集成学习有三种方法:
XGBoost属于Boosting的学习方法, 对于其他方法的具体原理不再赘述, 主要讨论Boosting.
Boosting是一种串行的学习方法. 对于一组数据, 首先建立若干个学习器(模型), 这些学习器一般都采用比较简单的算法, 称为基学习器. 将这些基学习器排成一串, 先训练第一个基学习器, 根据这个学习器的学习结果对训练集进行调整, 加大学习器输出结果错误的样本的权重, 再去训练下一个基学习器, 以此类推, 直到训练完所有的基学习器. 最后给这些基学习器赋予不同的权重, 来执行分类、回归、排序等任务.
以上阐述的就是Boosting的基本工作过程. Boosting从偏差-方差分解的角度来看, 主要着重于降低偏差. 哪怕基学习器的性能相当弱, 只要强于随机猜想(可自行证明), 就能获得泛化性能很强的集成学习器.
Gradient Boosting 就是一种具体的Boosting集成方法. 前面所阐述的Boosting方法, 其实更应该说是一种思想, 它更贴近于AdaBoost的工作过程. 而Gradient Boosting的方法是, 每一次建立基学习器, 都是在前一个基学习器的损失函数的梯度下降方向. 这样做的好处之一, 就是可以和BP神经网络一样, 采用多种不同的可微分的损失函数, 来达到不同的效果或处理不同的任务.
在Gradient Boosting中, 每一次迭代训练, 都会基于之前训练的结果, 产生一个基学习器, 即
其中
每次迭代的目标是最小化损失函数
其中N为训练样本数. 沿着损失函数进行梯度下降, 有
对比关于
所以, 我们作梯度下降的方式, 就是用基学习器
简单说, 损失函数衡量了真实值与预测值之间的差异, 那么下一轮的基学习器通过拟合
最常用的损失函数是均方误差 (MSE) 函数, 也就是
对其求一阶导
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。