Day11~13 第五章 决策树

2023-02-27  本文已影响0人  Bocchi

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 信息增益

这里给出 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.

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

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: 是
上一篇下一篇

猜你喜欢

热点阅读