分类算法之决策树(理论篇)

起步

决策树(decision tree)是一个树结构,能够是二叉树或非二叉树,也能够把他看做是 if-else 规则的集合,也能够认为是在特征空间上的条件几率分布。算法

决策树的结构

以一个简单的用因而否买电脑预测的决策树为例子:spa

v2-c124b112aa3ef385d210b6c03e1ff458_hd.jpg

树中的内部节点表明一个属性,节点引出的分支表示这个属性的全部可能的值,叶节点表示最终的分类结果。从根节点到叶节点的每一条路径构建一条规则,而且这些规则具备 互斥且完备 的性质,即每个样本均被且只有一条路径所覆盖。code

决策树的建立是根据给定的训练数据来完成的,给出下面的训练集(本章都是围着这个例子进行讲解):orm

Image.png

这是一个是否买电脑的一个数据,数据上有4个特征:年龄( age ),收入( income ),是否学生( student ),信用度( credit_rating )。blog

案例的决策树中,为何是以年龄做为第一个进行分类的特征呢?递归

特征的分类能力

若是一个特征对结果影响比较大,那么就能够认为这个特征的分类能力比较大。相亲时候通常会先问收入,再问长相,而后问其家庭状况。也就是说在这边收入状况影响比较大,因此做为第一个特征判断,若是不合格那可能连后续都不用询问了。ci

有什么方法能够代表特征的分类能力呢?
这时候,须要引入一个概念,rem

熵(entropy)

1948年,香农提出“信息熵”的几率。一条信息的信息量大小和它的不肯定性有直接的关系,要搞清楚一件不肯定的事,须要了解大量信息。熵(entropy)用于表示 随机变量不肯定性的度量, 若是熵越大,表示不肯定性越大。数据分析

假设变量X,它有Xi(i=1,2,3...n)种状况,pi表示第i状况的几率,那么随机变量X的熵定义为:it

$$ H(X) = -\sum_{i=1}^np_i\log_2{(p_i)} $$

熵的单位是比特(bit)。

好比当随机变量X只有0,1两种取值,则有: H(x) = -plog(p) - (1-p)log(1-p) , 能够画出一个二维坐标表示他们的关系:

9911d23ae3bcc854e59a59365b5365be_hd.jpg

从而可知,当 p=0.5 时,熵取值最大,随机变量不肯定性最大。

回到买电脑的例子,在是否购买电脑这个结果中,数据集D,有 9 个yes,5 个no。所以它的熵是:

$$ info(D) = H(D) = - \frac{9}{14}\log_2(\frac{9}{14}) - \frac5{14}\log_2(\frac5{14}) = 0.940 bits $$

条件熵(conditional entropy)

随机变量X给定的条件下,随机变量Y的条件熵 H(Y|X) 定义为:

$$ H(Y|X) = \sum_{i=1}^np_iH(Y|X=x_i) $$

信息增益 (Information gain)

信息增益表示的是:得知 特征X 的信息而使得 分类Y 的信息的不肯定性减小的程度。若是某个特征的信息增益比较大,就表示该特征对结果的影响较大,特征A对数据集D的信息增益表示为:

$$ gain(A) = H(D) - H(D|A) $$

以那个买电脑的数据集为例,咱们来计算下 age 这个特征的信息增益,将数据再展现一下:

Image.png

从图中能够看出,有14条数据 age 这个特征中,年轻人 youth 有5人, 中年人 middle_aged 有4人,老年人 senior 有5人。分别计算这三种状况下的信息熵,再将信息熵相加就能获得 H(D|A):

$$ \begin{align*} info_{age}(D) = H(D|A) &= \frac5{14}\times (-\frac25\log_2\frac25 - \frac35\log_2\frac35) \\ &+\frac4{14}\times (-\frac44\log_2\frac44 - \frac04\log_2\frac04) \\ &+\frac5{14}\times (-\frac35\log_2\frac35 - \frac25\log_2\frac25) \\ &=0.694 bits \end{align*} $$

所以,gain(age) 的信息增益就是:

gain(age) = info(D) - info_{age}(D) = 0.940 - 0.694 = 0.246 bits

决策树概括算法 (ID3)

ID3算法的核心是在决策树的各个结点上应用 信息增益 准则进行特征选择。这个算法也是本章主要介绍的算法。具体作法是:

  • 从根节点开始,对结点计算全部可能特征的信息增益,选择信息增益最大的特征做为结点的特征,并由该特征的不一样取值构建子节点;
  • 对子节点递归地调用以上方法,构建决策树;
  • 直到全部特征的信息增益均很小或者没有特征可选时为止。

根据上面的计算信息增量的方法,能够得出其余特征的信息增量:
gain(income) = 0.029, gain(student) = 0.151, gain(credit_rating)=0.048

age 这个特征的信息增益是最大的(0.246 bits),选择age做为第一个根节点进行分类:

Image.png

而后再每一个子树中,再根据其特征的信息增益量进行每一个划分,递归地造成每一个划分上的样本断定树。

递归的中止条件

递归划分步骤仅当下列条件之一成立中止:
(a) 给定结点的全部样本属于同一类。
(b) 没有剩余属性能够用来进一步划分样本。在此状况下,使用多数表决。这涉及将给定的结点转换成树叶,并用样本中的多数所在的类标记它。替换地,能够存放结点样本的类分布。
(c) 分枝,当全部特征的信息增益都很小,也就是没有再计算的必要了,就建立一个树叶,也是用多数表决。

其余决策树概括算法

C4.5算法

C4.5算法与ID3算法的区别主要在于它在生产决策树的过程当中,使用信息增益比来进行特征选择。

CART算法

分类与回归树(classification and regression tree,CART)与C4.5算法同样,由ID3算法演化而来。CART假设决策树是一个二叉树,它经过递归地二分每一个特征,将特征空间划分为有限个单元,并在这些单元上肯定预测的几率分布。

CART算法中,对于回归树,采用的是平方偏差最小化准则;对于分类树,采用基尼指数最小化准则。


这些算法共同点:都是贪心算法,自上而下的建立决策树。不一样点是在于对特征的选择度量方法不一样。

决策树的剪枝

若是树长到叶子深度太大,就会形成一种状况,在训练集上表现很是好,可是由于分的太细了,在新的数据上就表现很差了。就是出现过分拟合的现象。为了不这个问题,有两种解决办法:

  1. 先剪枝:当熵减小的数量小于某一个阈值时,就中止分支的建立。这是一种贪心算法。
  2. 后剪枝:先建立完整的决策树,而后再尝试消除多余的节点,也就是采用减枝的方法。

总结:决策树的优缺点

优势:

  • 易于理解和解释,甚至比线性回归更直观;
  • 与人类作决策思考的思惟习惯契合;
  • 模型能够经过树的形式进行可视化展现;
  • 能够直接处理非数值型数据,不须要进行哑变量的转化,甚至能够直接处理含缺失值的数据;

缺点:

  • 处理连续变量很差;
  • 很差处理变量之间存在许多错综复杂的关系,如金融数据分析;
  • 决定分类的因素取决于更多变量的复杂组合时;
  • 可规模性通常。