「吃瓜记」第4章 决策树

「吃瓜记」第4章 决策树

  • 4.1 基本流程
  • 4.2 划分选择
    • 4.2.1 ID3决策树
    • 4.2.2 C4.5决策树
    • 4.2.3 CART算法
  • 4.3 剪枝处理
  • 4.4 连续与缺失值
  • 参考资料

4.1 基本流程

算法原理

  • 从逻辑角度,一堆 if else 语句的组合
  • 从几何角度,根据某种准则划分特征空间
  • 关键:如何选择最优划分属性
  • 最终目的:将样本约分约“纯”

决策树的构造是一个递归的过程,有三种情形会导致递归返回:

  1. 当前结点包含的样本全属于同一类别,这时直接将该节点标记为叶节点,并设为相应的类别;
  2. 当前属性集为空,或是所有样本在所有属性上取值相同,无法划分,这时将该节点标记为叶节点,并将其类别设为该节点所含样本最多的类别;
  3. 当前结点包含的样本集合为空,不能划分,这时也将该节点标记为叶节点,并将其类别设为父节点中所含样本最多的类别。

算法的基本流程如下图所示:

「吃瓜记」第4章 决策树_第1张图片

4.2 划分选择

4.2.1 ID3决策树

信息熵 information entropy:度量样本集合纯度最常用的一种指标。假定当前样本集合D中第k类样本所占比例为pk,则样本集合D的信息熵定义为:

在这里插入图片描述

当D中只有一个类别时信息熵最小为0,当D中各个取值的概率均等时信息熵最大为log|D|,|D|表示D可能取值的个数。从

假定通过属性划分样本集D,产生了V个分支节点,v表示其中第v个分支节点,易知:分支节点包含的样本数越多,表示该分支节点的影响力越大。故可以计算出划分后相比原始数据集D获得的 信息增益(information gain)

在这里插入图片描述

信息增益越大,表示使用该属性划分样本集D的效果越好,因此ID3算法在递归过程中,每次选择最大信息增益的属性作为当前的划分属性。

4.2.2 C4.5决策树

ID3算法存在一个问题,就是偏向于取值数目较多的属性,例如:如果存在一个唯一标识,这样样本集D将会被划分为|D|个分支,每个分支只有一个样本,这样划分后的信息熵为零,纯度达到最大,然而,这样的决策树显然不具有泛化能力,无法对新样本进行有效预测。

C4.5决策树使用了 增益率(gain ratio) 来选择划分属性,来避免这个问题带来的困扰。C4.5决策树采用一种启发式的方法:首先使用ID3算法计算出信息增益高于平均水平的候选属性,接着C4.5计算这些候选属性的增益率,选择增益率最高的。增益率定义为:

「吃瓜记」第4章 决策树_第2张图片

4.2.3 CART算法

CART决策树使用 基尼指数(Gini index) 来选择划分属性,基尼指数反映的是从样本集D中随机抽取两个样本,其类别标记不一致的概率。因此Gini(D)越小越好,基尼指数定义如下:

「吃瓜记」第4章 决策树_第3张图片

进而,使用属性α划分后的基尼指数为:

在这里插入图片描述

CART决策树的实际构造算法如下:

  • 首先,对每个属性a的每个可能取值v,将数据集D分为a = v和a =\ v两部分来计 算基尼指数,即

在这里插入图片描述

  • 然后,选择基尼指数最小的属性及其对应取值作为最优划分属性和最优划分点;
  • 最后,重复以上两步,直至满足停止条件。

4.3 剪枝处理

从决策树的构造流程中我们可以直观地看出:不管怎么样的训练集,决策树总是能很好地将各个类别分离开来,这时就会遇到之前提到过的问题:过拟合(overfitting),即太依赖于训练样本。

剪枝(pruning) 是决策树算法对付过拟合的主要手段,剪枝的策略有两种如下:

  • 预剪枝(prepruning):在决策树生成过程中,对每个结点在划分前先进行评估,若当前结点的划分不能带来决策树泛化性能提升,则停止划分并将当前结点标记为叶节点。即在构造的过程中先评估,再考虑是否分支。
  • 后剪枝(post-pruning):先从训练集生成一颗完整的决策树,然后自底向上地对非叶结点进行考察,若将该结点对应的子树替换为叶结点能带来决策树泛化性能提升,则将该子树替换为叶结点。即在构造好一颗完整的决策树后,自底向上,评估分支的必要性。

预剪枝处理使得决策树的很多分支被剪掉,因此大大降低了训练时间开销,同时降低了过拟合的风险,但另一方面由于剪枝同时剪掉了当前节点后续子节点的分支,因此预剪枝“贪心”的本质阻止了分支的展开,在一定程度上带来了欠拟合的风险。而后剪枝则通常保留了更多的分支,因此采用后剪枝策略的决策树性能往往优于预剪枝,但其自底向上遍历了所有节点,并计算性能,训练时间开销相比预剪枝大大提升。

4.4 连续与缺失值

对于连续值的属性,若每个取值作为一个分支则显得不可行,因此需要进行离散化处理,常用的方法为二分法,基本思想为:给定样本集D与连续属性α,二分法试图找到一个划分点t将样本集D在属性α上分为 ≤t 与>t。

  • 首先将α的所有取值按升序排列,所有相邻属性的均值作为候选划分点(n-1个,n为α所有的取值数目)。
  • 计算每一个划分点划分集合D(即划分为两个分支)后的信息增益。
  • 选择最大信息增益的划分点作为最优划分点。

「吃瓜记」第4章 决策树_第4张图片

现实中常会遇到不完整的样本,即某些属性值缺失。有时若简单采取剔除,则会造成大量的信息浪费,因此在属性值缺失的情况下需要解决两个问题:(1)如何选择划分属性。(2)给定划分属性,若某样本在该属性上缺失值,如何划分到具体的分支上。假定为样本集中的每一个样本都赋予一个权重,根节点中的权重初始化为1,则定义:

「吃瓜记」第4章 决策树_第5张图片

对于(1):通过在样本集D中选取在属性α上没有缺失值的样本子集,计算在该样本子集上的信息增益,最终的信息增益等于该样本子集划分后信息增益乘以样本子集占样本集的比重。即:

「吃瓜记」第4章 决策树_第6张图片

对于(2):若该样本子集在属性α上的值缺失,则将该样本以不同的权重(即每个分支所含样本比例)划入到所有分支节点中。该样本在分支节点中的权重变为:

在这里插入图片描述

参考资料

  1. 机器学习,周志华,清华大学出版社
  2. 【吃瓜教程】《机器学习公式详解》(南瓜书)与西瓜书公式推导直播合集

你可能感兴趣的:(机器学习,机器学习,决策树)