Day11~13 第五章 决策树


1 决策树模型与学习

1.1 决策树模型

  定义 5.1 (决策树) 分类决策树模型是描述对实例进行分类的树形结构。决策树由 结点 (node)有向边(directed edge) 组成。结点有两种类型:内部结点外部结点。内部结点表示一个特征或属性,外部结点表示一个

1.2 决策树与 if-then 规则

  可以将决策树看做一个 if-then 规则的集合。从根节点到叶节点的每一条路径都可以看做是一个规则:
  (1) 内部节点的特征对应着规则的条件
  (2) 叶节点的类对应着规则的结论
  这样的规则具有互斥性和完备性,即每一个实例都由一条路径覆盖,并且这个实例只能被这条路径覆盖。

   k 近邻算法可以完成很多分类任务,但是其最大的缺点是无法给出数据的内在含义。决策树由于采用 if-then 规则从而具有较好的可解释性。

1.3 决策树与条件概率分布

  决策树还表示给定特征条件下类的条件概率分布。这一条件概率分布定义在特则空间的一个划分上。将特征空间划分为互不相交的单元或区域,并在每个单元定义一个类的概率分布就构成了一个条件概率分布。决策树的一条路径对应于划分中的一个单元。决策树所表示的条件概率分布由各个单元给定条件下类的条件概率分布组成。

1.4 决策树学习

  给定训练数据集D=\{(x_1,y_1),(x_2,y_2),\dots,(x_N,y_N)\}其中,x_i=(x_i^{(1)},x_i^{(2)},\dots,x_i^{(n)})^T 为输入实例,n 为特征个数,y_i\in\{1,2,\dots,K\} 为类标记,i=1,2,\dots,NN 为样本容量。
  ● 决策树的目标:根据给定数据集构建一个决策树模型,使它能够对实例进行正确的分类;
  ● 决策树学习的本质:从训练集中归纳出一组分类规则,或者说是由训练数据集估计条件概率模型;
  ● 决策树学习的损失函数:正则化的极大似然函数;
  ● 决策树的学习算法包含特征选择、决策树的生成与决策树的剪枝三个过程;
  ● 决策树学习常用的算法有 ID3、C4.5 与 CART。


2 特征选择

  特征选择在于选取对训练数据集具有分类能力的特征,这样可以提高决策树学习的效率。通常特征选择的准则是信息增熵信息增益比

2.1 信息增益
  • 信息熵
      信息熵 (entropy) 是表示随机变量不确定性的度量。熵越大,则随机变量的不确定性就越大。设 X 是一个取有限值的离散随机变量,其概率分布为P(X=x_i)=p_i,\quad i=1,2,\dots,n则随机变量 X 的熵定义为:H(X)=-\sum\limits_{i=1}^n p_i\log p_i若有 0 概率,则定义 0\log 0 = 0。 通常,式中的对数以 2 为底或以 e 为底,这是熵的单位分别称为比特 (bit)纳特 (nat)。由于熵只依赖于 X 的分布,而与 X 的取值无关,故也可将 X 的熵记作 H(p)。从定义验可验证 0\leqslant H(p)\leqslant \log n

