深入理解决策树

329 阅读9分钟

目录:

  1. 导言
  2. 信息增益
  3. 决策树的分类
    3.1 ID3决策树
    3.2 C4.5决策树
    3.3 CART决策树
  4. 决策树剪枝算法
    4.1 悲观剪枝法
    4.2 错误率剪枝法
    4.3 代价复杂度剪枝法
  5. 基于决策树的集成学习算法
    5.1 GBDT算法
    5.2 XGBOOST算法
    5.3 LightGBM算法
    5.4 CATBOOST算法
本文思维导图
本文思维导图

1、导言

决策树是机器学习中一种基本的分类与回归算法,也是构成很多集成算法的基础。决策树是基于树的结构来进行判别的,当然也可以认为它本质上是if-then规则的集合。
假设我们要判断一个瓜是否为好瓜。对于这样的问题,人们一般的整个决策过程可以用下图来表示。

决策树决策流程图
决策树决策流程图

一般情况下,一个完整的决策树包含一个根结点、n个内部结点和m个叶子结点。显然,叶子结点对应的就是我们想要的决策结果,剩余的结点对应的都是一个属性判断,每个结点包含的样本集合通过该属性判断,将其划分到下面的子结点上,然后不停地递归生成子结点。整个学习过程如下图所示:

决策树基本学习算法
决策树基本学习算法

对于一个基本的决策树的递归生成过程中,有三种情况会导致递归返回:

  1. 当前结点包含的样本属于同一个类别,无需再划分。
  2. 当前的属性集为空,或者当前样本集在所有属性上取值都一样,无法划分。
  3. 当前结点包含的样本集为空,不能再划分。

2. 信息熵

决策树的学习过程的关键在于第8步,即如何选择最优的划分属性,我们的目标是随着学习不断地进行,决策树的子节点所包含的样本“纯度”尽可能高。这里就要介绍一下信息熵和信息增益的概念:
信息熵能很直观地反应样本的“纯度”。
在信息论中,熵(entropy)是衡量随机变量不确定性的一个指标。假设当前样本集合D中,第类样本所占的比例为,那么的信息熵可以表示为

不难看出,的值越小,样本集的纯度越高。
信息增益能很直观地反映出某个属性对结点样本划分所起到的贡献。
假设对于某个离散属性,它有个可能的取值{},对于使用属性作为划分依据的样本集,经过划分会产生个分支,其中,样本集中该属性值为的样本全都被划分至第个结点,极为;根据信息熵计算公式,对于每个子结点都能计算出的信息熵,再将每个结点的样本数作为权重,对所有子结点的信息熵求加权平均值,便可计算出利用属性划分样本集所得到的信息增益:

所以信息增益越大,说明此次分裂所获得的“纯度提升”越大。ID3决策树便是采用信息增益作为划分依据。
信息增益比
实际上,信息增益也有它的局限性:取值可能性越多的属性越可能获得更高的信息增益,但这类属性并不一定是我们真正想要的。C4.5决策树则是使用信息增益比作为划分依据,其定义为
,其中定义为:
,称为的固有值,会随着属性的可能取值数量增加而增大。
需要注意的是,C4.5决策树分裂时并不是直接使用信息增益比作为依据,而是先找出所有信息增益大于平均值的属性,再在这些属性中寻找信息增益比最大的属性作为分裂条件
基尼指数
CART决策树则是采用基尼指数来衡量样本的“纯度”,其定义为:
从定义来看,基尼指数表达的是随机从样本集中抽取两个样本,其类别不同的概率。因此,Gini指数越小,样本集的纯度越高。因此,对于属性a的基尼指数为:
,在对于样本集,选择那个划分后使得基尼指数最小的属性作为最优的属性。即:

3. 决策树的分类

决策树主要包括ID3决策树、C4.5决策树、CART决策树。

3.1 ID3决策树

ID3决策树是一种较为简单的决策树,且只能用于分类,为多叉树。它不能处理连续特征和缺失值。
采用信息熵作为分裂条件,分裂时会遍历所有特征选取最优特征进行分裂。

3.2 C4.5决策树

C4.5决策树也是只能用于分类的树,为多叉树,采用悲观剪枝法进行剪枝。C4.5决策树能处理连续值与缺失值。

3.2.1 如何处理连续值

先对连续属性根据值的大小进行排序,然后对于每个连续属性不断找可能的分裂点,也就是找出能使信息增益比最大的最优的二分点作为分裂条件,所以算法执行效率较低。

3.2.2 如何处理缺失值

