3.提升之XGBoost+lightgbm

1.XGBoost的简述

引出XGBoost:

xgboost是针对gbdt进行了改进,核心思想利用二阶导来代替一阶导,来拟合残差。

ps:这个二阶展开的好处就是迭代的更快了,处理了一阶导的不足因为一阶导只是在斜率方向下降最快,他不一定就是最快的。也有缺点损失函数必须为二阶可导

xgboost的构建过程:

首先:它是按层进行分裂的,意思就是每次分裂,都会作用当前层的每一个节点(构建的是一颗完全二叉树);

ps:基于深度优先进行构建。

精确分裂:对每一个特征的每一个切分点,选出最优的特征和切分点来进行分裂节点。

ps:在连续型特征取值特别多的情况下,非常耗时。

(全局)近似分裂:初始化树的时候,直接对所有样本离散化对每一维特征进行分桶,然后就利用这些桶去建树!(效果不太好)

(局部)近似分裂:建树的时候对每一个分裂节点来说,只对此节点内的样本进行分桶,然后来选取最好的分位点!(效果近似精确分裂)

近似分裂(Weighted Quantile Sketch—分布式加权直方图算法 :使用了按权重的分位点算法(基于特征大小排序,然后根据二阶导划分(均分)),一般的分位点是基于样本数量进行均分这样显然不合适,我们是需要对loss进行均分,然后就通过对样本二阶导值进行分位来使每个桶的样本loss均匀。

缺失值的处理:训练的时候会进行把所有缺失值样本捆绑起来放入左右子树看哪个最优;测试的时候是直接默认放入右子树的。

推文!https://www.jianshu.com/p/22b82127644a

2.XGBoost的目标(损失)函数

损失函数:

i~n代表样本数,第一项yi代表实际值,第二项代表前t-1个分类器的预测值加上第t个分类器的预测值

自带的惩罚项:

第一项是模型的复杂度,叶子节点越多说明模型复杂度越大惩罚越大;第二项是L2正则嘛,来降低特征的作用。

核心思想二阶泰勒展开:

设误差函数的一阶导和二阶导:

目标函数变换:

 

3.XGBoost处理过拟合

除了自带惩罚项以外,还提供了衰减因子和行列采样来降低过拟合。

ps:惩罚项包括模型的复杂度和L1或者L2正则项。

衰减因子:就类似于一个学习率,减少学习能力增强泛化能力。

列采样:其实就是对特征进行采样。一种是按层随机(效果好点),一种是在建树前就随机挑选好。

行采样:显然就是bagging的思想,通过降低模型的方差来减少过拟合。

4.XGBoost与GBDT

gbdt和xgboost都默认以CART树为基分类器,但是xgboost还支持线性分类器,类似于线性回归/逻辑回归。

xgboost利用了二阶导信息,且支持自定义损失函数只要一阶,二阶可导。

xgboost自带正则化项,而gbdt没有。

xgboost使用了预排序在特征选取和切分点选取上实现了并行化,而且使用了c++/c来实现的,而gbdt没有实现。

xgboost使用了近似分裂的加权分位数算法来加快精确分裂的穷举法的耗时。

5.XGBoost与lightgbm

引出lightgbm:

主要通过对xgboost时间和空间上进行优化。

ps:样本采样,特征融合,构建树的策略优化,直方图的优化。

具体的优化:

lightgbm通过减少特征量和数据量在基本不影响精度的条件下来进行加速和缓解内存消耗。

ps:通过对xgboost的优化引出了lightgbm。

减少样本数:通过对二阶导loss大的挑选出来,然后对loss小的样本进行采样b次来实现减少数据量。

ps:样本采样。

减少特征量:是想将一些独立(特征取值交集很少)的特征绑在一块构建出一个新的特征来(通过加偏置量来实现),这样可以大大减少特征量来加快学习速度。

ps:独立特征组合。

lightgbm通过改变构建树的策略,基于节点来构建树,而不是基于层来构建,针对xgboost来说去掉了很多增益很小的分裂

ps:从xgboost的bfs转变为了变形的dfs策略。

lightgbm在寻找最优切分点和xgboost的加权直方图算法不同,lightgbm使用了直方图但是没有进行排序只进行分位点的分割牺牲了少量的精度而xgboost是先进行排序在进行分位点分割,lightgbm还引入了直方图做差,每次计算数据量小的loss,对于数据量大节点的loss通过父节点的loss相减来得到。

lightgbm并行化:特征并行(特征多,数据少;每个work缓存全量数据),数据并行(数据多,特征少;每个work计算局部直方图在进行合并),投票并行(数据特征度都很多;是对数据并行的一个优化,投票选取前top直方图进行合并),而xgboost的并行只集中在特征并行上。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值