阅读xgboost的原论文《XGBoost:A Scalable Tree Boosting System》

一、xgboost的目标函数

这里写图片描述
在目标函数可以看出,xgboost的目标函数有两部分组成,第一部分是传统的GBDT的目标函数一样,用于测量当前生成的模型对训练数据的吻合度,不同的是在第二部分:xgboost显式地将模型的复杂度作为了目标函数的一部分。

二、xgboost中的梯度提升树

GBDT中的梯度提升树只利用的泰勒展开的一阶导数,而在xgboost中利用的泰勒展开的二阶展开:
泰勒展开的公式如下:
这里写图片描述
在第t次迭代中,在函数空间上添加f(t)函数,使得目标函数减少:
这里写图片描述
用泰勒展开近似上面的式子得到:
这里写图片描述
其中,gi和fi分别是损失函数对前一个函数空间的一阶导数和二阶导数。
移除常数项后可以得到:
这里写图片描述
定义在叶子结点j中的样例是:这里写图片描述,对上的目标函数进行展开,并且把正则项代入方程可以得到:
这里写图片描述
求每一个叶子结点的值,可以单独对wj求导数,令导数为零,可以得到:这里写图片描述
所以对于一个结构已经固定的数q,这棵树要优化的目标函数是使得下面的式子最大化(负号使得最小化变成了最大化):
这里写图片描述
要全部枚举完不同的树结构,计算量很大,所以采用贪心算法,从一个叶子迭代产生树的枝,在每一个结点枚举每一个特征的每一个特征值作为分割点,把树分为左右字数,把样本点按照枚举特征和枚举特征值分别划分到左右结点,计算:
这里写图片描述
枚举完成以后,选出使上面中的切分指标最大的那维特征和特征值作为树结点的切割点,算法如下:
这里写图片描述
同时,在xgboost中,除了使用正则项减少过拟合以外,还是用Shrinkage和随机森铃中的列采样来减少过拟合。

与GBDT的不同点:
在目标函数加入了正则项,进行泰勒展开的二阶展开,树结点的分裂方式不同,采用的是用目标函数推导出来的方程,计算分列前后哪个特征使左右结点的目标函数加和大于原来的结点;还有的话就是随机森林的列采样。

理解xgboost中的用于并行化计算的列快:
在树的学习过程中,最耗时间的是对数据的特征的排序,为减少排序的消耗,对数据进行排序后保存在一个叫block的结构中:
借用Yafei Zhang(tencent)的ppt上的图说明一下:
这里写图片描述
将特征I、II、III的特征排好序存入block后,得到:这里写图片描述
一个block中也可以同时多个特征排好序的结构,如下图:这里写图片描述
xgboost的并行化计算并不是指树上的并行化,和RF的并行化是不同的,xgboost的并行化表现在它的特征粒度上的。论文里举了exact greedy algorithm 的例子,在exact greedy algorithm中,是将整个特征集存储在一个单一的block中,只要对这一个block中每一个排好序的特征进行一次扫描搜索 此时可以同时对所有的 叶子结点得到下一步应该进行切分的点。即对block的一次扫描就可以得到当前叶子结点的切分候选集。
这种block结构也可以用来进行近似估计,如上面例子的截图那样,可以构建多个block,每个block只含有一个或多个特征,每个block可以单独分布在不同的机器进行,得到每个特征的候选切割点。

切分点的近似算法
切割点寻找用枚举每一个特征每一个特征值作为切割点会计算量很大,切割点近似算法的流程图如下:
这里写图片描述
总的来说就是:算法先根据数据分布的情况,给出每一个特征k的候选切割点{s1,s2…sk},所有的特征切分点只考虑这些候选的切割点。


外话
xgboost中时怎样计算特征重要性的:
官网的解释如下:

get_score(fmap=”, importance_type=’weight’)

Get feature importance of each feature. Importance type can be defined as:

    ‘weight’ - the number of times a feature is used to split the data across all trees. ‘gain’ - the average gain of the feature when it is used in trees ‘cover’ - the average coverage of the feature when it is used in trees

Parameters: fmap (str (optional)) – The name of feature map file

可见是有三种计算重要性的方法:
“weight”是计算特征被用来切割树结点的次数;
‘gain’是这个特征被用来切割树结点产生的平均增益;
‘cover’平均在每一棵树下被用来切割树节点的次数??

参考文章:
XGBoost:A Scalable Tree Boosting System

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值