这里给出 0\leqslant H(p)\leqslant \log n 的证明:
证明:
  信息熵的非负性是显然的,这里只证明H(p)\leqslant \log n。这个证明是容易的:不妨设 \log 以自然对数为底,那么\begin{align}\log n-H(p) &=\log n - \sum\limits_{i=1}^n -p_i\log p_i \\ & =\sum\limits_{i=1}^n p_i \log n -\sum\limits_{i=1}^n -p_i\log p_i\\ & =\sum\limits_{i=1}^n p_i \log (n p_i)\\ & \geqslant \sum\limits_{i=1}^n p_i \big(1-\frac{1}{n p_i}\big)\qquad(\text{对数不等式})\\ & =\sum\limits_{i=1}^n p_i-\sum\limits_{i=1}^n\frac{1}{n}\\ & =1-1=0 \end{align}  因此,根据对数不等式取等号的条件,\log n-H(p)\geqslant 0,即 \log n\geqslant H(p)当且仅当 p_i = 1/ni=1,2,\dots, n 时,等号成立。Q.E.D.

  • 条件信息熵
      设有随机变量 (X,Y),其联合概率分布为P(X=x_i,Y=y_i)=p_{ij},\quad i=1,2,\dots,n;\quad j=1,2,\dots,n  条件熵 (conditional entropy) H(Y|X) 表示在已知随机变量 X 的条件下随机变量 Y 的不确定性,定义为 X 给定条件 Y 的条件概率分布的熵对 X 的数学期望H(Y|X) = \sum\limits_{i=1}^n p_i H(Y|X=x_i)这里 p_i=P(X=x_i)i=1,2,\dots,n。若有 0 概率,则定义 0\log 0 = 0

  当熵和条件熵中的概率由数据估计(尤其是极大似然估计)得到时,所对应的熵与条件熵分别称为经验熵经验条件熵

  • 信息增益
      信息增益 (information gain) 表示得知特征 X 的信息而使得类 Y 的信息的不确定性减少的程度
      定义 5.2 (信息增益) 特征 A 对训练数据集 D 的信息增益 g(D,A),定义为集合 D 对经验熵 H(D) 与特征 A 给定条件下 D 的经验条件熵 H(D|A) 之差,即g(D,A) = H(D)-H(D|A)  一般的,熵 H(Y) 与条件熵 H(Y|X) 之差称为互信息 (mutual information)
      决策树学习应用信息增益准则选择特征。由于信息增益表示一个特征对数据集的分类的不确定性减少的程度,故信息增益越大的特征往往具有更强的分类能力
2.2 信息增益比

  以信息增益作为划分训练数据集的特征,存在偏向于选择取值较多的特征的问题。使用信息增益比 (information gain ratio) 可以对这一问题进行校正。这是特征选择的另一准则。
  定义 5.2 (信息增益比) 特征 A 对训练数据集 D 的信息增益比 g_R(D,A),定义为信息增益 g(D,A) 与训练数据集 D 关于特征 A 的值的熵 H_A(D)之比,即g(D,A) = \frac{g(D,A)}{H_A(D)}其中,H_A(D)=-\sum\limits_{i=1}^n \frac{|D_i|}{|D|}\log_2 \frac{|D_i|}{|D|}n 为特征 A 的取值的个数。


3 决策树的生成

3.1 ID3 算法与 C4.5 算法

  从第 2 小节信息论相关的知识中我们知道:信息熵越大,从而样本纯度越低。ID3 算法的核心思想就是在决策树的各个结点以信息增益准则来进行特征选择,递归地构建决策树。 其大致步骤为:
  (1) 从根结点开始,对结点计算所有可能的特征的信息增益;
  (2) 选择信息增益最大的特征作为该结点的特征;
  (3) 根据步骤 (2) 所选取特征的不同取值建立子节点(即按照特征的取值来划分不同分支的数据集合),再对子节点递归地调用步骤 (1);
  (4) 重复上述步骤,若子集只包含单一特征或子集中的信息增熵小于阈值,则设为单节点。直至生成最后一棵单节点决策树。

从 ID3 算法的具体步骤我们分析不难发现其可能具有如下缺点:

  • 采用信息增益准则对可取值数目较多的特征有所偏好 (如类似“编号”的特征);
  • 只能用于处理离散分布的特征 (这是因为连续分布的特征取值数目会很大);

  为了克服 ID3 的上述缺点,我们可以采取如下方法:
  (1) 对于特征取值数目的偏重这一缺点,采用引入信息增益比作为分类标准的 C4.5 算法来进行决策树的生成;
  (2) 对于无法处理连续分布的特征,可以将连续特征离散化,C4.5 算法中采用的方法如下:先将特征取值排序,以连续两个值中间值作为划分标准。尝试每一种划分,并计算修正后的信息增益,选择信息增益最大的分裂点作为该属性的分类点。

  信息增益率对可取值较少的特征有所偏好(分母越小,整体越大),因此实际上 C4.5 算法可以采用一种类似于启发式方法进行改进:先从特征中找到信息增益高于某一阈值(如平均值)的特征,再从中选择信息增益率最高的


