XGBoost—彻底通透了

基于XGBoost用Logloss做损失函数时的叶子节点权重和预测值问题-CSDN博客,好好梳理一遍XGBoost,争取通透。

XGBoost 原文:https://arxiv.org/pdf/1603.02754.pdf

一、XGBoost的原理

1、加法模型

f_{K}\left (x_{i} \right )第i个样本在第K颗树中落到的叶子节点的权重,这在原文中说的比较楚:

那么\hat{y}_{i}就是第i个样本在前K颗树中落到的叶子节点的权重之和。

2、目标函数

学习的目标是要最小化目标函数。第一个公式右边的前半部分是损失函数,后半部分是正则项。正则项是叶子节点数量和权重的函数,可以防止过拟合。

损失函数里第一个参数\hat{y}_{i}已经明确是第i个样本在前K颗树中落到的叶子节点的权重之和,第二个参数y_{i}是第i个样本的真实值。

这里就需要注意了,理解XGBoost其中的一个关键环节就在这:叶子节点的权重之和和样本的真实值是什么关系?在预测对象是连续型(回归问题)的时候,权重之和貌似可以直接看作是样本的预测值,但在预测对象是离散型(分类问题)的时候,y_{i}是样本的真实值(0或1),权重之和\hat{y}_{i}是不可以直接作为样本的预测概率值的,需要转换。怎么转换呢,在\hat{y}_{i}外面加一个sigmod函数即可(扩展一下来说,遇到其他分布,用广义线性回归中的激活函数做转换,保证损失函数是n阶可导的,就可以用XGBoost。再退一步,不管怎么转换,只要损失函数是n阶可导的,就可以用XGBoost)。

以logloss为损失函数为例,将\hat{y}_{i}加sigmod函数后得到预测概率值,再代入到logloss(分类问题的损失函数)中,得到以\hat{y}_{i}为自变量的损失函数如下:

(详细推导参考XGBoost用Logloss做损失函数时的叶子节点权重和预测值问题-CSDN博客

上式中\hat{y}_{i}是第i个样本的叶子节点的权重之和,y_{i}是第i个样本的真实值(0或1)。

3、梯度提升

将加法模型代入到目标函数得到如下公式:

下面我们的目标是:在已知前t-1颗树的情况下,找出第t棵树的最优解f_{K}\left (x_{i} \right ),使得目标函数向最小的方向发展。

4、泰勒展开

一顿操作猛虎如(泰勒展开、去掉高阶项、合并正则项),目标函数结果如下:

其中:

gi、hi分别是在损失函数在处的1、2阶导数。

特别的,在logloss作为损失函数时:

 是前t-1颗树的预测值(概率,权重之和加sigmod),可见gi和hi只与样本真实值和前面树的预测值有关。加sigmod函数后对其求导的结果依然是这么简洁,是不是很爽。

假设树固定,即叶子节点内的样本固定,则各叶子节点的Gj和Hj也就固定了,T也固定了,那么目标函数就是关于wj的一元二次函数。由于各个叶子节点的权重取值是独立的,所以每个叶子节点都可以独立找最优解。

第一个式子是第j个叶子节点的最优权重值,第二个式子是所有叶子节点整体的最小目标函数值。

那如果树不固定呢?逐个变量遍历分裂点,找到最好的。

5、增益分裂

分裂,就靠上面这个式子。Gain是分裂前的最小目标函数值,减去分裂后的最小目标函数值的差值(1、注意最小目标函数值前面的负号;2.外面多一个γ,是因为分裂多了一个叶子节点嘛。也能看出来他的正则化作用)。分裂的目标是要Gain越大越好。

然后就是遍历所有特征和特征值,找到增益最大的分裂。

总结起来说,XGB的大体运行流程就是:

(1)生成第一棵树时,初始化\hat{y}_{i}^{0}并计算损失函数在\hat{y}_{i}^{0}的1、2阶导数:gi,hi;

(2)假设前面已经生成了t-1颗树,计算损失函数在处的1、2阶导数,用以更新gi,hi;

(3)在一棵树内,利用计算好的gi,hi,逐个特征、逐个分裂点进行二叉分裂,根据增益Gain以及停止条件判断是否停止分裂。

从(3)也可以判断,XGB是启发式地搜索局部最优解,而不是全局最优解。

二、XGBboost参数

在了解了XGBboost的运行原理后,再来看XGBboost参数,就更通透了。我把参数分了下面几个类别,毕竟分类容易理解和记忆嘛。

1、学习目标。objective(binary:logistic,reg:logistic,multi:softmax,reg:linear),损失函数(rmse,logloss,auc)

2、树。包括树的类型(gbtree和dart),树的数量、树的深度等

3、增益。包括Gain公式中的λ和γ。

4、学习率。这是机器学习模型常用的参数,用来控制参数向最小值方向前进的步长(过小效率太低;过大容易越过去,导致来回跳,所有有一些高级的动量法之类的)。计算完最优分裂后,叶子节点的权重要乘以学习率。

5、其他的如采样设置(随机采样)、样本均衡设置(以正负样本均衡为目的的随机采样)

6、min_child_weight,这个是用来限制单个叶子节点的权重和的,不能小于这个参数,否则就停止分裂,和正则的作用差不多。

三、LightGBM的优化

LightGBM在XGBoost的基础上,在分裂的阶段做了许多优化,节省了内存,减少了计算量,也对并行计算进行了一些优化。联邦学习框架FATE中的Secureboost就做了类似的优化。

网上关于LightGBM介绍的文章也较多,这里就不赘述了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值