赞
踩
看了好几次XGBoost的文章,感觉总是过目就忘,以下对学习过的链接进行总结。平平无奇的搬运工。
XGBoost是高效地实现了GBDT算法并进行了算法和工程上的许多改进。XGBoost本质上还是一个GBDT,但是力争把速度和效率发挥到极致,所以叫X (Extreme) GBoosted,所以XGBoost也是boosting方法。XGBoost是一个优化的分布式梯度增强库,旨在实现高效,灵活和便携。 XGBoost提供了并行树提升(也称为GBDT,GBM),可以快速准确地解决许多数据科学问题。相同的代码在主要的分布式环境(Hadoop,SGE,MPI)上运行。Xgboost以CART决策树为子模型,通过Gradient Tree Boosting实现多棵CART树的集成学习,得到最终模型。
那么CART树是什么?
答:分类回归树(CART,Classification And Regression Tree)是用于分类树与回归树的总称,由Breiman等人首先提出。
那么分类树和回归树又是什么?
答:
分类树就有很多的指标来判断分支点的效果好不好,如信息增益、信息增益率、基尼系数。那么回归树呢用什么判断呢?
答:预测误差用:均方误差、对数误差
类似gbdt的原理,多棵树的结论累加起来便是最终的结论。到这不就和GBDT一样了吗。但XGBoost的目标函数是
XGBoost核心思想:不断地添加树,不断地进行特征分裂来生长一棵树,每次添加一个树,其实是学习一个新函数,去拟合上次预测的残差。最后根据样本的特征落在每棵树的叶子结点对应的分数相加,就是样本的预测值。
其中,
w
q
(
x
)
w_{q(x)}
wq(x)是叶子结点的分数,
F
F
F是所有K棵回归树的结合,
f
(
x
)
f(x)
f(x)是某一棵回归树。
目标:树的预测值
y
i
^
\hat{y_i}
yi^尽可能接近真实值
y
i
y_i
yi,且泛化好。数学角度看这是泛函最优化问题 ,所以可简化为:
什么是泛函最优化问题?
后面的讲解,我是看July的这篇,看了之后有点模模糊糊(个人原因)。
补充阅读:小雨姑娘:hi可以看做计算残差时某个样本的重要性。
在模模糊糊的基础上看了萌弟的这篇公式推导,就更清楚了一点。
XGBoost关键在于:
精确贪心分裂算法:
XGBoost在生成新树的过程中,最基本的操作是节点分裂。节点分裂中最重 要的环节是找到最优特征及最优切分点, 然后将叶子节点按照最优特征和最优切 分点进行分裂。选取最优特征和最优切分点的一种思路如下:首先找到所有的候 选特征及所有的候选切分点, 一一求得其
L
split
\mathcal{L}_{\text {split }}
Lsplit , 然后选择
L
s
p
l
i
t
\mathcal{L}_{\mathrm{split}}
Lsplit 最大的特征及 对应切分点作为最优特征和最优切分点。我们称此种方法为精确贪心算法。该算法是一种启发式算法, 因为在节点分裂时只选择当前最优的分裂策略, 而非全局最优的分裂策略。精确贪心算法的计算过程如下所示:
基于直方图的近似算法:
精确贪心算法在选择最优特征和最优切分点时是一种十分有效的方法。它计算了所有特征、所有切分点的收益, 并从中选择了最优的, 从而保证模型能比较好地拟合了训练数据。但是当数据不能完全加载到内存时,精确贪心算法会变得 非常低效,算法在计算过程中需要不断在内存与磁盘之间进行数据交换,这是个非常耗时的过程, 并且在分布式环境中面临同样的问题。为了能够更高效地选 择最优特征及切分点, XGBoost提出一种近似算法来解决该问题。 基于直方图的近似算法的主要思想是:对某一特征寻找最优切分点时,首先对该特征的所有切分点按分位数 (如百分位) 分桶, 得到一个候选切分点集。特征的每一个切分点都可以分到对应的分桶; 然后,对每个桶计算特征统计G和H得到直方图, G为该桶内所有样本一阶特征统计g之和, H为该桶内所有样本二阶特征统计h之和; 最后,选择所有候选特征及候选切分点中对应桶的特征统计收益最大的作为最优特征及最优切分点。基于直方图的近似算法的计算过程如下所示:
类似精确贪心算法,依据梯度统计找到最大增益的候选切分点。
下面用一个例子说明基于直方图的近似算法:
假设有一个年龄特征,其特征的取值为18、19、21、31、36、37、55、57,我们需要使用近似算法找到年龄这个特征的最佳分裂点:
近似算法实现了两种候选切分点的构建策略:全局策略和本地策略。全局策略是在树构建的初始阶段对每一个特征确定一个候选切分点的集合, 并在该树每一层的节点分裂中均采用此集合计算收益, 整个过程候选切分点集合不改变。本地策略则是在每一次节点分裂时均重新确定候选切分点。全局策略需要更细的分桶才能达到本地策略的精确度, 但全局策略在选取候选切分点集合时比本地策略更简单。
在XGBoost系统中, 用户可以根据需求自由选择使用精确贪心算法、近似算法全局策略、近似算法本地策略, 算法均可通过参数进行配置。
XGBoost的参数设置(括号内的名称为sklearn接口对应的参数名字):
推荐博客:https://link.zhihu.com/?target=https%3A//blog.csdn.net/luanpeng825485697/article/details/79907149
推荐官方文档:https://link.zhihu.com/?target=https%3A//xgboost.readthedocs.io/en/latest/parameter.html
XGBoost的参数分为三种:
通用参数:(两种类型的booster,因为tree的性能比线性回归好得多,因此我们很少用线性回归。)
任务参数(这个参数用来控制理想的优化目标和每一步结果的度量方法。)
命令行参数(这里不说了,因为很少用命令行控制台版本)
萌弟的这篇有使用方法和调参教学
还是得自己看论文和源码,现在我还是有点过目就忘。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。