4 决策树的剪枝

  决策树的剪枝处理——从已经生成的决策树上裁掉一些子树或者叶节点,并将其根节点或者父节点作为新的叶节点,从而简化分类树模型。
  决策树的剪枝往往通过极小化决策树整体的损失函数来实现。设树 T 的叶结点个数为 |T|t 是树 T 的叶结点,该叶结点有 N_i 个样本点,其中 k 类样本点有 N_{tk} 个,k=1,2,\dots,KH_t(T) 为叶结点 t 上的经验熵,\alpha\geqslant 0 为参数,则决策树学习的损失函数可以定义为C_\alpha(T)=\sum\limits_{t=1}^{|T|}N_t H_T(T)+\alpha |T|其中经验熵为H_t(T)=-\sum\limits_{k}\frac{N_{tk}}{N_t}\log \frac{N_{tk}}{N_t}  不难发现,上式定义的损失函数极小化等价于正则化的极大似然估计。


5 CART 算法

  CART (classification and regression tree):分类与回归树,可以用于分类与回归。
  CART 是在给定输入随机变量 X 条件下输出随机变量 Y 的条件概率分布的学习方法。CART 假设决策树是二叉树,这样的决策树等价于递归地二分每个特征,将输入空间即特征空间划分为有限个单元,并在这些单元上确定预测的概率分布,也就是在输入给定的条件下输出的条件概率分布。

5.1 CART 生成

  决策树的生成就是递归地构建二叉树的过程,对回归树用平方误差最小准则,对分类树用基尼指数最小化准则
  1. 回归树的生成
  算法 5.5 (最小二乘回归树生成算法)
  输入:训练数据集 D
  输出:回归树 f(x)
  在训练数据集所在的输入空间中,递归地将每个区域划分为两个子区域并决定每个子区域的输出值,构建二叉决策树:
  (1) 选择最优切分变量 j 与切分点 s,求解\min\limits_{j,s}\left[\min_{c_1}\sum\limits_{x_i\in R_1(j,s)}(y_i-c_1)^2+\min_{c_2}\sum\limits_{x_i\in R_2(j,s)}(y_i-c_2)^2\right]  遍历变量 j,对固定的切分变量 j 扫描切分点 s,选择使上式达到最小的 (j,s)
  (2) 对选定的 (j,s) 划分区域并决定相应的输出值:R_1(j,s)=\{x|x^{(j)}\leqslant s\},\quad R_2(j,s)=\{x|x^{(j)}> s\} \hat{c}_m=\frac{1}{N_m}\sum\limits_{x_i\in R_m(j,s)} y_i,\quad x\in R_m,\quad m=1,2  (3) 继续对两个子区域调用步骤 (1),(2),直至满足停止条件;
  (4) 将输入空间划分为 M 个区域 R_1,R_2,\dots,R_M,生成决策树:f(x)=\sum\limits_{m=1}^M \hat{c}_m I(x\in R_m)
  2. 分类树的生成
  定义 5.4 (基尼指数) 分类问题中,假设有 K 个类,样本点属于第 k 类的概率为 p_k,则概率分布的基尼指数定义为\text{Gini}(p)=\sum\limits_{k=1}^K p_k(1-p_k)=1-\sum\limits_{k=1}^K p_k^2对于二分类问题,若样本点属于第一个类的概率是 p,则概率分布的基尼指数为\text{Gini}(p)=2p(1-p)对于给定的样本集合 D,其基尼指数为\text{Gini}(D)=1-\sum\limits_{k=1}^K\left(\frac{|C_k|}{|D|}\right)^2这里,C_kD 中属于第 k 类的样本子集,K 是类的个数。
  若样本集合 D 根据特征 A 是否取某一可能值 a 被分割成 D_1D_2 两个部分,即D_1=\{(x,y)\in D|A(x)=a\},\quad D_2=D-D_1则在特征 A 的条件下,集合 D 的基尼指数定义为\text{Gini}(D,A)=\frac{|D_1|}{|D|}\text{Gini}(D_1)+\frac{|D_2|}{|D|}\text{Gini}(D_2)基尼指数 \text{Gini}(D) 表示集合 D 的不确定性,基尼指数 \text{Gini}(D,A) 表示集合 D 经过 A=a 分割后的不确定性。基尼指数越越大,表示样本集合的不确定性也就越大

  算法 5.6 (CART 生成算法)
  输入:训练数据集 D,停止计算的条件;
  输出:CART 决策树;
  (1) 计算现有特征对数据集的基尼指数,对每一个特征 A,对其可能取的每个值 a,将 D 划分成 D_1D_2,计算 A=a 时的基尼指数。
  (2) 在所有可能的特征 A 以及它所有可能的切分点 a 中,选择基尼指数最小的特征及其对应的切分点作为最优特征与最优切分点。根据其将数据分配到两个子节点中去。
  (3) 对两个子节点递归地调用 (1),(2),直至满足停止条件。
  (4) 生成 CART 决策树
  算法的停止条件是节点中的样本个数小于阈值,或样本集的基尼指数小于预定阈值,或者没有更多的特征。

