分类决策树模型是一种描述对实例进行分类的树形结构。 决策树由结点和有向边组成。^[《统计学习方法》李航]
结点有两种类型:
- 内部结点(internal node):表示一个特征或属性
- 叶结点(leaf node):叶结点表示一个类
顾名思义,决策树说白了就是使用树结构进行决策。让我们借助:watermelon:书^[《机器学习》周志华]里的一张图来看一下子。
怎么判断一个西瓜是不是好瓜呢?
先看他的色泽是不是已经青绿色了,如果是,继续往下看;再看他gen蒂是否蜷缩,如果是就继续往下看;再敲一敲(签订契约,不是)听声音,如果是浊响,那他就是一个好瓜:watermelon:。
画决策树谁都会画,比如给你一串数据:
Refund | Marital Status | Income | Cheat |
---|---|---|---|
Yes | Single | 125K | No |
No | Married | 100K | No |
No | Single | 70K | No |
Yes | Married | 120K | No |
No | Divorced | 95K | Yes |
No | Married | 60K | No |
Yes | Divorced | 220K | No |
No | Single | 85K | Yes |
No | Married | 75K | No |
No | Single | 90K | Yes |
你搞个决策树出来:
你可以看到上边两个决策树都能对给出的数据进行正确分类,那哪棵树更好呢?
学过算法的我们应该知道在查找过程中,不同结构的二叉树会对查找效率造成影响,同理,决策树结构不同也会影响判断的质量。
决策树学习本质上是从训练数据集中归纳出一组分类规则。与训练数据集不相矛盾的决策树(即能对训练数据进行正确分类的决策树)可能有多个,也可能一个都没有。我们需要的是一个与训练数据矛盾较小的决策树,同时具有很好的泛化能力。从另一个角度看,决策树学习是由训练数据集估计条件概率模型。基于特征空间划分的类的条件概率模型有无穷多个。我们选择的条件概率模型应该不仅对训练数据有很好的拟合,而且对未知数据有很好的预测。
决策树学习通常包括3个步骤:特征选择、决策树的生成和决策树的修剪。
由于决策树表示一个条件概率分布,所以深浅不同的决策树对应着不同复杂度的概率模型。决策树的生成对应于模型的局部选择,决策树的剪枝对应于模型的全局选择。 决策树的生成只考虑局部最优,相对地,决策树的剪枝则考虑全局最优。
接下来我们从三个步骤分别进行详细介绍如何搞一颗好用的决策树。
1 特征选择
特征选择在于选取对训练数据具有分类能力的特征。这样可以提高决策树学习的效率。
同一组数据建立决策树,究竟选择哪个特征更好些?这就要求确定选择特征的准则。 直观上,如果一个特征具有更好的分类能力,或者说,按照这一特征将训练数据集分割成子集,使得各个子集在当前条件下有最好的分类,那么就更应该选择这个特征。
如果利用一个特征进行分类的结果与随机分类的结果没有很大差别,则称这个特征是没有分类能力的。这样的特征一般来说丢弃也对整体结果没有太大的影响。
特征选择的准则是信息增益或信息增益比。
2 决策树生成
生成决策树的主要是两个算法,ID3和C4.5,前者是用信息增益生成决策树,后者是用信息增益比生成决策树。
2.1 预备知识
在知道怎么算信息增益之前我们先看一下需要的一些基础知识。
学过高中化学的应该都知道熵这个概念,熵的本质是一个系统“内在的混乱程度”。它在控制论、概率论、数论、天体物理、生命科学等领域都有重要应用,在不同的学科中也有引申出的更为具体的定义。
在信息论与概率统计中,熵是表示随机变量不确定性的度量。其实说白了就是越乱熵越高,不确定性越大熵越搞。
设 $X$ 是 一个取有限个值的离散随机变量, 其概率分布为 $$ P\left(X=x_{i}\right)=p_{i}= \frac{n_i}{n_{total}}, \quad i=1,2, \cdots, n $$ 则随机变量 $X$ 的熵定义为 $$ H(X)=-\sum_{i=1}^{n} p_{i} \log p_{i} $$
从这个定义中我们看出,$X$的熵和$X$的取值没什么关系,只和X的分布有关。
设有随机变量 $(X, Y)$, 其联合概率分布为 $$ P\left(X=x_{i}, Y=y_{j}\right)=p_{i j}, \quad i=1,2, \cdots, n ; \quad j=1,2, \cdots, m $$ 条件熵 $H(Y \mid X)$ 表示在已知随机变量 $X$ 的条件下随机变量 $Y$ 的不确定性。随机变量 $X$ 给定的条件下随机变量 $Y$ 的条件熵 $H(Y \mid X)$, 定义为 $X$ 给 定条件下 $Y$ 的条件概率分布的熵对 $X$ 的数学期望 $$ H(Y \mid X)=\sum_{i=1}^{n} p_{i} H\left(Y \mid X=x_{i}\right) $$ 这里, $p_{i}=P\left(X=x_{i}\right), i=1,2, \cdots, n$ 。
熵 $H(Y)$ 与条件熵 $H(Y \mid X)$ 之差称为互信息 。决策树学习中的信息增益等价于训练数据集中类与特征的互信息。
==信息增益表示== 得知特征 $X$ 的信息而使得类 $Y$ 的信息的不确定性减少的程度。
对于一个数据集$D = {(x_i,y_i),i = 1,2,...,k}$
balabala…… 🤔正常的一个教程,到这里就会摆出一个数据集,然后开始各种符号写公式,不同的书他用的符号还不一样,就比如我看到西瓜书、统计分析方法跟我们老师上课讲的用的就是三套不同的符号,但是他们讲的都是一样的东西。所以在这里我就先不列那些乱七八糟的公式,直接举个例子来看一看。当然了公式也不能不讲,那我们根据数据讲完之后再讲一下计算公式。
我们还是要用到西瓜书里的数据集。
比如:watermelon:数据集:
现在我们以色泽为例对其进行计算:
2.2 计算信息增益
因为我们是要对比不同特征的分类效果,所以信息增益是对每一个特征进行计算的。
因为我们是要确定一个瓜是不是好瓜,所以我们要首先对是否是好瓜进行计算,对于y只有两个分类:是或者否。
$n_是 = 8 \quad n_否 = 9 \quad n_{total} = 17$
获得类别$y$的先验概率:
$p_是 = \frac{8}{17}\quad p_否 = \frac{9}{17}$
计算的熵:
$E(D) = -(p_{是} \log p_{是}+ p_{否} \log p_{否}) = 0.998$
色泽一共被分为三类:乌黑、青绿、浅白。
$n_{乌黑} = 6 \quad n_{青绿} = 6 \quad n_{浅白} = 5$
$p_{乌黑} = \frac{6}{17} \quad p_{青绿} = \frac{6}{17} \quad p_{浅白} = \frac{5}{17}$
因为这一步是要计算条件概率,就是说在这三个条件下的分类情况:
$n_{乌黑_是} = 4 \quad n_{乌黑_否} = 2$
$n_{青绿_是} = 3 \quad n_{青绿_否} = 3$
$n_{浅白_是} = 1 \quad n_{浅白_否} = 4$
$p_{乌黑_是} = \frac{4}{6} \quad p_{乌黑_否} = \frac{2}{6}$
$p_{青绿_是} = \frac{3}{6} \quad p_{青绿_否} = \frac{3}{6}$
$p_{浅白_是} = \frac{1}{5} \quad p_{浅白_否} = \frac{4}{5}$
然后我们计算色泽的条件熵:
$E_{乌黑} = -(p_{乌黑_是} \log p_{乌黑_是}+p_{乌黑_否} \log p_{乌黑_否}) = 0.918$
$E_{青绿} = -(p_{青绿_是} \log p_{青绿_是}+p_{青绿_否} \log p_{青绿_否}) = 1.000$
$E_{浅白} = -(p_{浅白_是} \log p_{浅白_是}+p_{浅白_否} \log p_{浅白_否}) = 0.722$
$E_{色泽} = p_{乌黑}E_{乌黑} + p_{青绿}E_{青绿} + p_{浅白}E_{浅白} = 0.889$
最后得到信息增益:
$Gain_{色泽} = E(D)-E_{色泽} = 0.998-0.889 = 0.109$
2.3 信息增益比
计算信息增益比顾名思义就是由信息增益得到的一个概率值。
其实就是用信息增益除以一个有关于某个特征值的熵,还是用色泽来说:
$H_{色泽} = -(p_{乌黑} \log p_{乌黑}+p_{青绿} \log p_{青绿}+p_{浅白} \log p_{浅白}) = 1.580$
$GainRatio_{色泽} = \frac{Gain_{色泽}}{H_{色泽}} = 0.069$
2.4 公式总结
$D = {(x_i,y_i),i = 1,2,...,k}$
对于这个数据集我已经将这些符号对应什么都标注出来了。
其分类特征为$x$,决策结果为$y$。
分类特征$x$共有$s$个:$x = {x^1,x^2,...,x^s}$
某一特征有$n$中分类:$x^i = {f_1,f_2,...,f_n}$
决策的结果有$m$类:$y={l_1,l_2,...,l_m}$
- 首先要求整个数据集决策的熵:
- $y$各分类的先验概率: $p_{i} = |l_i| \div k, \quad i=1,2,...,m$
- 熵: $E(D) = -\sum_{i=0}^m p_i\log_2 p_i$
- 求F特征的条件熵:
- $F$特征被分为$n$类,要求出单独的先验概率: $p_i = |f_i| \div k, \quad i=1,2,...,n$
- 求$F$特征在$y$各个分类下的概率: $p_{ij} = f_{ij} \div |f_i|, \quad i=1,2,...,n,\quad j=1,2,...,m$
- 求各个分类的熵: $E(F){i} = -\sum{j=0}^m p_{ij}\log_2 p_{ij} , \quad i=1,2,...,n$
- 求$F$特征的条件熵: $E(F) = -\sum_{i=0}^n p_iE(F)_i$
- 最后求得某特征$F$的信息增益: $Gain(F,D) = E(D)-E(F)$
- 某一特征$F$的信息增益比: $H(F) = -\sum_{j=0}^n p_{i}\log_2 p_{i}$ $GainRatio = Gain(F,D) \div H(F)$
2.5 决策树分类算法
决策树分类算法有很多种,比如:
- ID3 [Quinlan,1986]
- C4.5 [Quinlan,1993]
- CART [Breiman el all, 1984]
ID3算法是通过选择具有最高信息增益的属性作为数据集的划分,从而可创建决策树中的一个结点,根据该属性的不同取值可形成该结点的不同分枝。再对各分枝中的数据子集进行递归划分,直至形成叶结点或者某分枝上的所有数据不属于同一类别,但又没有剩余的属性可以进一步划分为止。
优点:
- ID3算法通常只需要测试一部分属性就可完成对训练数据集的分类。
- 从ID3算法构建的决策树中,很容易获得相应的决策规则。
缺点:
- D3算法在选择根节点和内部结点的属性时,使用信息增益作为评价标准。信息增益更倾向于选择取值种类较多的属性进行划分,而不一定是最优属性进行划分。
- ID3算法只能对属性值为离散型的数据集进行划分(构建决策树),不能处理属性值为连续型的数据集。
C4.5算法使用信息增益比来确定分枝属性,能够克服ID3算法使用信息增益时偏向于取值类型较多属性的不足。
C4.5算法既可以处理离散型描述属性,也可以处理连续型描述属性。
- 当处理离散型属性时,C4.5算法与ID3算法相同;
- 当处理连续型属性时,C4.5算法需要先将连续型属性转换成离散型属性。
至于CART算法,这个内容好长,日后我单独开一篇文章填坑。
决策树修剪
决策树会出现的问题: 由于数据中的噪声和孤立点,许多分枝反映的是训练数据中的异常,造成对新样本的判断不准确。
两种剪枝策略:
- 先剪枝:通过提前停止树的构造——如果在一个结点划分样本将导致低于预定义阈值的分裂(e.g. 使用信息增益度量); 但是,选择一个合适的阈值通常是很困难的。
- 后剪枝:由“完全生长”的树剪去分枝——对于树中的每个非叶结点,计算该结点上的子树被剪枝可能出现的期望错误率。 使用一个独立的测试集来评估每棵树的准确率, 就能得到具有最小期望错误率的决策树。