信息增益比为无缺失样本所占的比例乘无缺失样本子集的信息增益比。
在训练阶段,将该样本分配到所有子节点中,权重分别为具有该属性的样本被划分的子集样本数量的相对比率,计算错误率的时候,需要考虑到样本权重。 预测阶段如何处理缺失值?
一般而言,决策树对于缺失值有以下几种处理方式:

  1. 如果在训练阶段,我们把缺失值当作一个特殊值(单独分支)处理的话,预测阶段也走这个分支。
  2. 走该属性最常用的分支,也就是样本集中该属性值取值数量最多的那个值。
    而C4.5决策树处理缺失值的原则是:若测试样本在该属性上有缺失,那么就同时探查所有分支,计算出该样本为每个类别的概率,取最大概率的类别作为最终输出。
    举个例子,对于如下数据集:
数据集
数据集

数据集中序号为12的样本在outlook属性上有缺失,下面用这个数据集来训练决策树。

训练出的决策树
训练出的决策树

图中的0.38和0.23是根据样本数量计算出的比例。 对于训练好的决策树,预测一个有缺失值的样本(outlook=sunny,temperature=70,humidity=?,windy=False)的label是如何进行的?

  1. 判断outlook为sunny,会进入到判断humidity的结点
  2. temperature属性缺失,则会同时探查所有分支
  3. <=75的情况有2个样本,全是Yes,>75的情况有4个样本,但权重为3.38,其中Yes的权重为0.38,No的权重为3
  4. 所以该样本为Yes的概率为,为No的概率为
    为什么3.38里会有0.38的权重为Yes,因为这0.38的权重来自于训练样本中的12号样本。

3.3 CART决策树

不同于ID3和C4.5决策树,CART决策树是二叉树,且既可用作分类树,也可用作回归树。CART决策树是很多集成学习模型(如RF、GBDT、XGBoost、LightGBM等)的基学习器。
3.3.1 CART分类树
CART分类树采用基尼指数来选取最优特征,同时决定该特征的最优切分点。 对于连续特征:处理方式类似于C4.5决策树,在所有可能的分割点中找出最优切分点。
对于类别特征:不停地二分离散特征;如A特征有{A1,A2,A3}这三种可能的取值,CART分类树会将其分成{A1}+{A2,A3}、{A1}+{A2,A3},{A1,A3}+{A2}这三种划分可能性,然后找出最优的划分方法。
3.3.2 CART回归树
CART回归树是采用均方误差(MSE)来选取最优特征,即:先对该特征所有可能的特征值进行排序,遍历找出所有可能的特征值,用该值将集合分裂成左集和右集,分别计算出这两个集合的MSE,找到使左集MSE+右集MSE最小的分裂点,作为该特征的最佳分裂点。

这里为什么用MSE?因为MSE的一阶导数和二阶导数都好求,当然用别的也可以。

4 决策树剪枝算法

对决策树进行剪枝能有效避免“过拟合”,同时又能降低模型复杂度,提高运行效率。常见的剪枝算法主要包括:悲观剪枝法、错误率剪枝法、代价复杂度剪枝法。

4.1 悲观剪枝法

悲观剪枝法是一种自顶向下的剪枝算法,这种剪枝算法优点在于直接在训练集上就可以进行剪枝,不需要验证集;但控制不好惩罚因子的话容易导致过度剪枝。
对于一个叶子结点,假设它覆盖了个样本,其中有个错误类别,那么定义其错误率为,0.5是惩罚因子;那么对于一棵子树,它的错误率就为,假设正确分类值为0,错误分类值为1,误判率为,那么误判次数便符合伯努利分布。误判次数的均值和方差分别为:

如果惩罚因子为0的话,剪枝后的树的误差总是比剪枝前的误差大;但将惩罚因子设置成一个合理的值之后情况就不一样了。一般而言,我们可以让剪枝后的子树误判个数大过剪枝前树的误差个数一个标准差时,就执行此次剪枝:

4.2 错误率剪枝法

这种一种自底向上的剪枝算法,主要思想就是利用验证集来判断要不要进行剪枝。 当剪枝后的树在验证集上的误差小于剪枝后的树时,则剪枝; 错误率剪枝法不适用于小数据集,因为小数据集的验证集数据少,那么出现次数较少的点可能会对剪枝有较大的影响,造成比较大的误差。

4.3 代价复杂度剪枝法

定义损失函数为

,其中是叶子结点数量,,经验熵衡量了模型对训练数据的误差;
时,有相同的损失函数值。CART决策树采用的就是代价复杂度剪枝法进行剪枝的。

5 集成学习算法

集成学习主要思想是通过结合多个基学习器的预测结果来改善模型的泛化能力和鲁棒性。
根据基学习器的生成方式,目前集成学习主要分为两大类:

  1. Bagging:基学习器直接不存在强依赖关系,可同时并行化生成,如随机森林。
  2. Boosting:基学习器直接存在强依赖关系,必须由串行序列化生成,如GBDT、XGBoost、LightGBM、CatBoost