5.2 CART 剪枝

  算法 5.7 (CART 剪枝算法)
  输入:CART 算法生成的决策树;
  输出:最优决策树 T_0
  (1) 设 k=0T=T_0
  (2) 设 \alpha = +\infty
  (3) 自下而上地对各内部结点 t 计算 C(T_t)|T_t| 以及g(t)=\frac{C(t)-C(T_t)}{|T_t|-1}\qquad\alpha=\min(\alpha,g(t))  其中,T_t 表示以 t 为根结点的子树,C(T_t) 为预测误差,|T_t|T_t 的叶结点个数;
  (4) 对 g(t)=\alpha 的内部结点 t 进行剪枝,并以多数表决法决定其类,得到树 T
  (5) 设 k=k+1\alpha_k = \alphaT_k=T
  (6) 若 T_k 不是由根节点及两个叶结点构成的树,则回到步骤 (2);否则令 T_k=T_n
  (7) 采用交叉验证法在子树数列 T_0,T_1,\dots,T_n 中选取最优子树 T_\alpha


6 习题

习题6.1 根据表 5.1 所给训练集,运用 C4.5 算法生成决策树。
解:
(1) 根据例题 5.2,我们得到:
数据集 D 的经验熵: H(D) = 0.971
A_1 (年龄) 对数据集 D 的信息增益:g(D,A_1)=0.083
A_2 (有工作) 对数据集 D 的信息增益:g(D,A_2)=0.324
A_3 (有自己的房子) 对数据集 D 的信息增益:g(D,A_3)=0.420
A_4 (信贷情况) 对数据集 D 的信息增益:g(D,A_4)=0.363

(2) 计算数据集 D 关于各个特征 A_ii=1,2,3,4 的值的熵:
\begin{align} & H_{A_1}(D)=-\frac{5}{15}\log_2\frac{5}{15}-\frac{5}{15}\log_2\frac{5}{15}-\frac{5}{15}\log_2\frac{5}{15}=\log_2 3\approx 1.585\\ & H_{A_2}(D)=-\frac{10}{15}\log_2\frac{10}{15}-\frac{5}{15}\log_2\frac{5}{15}=\log_2 3 - \frac{2}{3}\approx 0.918\\ & H_{A_3}(D)=-\frac{9}{15}\log_2\frac{9}{15}-\frac{6}{15}\log_2\frac{6}{15}=\log_2 5 - \frac{3}{5}\log_2 3 -\frac{2}{5}\approx 0.971\\ & H_{A_4}(D)=-\frac{5}{15}\log_2\frac{5}{15}-\frac{4}{15}\log_2\frac{4}{15}-\frac{6}{15}\log_2\frac{6}{15}\\ & \qquad\quad\ \, =\log_2 15 - \frac{1}{3}\log_2 5 - \frac{2}{5}\log_2 6-\frac{8}{15}\approx 1.566\\ \end{align}

