白话梳理树模型——从决策树到lightGBM

2021-03-26  本文已影响0人  井底蛙蛙呱呱呱

本文仅为简单梳理树模型升级过程,尽量少牵扯到数学公式,用大白话来理解。

预备知识

熵,熵用来描述事件的不确定性,越随机熵值越大。

如何理解不确定性呢?假设现在有一个伯努利分布,p(0) = p(1) = 1/2,则这个分布的不确定性是最大的,因为我们抽样的时候完全无法确定抽样出来的那个数值的概率更大,两者都是1/2,所以不确定性在这里可以理解为某个事件发生的概率。我们再来看看熵值的公式:



对于一个伯努利其熵值为:
H(p) = -p(p)log(p) - (1-p)log(1-p)

为了验证我们上面提到的伯努利分布的某个事件发生概率为1/2时熵最大,将p=1/2代入上式得到的熵值与p=4/5时的熵值进行比较即可,可以得到
H(p=1/2) > H(p=4/5)。

当P等于4/5时,我们有很大的概率(80%)可以确定事件会发生,而p=1/2时,则完全无法确定事件是否会发生,因为发生不发生的概率相等,这就是事件发生的不确定性。也即熵值H(p=1/2) > H(p=4/5)可以得出p=4/5时,不确定性更小,能更方便的猜出事件是否会发生。

交叉熵
在深度学习中,最常见的loss函数即是交叉熵损失函数。我们从不确定性角度来理解交叉熵损失函数:我们训练模型的目标是要使得loss变小,即事件发生的不确定性变小,不确定性小就表示模型更能猜出正确类别了。

决策树

树模型作为一种简单易理解的方式,其训练过程即是通过简单if/else来将所有的样本划分到其对应的叶子中。

ID3决策树

ID3决策树使用信息增益来作为特征选择标准,每次选择信息增益最大的特征。需要注意的是ID3是一颗多叉树,因此他总是倾向于选择特征值更多的特征来进行分裂。如何理解呢?

一个极端的例子,假设我们以人的DNA为特征来对训练集中的人群进行分类,毫无疑问的,只需要这一个特征(每个样本一个特征值)且只要这一次分裂就可以将所有人分开,因为每个人的DNA是唯一的,因此每一个人都是一个叶子结点。但是这个时候如果我们想要预测测试集怎么办?测试集中的人群DNA在训练集中没出现过,因此模型无法对测试集进行正确预测。也就是发生了我们常常说的过拟合现象。

白话信息增益:信息增益可以理解为在得知了额外的信息后事件发生不确定性的减少量。譬如我们想知道明天是否会下雨,如果我们在一个黑房子里面则什么信息都收不到,但是当我们走出房门,发现天气闷热,蚂蚁搬家蛇过道这些额外信息(即特征)后我们就可以很大概率说明天会下雨了。同时我们也知道了特朗普竞选总统失败(特征),但是这个对于明天是否下雨是无关的,无法帮助我们确定明天是否会下雨,也即没有什么信息增益。

ID3小总结:

C4.5决策树

C4.5决策树针对ID3决策树偏好值多的缺点进行改进,引入了信息增益比来作为分裂标准。


C4.5相较于ID3的改进有:

C4.5树仍然使用的是多叉树,因此每个特征仅使用一次,在后续分裂中不再使用。且只能用于分类。

CART决策树

CART决策树相对于C4.5树进行了改进:

随机森林(Random Forest)

随机森林属于bagging算法,有两个随机过程:

预测时,分类问题投票,回归问题求平均。

优点:

梯度提升树(Gradient Boosting Decision Tree)

梯度提升树由多个回归决策树串联得到,因此建树时的分裂标准是均方误差和。

回归树如何解决分类问题?
以逻辑回归为例,逻辑回归其实也可以理解为广义线性回归函数来拟合对数几率。因此回归树也可以用类似的方法来进行分类。

梯度提升树的每个树都会拟合上棵树的拟合目标残差。

在梯度提升决策树中,还添加了shrinkage,这个是与adaboost的一个重大区别,相当于学习率,控制每棵树学习到更少的东西,使用更多的树来进行集成学习。

缺点:

XGBOOST

xgboost的相对于GBDT的一个非常重要的改进就是使用泰勒二阶展开来近似拟合残差,也即如下公式:

xgb原始loss
上面为xgb原始loss,其中后面一项为模型复杂度损失。使用泰勒二阶展开近似的过程如下:

上面的泰勒展开中,f(x)其实是上一棵树的结果(也即原loss中的yt-1),△x表示的是当前树要拟合的结果(也即原loss中的ft(x))。
因此,我们只需要求出每一步模型的一阶(gi)和二阶导数值(hi)并对目标函数最优化求解即可得到当前步最优的 ft(x)。

再加上模型复杂度的表示,可以得到最终loss:



这里我们简单说一下模型复杂度的组成,第一项 γT其实是控制的树的叶子节点不要太多(可以理解为参数不要太多,L1正则化),第二项其实是控制每个叶子结点的数值不要太大(可以理解为模型参数不要太大,L2正则化)。

上面几步看不明白的可以去https://zhuanlan.zhihu.com/p/87885678 看一步一步的推导过程。

可以看到,模型的优化目标其实仅与前一棵树一阶导(G)、二阶导(H)、lambda(可以理解为L2正则化系数)、γ(理解为L1正则化系数)有关系。对于决策树的每次分裂,我们的目标其实就是要使得上面的目标函数值更小,换句话说,上面的目标函数就是我们的分裂标准,这与前面所有的决策树的分裂方式都是完全不同的。

看看下面的图可能更好理解:



如何选择分裂特征?
稀疏感知算法

在分裂选择特征时,仅使用非缺失值来进行计算增益。而对于缺失结点的划分,则是将每个缺失样本分别放入到两个子节点中,哪个增益大就选择划分到哪个结点。

工程化优化

略。。。

优点:

LightGBM

更快,占用内存更小的GBM。

优化的点如下:

与xgb相比:

基于树模型的特征选择

树模型解释性较好,我们常常可以通过树模型来进行特征选择,留下重要特征。不同树模型特征重要性评估方法略有区别。

决策树、随机森林、GBDT

决策树随机森林GBDT的特征重要性评估方法相同都是根据不纯度减小(也即gini系数)来进行度量:

sklearn API
从上面可以看出,基于不纯度减小的评估方法容易受特征维度的影响(误导),某个特征维度越高(即含有的类别越多),这个特征的重要性常常会被认为比较重要。
XGBoost

xgboost的特征重要性评估方法更为多样,如下:


从上面看,主要分为三种:
LightGBM

lightGBM的特征评估方式如下:


如上,包括两种:

参考:
《统计学习方法》李航
【机器学习】决策树(下)——XGBoost、LightGBM(非常详细)
树模型(六):XGBoost (带手动建树实例,非常推荐)

上一篇 下一篇

猜你喜欢

热点阅读