GBDT和Xgboost区别

GBDT:

GBDT 非线性变换比较多,表达能力强,不需要做复杂的特征工程和特征变换。

GBDT 是一个串行过程,不好并行化,计算复杂度高,不太适合高维稀疏特征;

传统 GBDT 在优化时只用到一阶导数信息。

Xgboost

1.正则项

 把树模型复杂度作为正则项加到优化目标中,惩罚树的叶子数和叶子分数,确保了基学习器”弱”。用以权衡目标函数的下降和模型的复杂程度,避免过拟合。

2. 二阶导

公式推导中用到了二阶导数,用了二阶泰勒展开。所以可以更快的收敛(GBDT 用牛顿法貌似也是二阶信息)

3.列抽样

支持列抽样column(feature) sampling来防止过拟合,也就是训练每棵树时,不是使用所有特征,而是从中抽取一部分来训练这棵树。借鉴了Random Forest的思想。

4.数据事先排序并且以 block 形式存储,有利于并行计算。

xgboost的并行是在特征计算的并行而不是决策树的并行。决策树学习最耗时的一个步骤就是对特征的值进行排序(确定最佳分割点),xgboost在训练之前,预先对特征进行了排序,然后保存为block结构,后面的迭代中重复地使用这个结构(在分布式环境下,可以进行分块存储),减小了计算量。这个block结构也使得并行成为了可能,在进行节点的分裂时,需要计算每个特征的增益,最终选增益最大的那个特征去做分裂,那么各个特征的增益计算就可以开多线程进行。

可并行的近似直方图算法。树节点在进行分裂时,我们需要计算每个特征的每个分割点对应的增益,即用贪心法枚举所有可能的分割点。当数据无法一次载入内存或者在分布式情况下,贪心算法效率就会变得很低,所以xgboost还提出了一种可并行的近似直方图算法,用于高效地生成候选的分割点。

5. 实现了基于特征值分位数的近似搜索算法,加速和减小内存消耗。(文思ppt)

决策树在训练时需要进行分叉,对于连续型特征,枚举所有可能分叉点将会十分耗时。

xgboost实现的基于特征值分位数的近似搜索算法首先根据训练集的某个特征的取值分布选取k个分位数,得到k+1个子区间,然后寻找最优分裂点的时候只搜索这里k个分位数点。xgboost在计算这k个分位点的时候是采用加权求分位数的方式,权重是各个样本点的二阶导数值。

对分位数的计算xgboost也有两种方式,global和local。Global:在训练出起,就找好每个特征得分位点,然后在后续的训练中,分位点不变。local:训练开始前找好每个特征得分位点,每次分枝,都会改变每个叶子姐点样本的分布,根据该分枝中所有的样本,重新计算每个特征的分位点。local比Global精度要高,所以在同等精度下,global需要在一起开分割的更细,也就是分位点更多。设定好global还是local后,通过计算每个样本在该特征得二阶导数作为权重来设置分位点。

6. 提供了处理缺失值的函数。

xgboost把缺失值当做稀疏矩阵来对待,本身的在节点分裂时不考虑的缺失值的数值。缺失值数据会被分到左子树和右子树分别计算损失,选择较优的那一个(比如将缺失该特征值的数据分到左子树时总体损失小于分到右子树,则我们就认为该数据属于左子树,也就是选少的损失)。然后较优的子树(左/右子树)就变成了该节点缺失值的默认方向。

如果训练中没有数据缺失,预测时出现了数据缺失,那么默认被分类到右子树。

7.

xgboost里面的基学习器除了用tree(gbtree),也可用线性分类器(gblinear),使用线性分类器时,xgboost相当于带L1和L2正则化项的logistic回归。

8 减少读写相关,提高Cache命中率

预排序的数据是按列(特征)存储的,但训练时并不总是按列读取和写回,在需要按行读写的时候,将需要的行预先收集到一块连续内存上,再进行计算。这样由于是连续内存地址,可以提高Cache命中率,从而提高了运算速度。

9  数据量大时,提高硬盘吞吐率

当数据量很大,不能整个装入内存时,需要将一部分数据放在硬盘里。硬盘读写速度慢,会严重影响计算效率。

XGBoost使用了两种方法提高吞吐率,一个是对存储的内容进行压缩,读取时再进行解压,这相当于在读取代价和解压代价之间做了一个权衡。另一个方法是在多块硬盘上存储数据,然后同时读写。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值