(3) 计算各特征对数据集 D 的信息增益比:
\begin{align} & g_R(D,A_1)=g(D,A_1)/H_{A_1}(D)=0.083/1.585\approx 0.052\\ & g_R(D,A_2)=g(D,A_2)/H_{A_2}(D)=0.324/0.918\approx 0.353\\ & g_R(D,A_3)=g(D,A_3)/H_{A_3}(D)=0.420/0.971\approx \color{red}{0.442}\\ & g_R(D,A_4)=g(D,A_4)/H_{A_4}(D)=0.363/1.566\approx 0.232\\ \end{align}

(4) 由于特征 A_3 (有自己的房子) 的信息增益比最大,所以选择特征 A_3 作为根节点的特征。它将训练数据集 D 划分为两个子集 D_1 (A_3 取值为“是”) 和 D_2 (A_3 取值为“否”)。由于 D_1 只有同一类的样本点,所以它成为一个叶结点,结点的类标记为“是”。

(5) 对 D_2 则需从特征 A_1,A_2,A_4 中选择新的特征。根据例题 5.3,我们得到:
A_1 (年龄) 对数据集 D_2 的信息增益:g(D_2,A_1)=0.251
A_2 (有工作) 对数据集 D_2 的信息增益:g(D_2,A_2)=0.918
A_4 (信贷情况) 对数据集 D_2 的信息增益:g(D_2,A_4)=0.474

(6) 计算数据集 D_2 关于各个特征A_1,A_2,A_4 的值的熵:
\begin{align} & H_{A_1}(D_2)=-\frac{4}{9}\log_2\frac{4}{9}-\frac{2}{9}\log_2\frac{2}{9}-\frac{3}{9}\log_2\frac{3}{9}\approx 1.531\\ & H_{A_2}(D_2)=-\frac{6}{9}\log_2\frac{6}{9}-\frac{3}{9}\log_2\frac{3}{9}\approx 0.918\\ & H_{A_4}(D_2)=-\frac{4}{9}\log_2\frac{4}{9}-\frac{4}{9}\log_2\frac{4}{9}-\frac{1}{9}\log_2\frac{1}{9}\approx 1.392\\ \end{align}

(7) 计算各特征对数据集 D_2 的信息增益比:
\begin{align} & g_R(D_2,A_1)=g(D_2,A_1)/H_{A_1}(D_2)=0.251/1.531\approx 0.164\\ & g_R(D_2,A_2)=g(D_2,A_2)/H_{A_2}(D_2)=0.918/0.918\approx \color{red}{1.000}\\ & g_R(D_2,A_4)=g(D_2,A_4)/H_{A_4}(D_2)=0.474/1.392\approx 0.341\\ \end{align}

(8) 由于特征 A_2 (有工作) 的信息增益比最大,所以选择特征 A_2 作为叶结点的特征。它将训练数据集 D 划分为两个子集 D_1 (A_2 取值为“是”) 和 D_2 (A_2 取值为“否”)。由于 D_1, D_2 都只有同一类的样本点,所以它们分别成为一个叶结点,结点的类标记分别为“是”和“否”。

 这样我们就采用 C4.5 算法构建了一个决策树,这个决策树只用了两个特征。

|--- 有自己的房子
|   |--- class: 否
|   |   |--- 有工作
|   |   |   |--- class: 否
|   |   |--- 有工作
|   |   |   |--- class: 是
|--- 有自己的房子
|   |--- class: 是
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容