文章目录

  • 决策树
  • 1. 特征选择
    • 1.1 熵
    • 1.2 条件熵
    • 1.3 信息增益
    • 1.4 信息增益率
  • 2. 决策树生成
    • 算法1 信息增益及信息增益率的算法
    • 2.1 ID3 算法
    • 2.2 C4.5 算法
  • 3. 决策树剪枝
    • 3.1 预剪枝
    • 3.2 后剪枝
      • 算法2 树的剪枝算法
  • 参考文献

相关文章:

机器学习 | 目录

监督学习 | ID3 决策树原理及Python实现

监督学习 | CART 分类回归树原理

监督学习 | 决策树之Sklearn实现

监督学习 | 决策树之网络搜索

本文大部分内容搬运自李航老师的《统计学习方法》[1],以给出决策树算法较为完整的定义,关于 ID3 算法的更多推到过程以及例子、Python实现,可以参考这篇文章,关于决策树算法的 Sklearn 实现,可以参考这篇文章。

决策树

决策树是一种基本的分类与回归方法。在分类问题中,表示基于特征对实例进行分类的过程。它可以认为是 if-then 规则的集合,也可以认为是定义在特征空间与类空间上的条件概率分布。

决策树学习通常包括 3 个步骤:特征选择决策树的生成决策树的修剪。这些决策树学习的思想主要来源于由 Quinlan 在 1986 年提出的 ID3 算法和 1993 年提出的 C4.5 算法,以及由 Breiman 等人在 1984 年提出的 CART 算法。这三个算法最大的不同在于特征选择的指标上,三者分别使用:信息增益、信息增益率以及基尼指数作为特征选择指标。本文将介绍 ID3 以及 C4.5 算法,并在下一篇文章中介绍 CART 算法。

1. 特征选择

特征选择在于选取对训练数据具有分类能力的特征,这样可以提高决策树学习的效率。如果利用一个特征进行分类的结果与随机分类的结果没有很大差别,则称这个特征是没有分类能力的。

通常特征选择的准则是信息增益或信息增益率。

1.1 熵

(entropy)是表示随机变量不确定性的度量。设 XXX 是一个取有限个值的离散随机变量,其概率分布为:

P(X=xi)=pi,i=1,2,...,nP(X=x_i)=p_i, \quad i=1,2,...,nP(X=xi​)=pi​,i=1,2,...,n

则随机变量 XXX 的熵定义为:

H(X)=−∑i=1npilog⁡pi(1)H(X)=-\sum_{i=1}^np_i\log p_i \tag{1}H(X)=−i=1∑n​pi​logpi​(1)

若 pi=0p_i=0pi​=0,则定义 0∗log⁡0=00*\log0=00∗log0=0,通常式 (1) 中的对数以 2 或 e 为底,单位为比特(bit)或纳特(nat)。由此可知,熵只依赖于 XXX 的分布,而与 XXX 的取值无关,所以也可以将 XXX 的熵记做 H(p)H(p)H(p),即:

H(p)=−∑i=1npilog⁡pi(2)H(p)=-\sum_{i=1}^np_i\log p_i \tag{2}H(p)=−i=1∑n​pi​logpi​(2)

熵越大,随机变量的不确定性就越大,由此可以验证:

0≤H(p)≤log⁡n(3)0\leq H(p)\leq \log n \tag{3}0≤H(p)≤logn(3)

1.2 条件熵

设由随机变量 (X,Y)(X,Y)(X,Y),其联合概率分布为:

P(X=xi,Y=yj)=pij,i=1,2,...,n;j=1,2,...,mP(X=x_i,Y=y_j)=p_{ij},\quad i=1,2,...,n;j=1,2,...,mP(X=xi​,Y=yj​)=pij​,i=1,2,...,n;j=1,2,...,m

条件熵 H(Y∣X)H(Y|X)H(Y∣X) 表示在已知随机变量 XXX 的条件下随机变量 YYY 的不确定性,其定义为 XXX 给定条件下 YYY 的条件概率分布的熵的 XXX 的数学期望:

H(Y∣X)=∑i=1npiH(Y∣X=xi)(4)H(Y|X)=\sum_{i=1}^n p_iH(Y|X=x_i)\tag{4}H(Y∣X)=i=1∑n​pi​H(Y∣X=xi​)(4)

其中 pi=P(X=xi),i=1,2,...,np_i=P(X=x_i), \quad i=1,2,...,npi​=P(X=xi​),i=1,2,...,n。

当熵和条件熵中的概率由数据估计得到时,所对应的熵与条件熵分别称为经验熵(emprical entropy)和经验条件熵(empirical conditional emtropy)。

1.3 信息增益

信息增益(information gain)表示得知特征 XXX 的信息而使类 YYY 的信息不确定性减少的程度。

特征 AAA 对训练数据集 DDD 的信息增益 g(D,A)g(D,A)g(D,A),定义为集合 DDD 的经验熵 H(D)H(D)H(D) 与特征 AAA 给定条件下 DDD 的经验条件熵 H(D∣A)H(D|A)H(D∣A) 之差,即:

g(D,A)=H(D)−H(D∣A)(5)g(D,A)=H(D)-H(D|A) \tag{5}g(D,A)=H(D)−H(D∣A)(5)

一般地,熵 H(Y)H(Y)H(Y) 与条件熵 H(D∣A)H(D|A)H(D∣A) 之差称为 互信息(mutual information)。决策树学习中的信息增益等价于训练数据集中类与特征的互信息。

1.4 信息增益率

信息增益率的大小时相对于训练数据集而言的,在分类问题困难时,也就是说在训练数据集的经验熵大的时候,信息增益值会偏大,信息增益值会偏大。反之,信息增益值会偏小。使用信息增益比(information gain ratio)可以对这一问题进行校正,这是特征选择的另一准则。

特征 AAA 对训练数据集 DDD 的信息增益率 gR(D,A)g_R(D,A)gR​(D,A) 定义为其信息增益 g(D,A)g(D,A)g(D,A) 与训练数据集 DDD 的经验熵 H(D)H(D)H(D) 之比:

gR(D,A)=g(D,A)H(D)(6)g_R(D,A)=\frac{g(D,A)}{H(D)} \tag{6}gR​(D,A)=H(D)g(D,A)​(6)

2. 决策树生成


设训练集数据为 DDD,∣D∣|D|∣D∣ 表示其样本容量,即样本个数。

设有 KKK 个类 Ck,k=1,2,...,KC_k ,k=1,2,...,KCk​,k=1,2,...,K,∣Ck∣|C_k|∣Ck​∣ 为属于类 CkC_kCk​ 的样本个数,因此 ∑k=1K∣Ck∣=∣D∣\sum_{k=1}^K|C_k|=|D|∑k=1K​∣Ck​∣=∣D∣。

设特征 AAA 有 nnn 个不同的取值 {a1,a2,...,an}\{a_1,a_2,...,a_n\}{a1​,a2​,...,an​},根据特征 AAA 的取值将 DDD 划分为 nnn 个子集 D1,D2,...,DnD_1,D_2,...,D_nD1​,D2​,...,Dn​,∣Di∣|D_i|∣Di​∣ 为 DiD_iDi​ 的样本个数,∑i=1n∣Di∣=D\sum_{i=1}^n|D_i|=D∑i=1n​∣Di​∣=D。

记子集 DiD_iDi​ 中属于类 CkC_kCk​ 的样本的集合为 DikD_{ik}Dik​,即 Dik=D⋂CkD_{ik}=D \bigcap C_kDik​=D⋂Ck​,∣Dik∣|D_{ik}|∣Dik​∣ 为 DikD_{ik}Dik​ 的样本个数。

因此,信息增益以及信息增益率计算如下:

算法1 信息增益及信息增益率的算法

输入:训练数据集 DDD 和特征 AAA;

输出:特征 AAA 对训练数据集 DDD 的信息增益 g(D,A)g(D,A)g(D,A) 以及信息增益率 gR(D,A)g_R(D,A)gR​(D,A)。

(1)计算数据集 DDD 的经验熵 H(D)H(D)H(D):

H(D)=−∑i=1n∣Ck∣∣D∣log2∣Dk∣∣D∣(7)H(D)=-\sum_{i=1}^n \frac{|C_k|}{|D|}log_2\frac{|D_k|}{|D|} \tag{7}H(D)=−i=1∑n​∣D∣∣Ck​∣​log2​∣D∣∣Dk​∣​(7)

(2)计算特征 AAA 对数据集 DDD 的经验条件熵 H(D∣A)H(D|A)H(D∣A):

H(D∣A)=∑i=1n∣Di∣∣D∣H(Di)=−∑i=1n∣Di∣∣D∣∑i=1n∣Dik∣∣Di∣log2∣Dik∣∣Di∣(8)\begin{aligned} H(D|A)& =\sum_{i=1}^n \frac{|D_i|}{|D|}H(D_i)\\ & = - \sum_{i=1}^n \frac{|D_i|}{|D|} \sum_{i=1}^n \frac{|D_{ik}|}{|D_i|}log_2\frac{|D_{ik}|}{|D_i|}\\ \end{aligned}\tag{8} H(D∣A)​=i=1∑n​∣D∣∣Di​∣​H(Di​)=−i=1∑n​∣D∣∣Di​∣​i=1∑n​∣Di​∣∣Dik​∣​log2​∣Di​∣∣Dik​∣​​(8)

(3)计算信息增益:

g(D,A)=H(D)−H(D∣A)(9)g(D,A)=H(D)-H(D|A) \tag{9}g(D,A)=H(D)−H(D∣A)(9)

(4)计算信息增益率:

gR(D,A)=g(D,A)H(D)(10)g_R(D,A)=\frac{g(D,A)}{H(D)} \tag{10}gR​(D,A)=H(D)g(D,A)​(10)

2.1 ID3 算法

输入:训练数据集 DDD,特征集 AAA,阈值 ε\varepsilonε;

输出:决策树 TTT。

(1)若 DDD 中所有实例属于同一类 CkC_kCk​,则 TTT 为单节点树,并将类 CkC_kCk​ 作为该节点的类标记,返回 TTT;

(2)若 A=⊘A=\oslashA=⊘,则 TTT 为单节点树,并将 DDD 中实例数最大的类 CkC_kCk​ 作为该节点的类标记,返回 TTT;

(3)否则,按算法1(1-3)计算 AAA 中各特征对 DDD 的信息增益,选择信息增益最大的特征 AgA_gAg​;

(4)如果 AgA_gAg​ 的信息增益小于阈值 ε\varepsilonε,则置 TTT 为单节点树,并将 DDD 中实例数最大的类 CKC_KCK​ 作为该节点的类标记,返回 TTT;

(5)否则,对 AgA_gAg​ 的每一可能值 aia_iai​,依 Ag=aiA_g=a_iAg​=ai​ 将 DDD 分隔为若干非空子集 DiD_iDi​,将 DiD_iDi​ 中实例数最大的类作为标记,构建子节点,由节点及其自己点构造数 TTT,返回 TTT;

(6)对第 iii 个子节点,以 DiD_iDi​ 为训练集,以 A−{Ag}A-\{A_g\}A−{Ag​} 为特征集,递归地调用步(1)~步(5),得到子树 TiT_iTi​,返回 TiT_iTi​。

2.2 C4.5 算法

C4.5 与 ID3 相比,只是将 ID3 算法中的信息增益换成了信息增益率,因此有:

输入:训练数据集 DDD,特征集 AAA,阈值 ε\varepsilonε;

输出:决策树 TTT。

(1)若 DDD 中所有实例属于同一类 CkC_kCk​,则 TTT 为单节点树,并将类 CkC_kCk​ 作为该节点的类标记,返回 TTT;

(2)若 A=⊘A=\oslashA=⊘,则 TTT 为单节点树,并将 DDD 中实例数最大的类 CkC_kCk​ 作为该节点的类标记,返回 TTT;

(3)否则,按算法1(1-4)计算 AAA 中各特征对 DDD 的信息增益,选择信息增益最大的特征 AgA_gAg​;

(4)如果 AgA_gAg​ 的信息增益小于阈值 ε\varepsilonε,则置 TTT 为单节点树,并将 DDD 中实例数最大的类 CKC_KCK​ 作为该节点的类标记,返回 TTT;

(5)否则,对 AgA_gAg​ 的每一可能值 aia_iai​,依 Ag=aiA_g=a_iAg​=ai​ 将 DDD 分隔为若干非空子集 DiD_iDi​,将 DiD_iDi​ 中实例数最大的类作为标记,构建子节点,由节点及其自己点构造数 TTT,返回 TTT;

(6)对第 iii 个子节点,以 DiD_iDi​ 为训练集,以 A−{Ag}A-\{A_g\}A−{Ag​} 为特征集,递归地调用步(1)~步(5),得到子树 TiT_iTi​,返回 TiT_iTi​。

3. 决策树剪枝

3.1 预剪枝

预剪枝是在决策树生成之前通过限制条件,来防止树过度生长而造成过拟合,常见的有:

  1. 最大深度 max_depth

  2. 每片叶子的最小样本数 min_samples_leaf

  3. 每次分裂的最小样本数 min_samples_split

  4. 最大特征数 max_features

关于这些参数的详细介绍,可以参考这篇文章。

3.2 后剪枝

后剪枝先从训练集生成一颗完整决策树,通过向损失函数中增加模型复杂度惩罚来对已生成的决策树进行简化。

设树 TTT 的叶节点个数为 ∣T∣|T|∣T∣,ttt 是树 TTT 的叶节点,该叶节点有 NtN_tNt​ 个样本点,其中 kkk 类的样本点有 NtkN_{tk}Ntk​ 个,k=1,2,...,Kk=1,2,...,Kk=1,2,...,K,Ht(T)H_t(T)Ht​(T) 为叶节点 ttt 上的经验熵,$\alpha \geq 0 $ 为参数,则决策树后剪枝的损失函数(Cost-Complexity Pruning)可以定义为:

Cα(T)=∑t=1∣T∣NtHt(T)+α∣T∣(11)C_{\alpha}(T)=\sum_{t=1}^{|T|}N_tH_t(T)+\alpha |T|\tag{11}Cα​(T)=t=1∑∣T∣​Nt​Ht​(T)+α∣T∣(11)

其中经验熵为:

Ht(T)=−∑kNikNtlogNikNt(12)H_t(T)=-\sum_{k} \frac{N_{ik}}{N_t}log\frac{N_{ik}}{N_t} \tag{12}Ht​(T)=−k∑​Nt​Nik​​logNt​Nik​​(12)

令 (11) 式右端第一项为 C(T)C(T)C(T):

C(T)=∑t=1∣T∣NtHt(T)=−∑t=1∣T∣Nt∑kNikNtlogNikNt(13)\begin{aligned} C(T)& =\sum_{t=1}^{|T|}N_tH_t(T) \\ & = -\sum_{t=1}^{|T|}N_t\sum_{k} \frac{N_{ik}}{N_t}log\frac{N_{ik}}{N_t} \\ \end{aligned}\tag{13} C(T)​=t=1∑∣T∣​Nt​Ht​(T)=−t=1∑∣T∣​Nt​k∑​Nt​Nik​​logNt​Nik​​​(13)

因此式 (11) 可以写作:

Cα(T)=C(T)+α∣T∣(14)C_{\alpha}(T)=C(T)+\alpha |T| \tag{14}Cα​(T)=C(T)+α∣T∣(14)

其中,C(T)C(T)C(T) 表示模型对训练数据的预测误差,即模型与训练数据的拟合程度;

∣T∣|T|∣T∣ 表示模型复杂度,参数 α≥0\alpha \geq 0α≥0 控制两者之间的影响。较大的 α\alphaα 促使选择较简单的模型,较小的 α\alphaα 促使选择较复杂的模型, α=0\alpha=0α=0 意味者只考虑模型与训练数据的拟合程度,不考虑模型的复杂度。

剪枝,就是当 α\alphaα 确定时,选择损失函数最小的模型,即损失函数最小的子树。

当 α\alphaα 确定时,子树越大,往往与训练数据的拟合越好,但是模型的复杂度越高;相反,子树越小,模型复杂度就越低,但是往往与训练数据的拟合不好,损失函数正好表示了对两者的平衡。

可以看到,ID3 和 C4.5 决策树生成只考虑了通过提高信息增益或信息增益率来对训练数据进行更好的拟合。而决策树剪枝通过优化损失函数还考虑了减小模型复杂度。

决策树生成学习局部的模型,而决策树剪枝学习整体的模型。

算法2 树的剪枝算法

输入:生成算法产生的整个树 TTT,参数 α\alphaα;

输出:修剪后的子树 TαT_{\alpha}Tα​。

(1)计算每个节点的经验熵;

(2)递归地从树的叶节点向上回缩:

\quad \quad设一组叶节点回缩到其父节点之前与之后的整体树分别为 TBT_BTB​ 与 TAT_ATA​,其对应的损失函数值分别是 Cα(TB)C_{\alpha}(T_B)Cα​(TB​) 与 Cα(TA)C_{\alpha}(T_A)Cα​(TA​),如果:

Cα(TA)≤Cα(TB)(15)C_{\alpha}(T_A)\leq C_{\alpha}(T_B) \tag{15}Cα​(TA​)≤Cα​(TB​)(15)

\quad \quad 则进行剪枝,即将父节点变为新的叶节点。

(3)返回 (2) ,直到不能继续为止,得到损失函数最小的子树 TαT_{\alpha}Tα​。

参考文献

[1] 李航. 统计学习方法[M]. 北京: 清华大学出版社, 2012: 55-66.

监督学习 | ID3 C4.5 决策树原理相关推荐

  1. 决策树模型(ID3/C4.5/CART)原理和底层代码解读 学习笔记

    本文作者:合肥工业大学 管理学院 钱洋 email:1563178220@qq.com 内容可能有不到之处,欢迎交流. 未经本人允许禁止转载 如下为个人的学习笔记,使用latex编写,再写成文本太麻烦 ...

  2. 监督学习 | ID3 决策树原理及Python实现

    文章目录 1. 信息熵 Information Entropy 1.1 信息熵公式推导 2. 信息增益 Information Gain 2.1 信息增益最大化 2.1.1 利用离散特征进行分类 2. ...

  3. 监督学习 | CART 分类回归树原理

    文章目录 CART 算法 1. CART 生成 1.1 回归树生成 最小二乘回归树生成算法 1.2 分类树生成 基尼指数 CART 生成算法 参考文献 相关文章: 机器学习 | 目录 监督学习 | I ...

  4. 决策树数学原理(ID3,c4.5,cart算法)

    上面这个图就是一棵典型的决策树.我们在做决策树的时候,会经历两个阶段:构造和剪枝. 构造 简单来说,构造的过程就是选择什么属性作为节点的过程,那么在构造过程中,会存在三种节点: 根节点:就是树的最顶端 ...

  5. 决策树(ID3,C4.5和CART)介绍、说明、联系和区别

    决策树 决策树 1. 决策树介绍 2. 决策树构建过程 2.1 属性选择 熵 条件熵 信息增益 信息增益比 3. 决策树生成和修建 4. 决策树常见算法 ID3 C4.5 CART(基尼指数) 5.总 ...

  6. Lesson 8.3Lesson 8.4 ID3、C4.5决策树的建模流程CART回归树的建模流程与sklearn参数详解

    Lesson 8.3 ID3.C4.5决策树的建模流程 ID3和C4.5作为的经典决策树算法,尽管无法通过sklearn来进行建模,但其基本原理仍然值得讨论与学习.接下来我们详细介绍关于ID3和C4. ...

  7. 决策树 基于python实现ID3,C4.5,CART算法

    实验目录 实验环境 简介 决策树(decision tree) 信息熵 信息增益(应用于ID3算法) 信息增益率(在C4.5算法中使用) 基尼指数(被用于CART算法) 实验准备 数据集 算法大体流程 ...

  8. 统计学习方法第五章作业:ID3/C4.5算法分类决策树、平方误差二叉回归树代码实现

    ID3/C4.5算法分类决策树 import numpy as np import math class Node:def __init__(self,feature_index=None,value ...

  9. [机器学习-Sklearn]决策树学习与总结 (ID3, C4.5, C5.0, CART)

    决策树学习与总结 (ID3, C4.5, C5.0, CART) 1. 什么是决策树 2. 决策树介绍 3. ID3 算法 信息熵 信息增益 缺点 4. C4.5算法 5. C5.0算法 6. CAR ...

最新文章

  1. android Adapter
  2. HDU 2157 How many ways?? 矩阵
  3. jstack分析cpu占用100%
  4. 人工智能技术的新突破:MIT科学家发明Church AI语言
  5. 川普签署的 H-1B 禁令昨日正式实施,最着急的是谁?
  6. eyoucms内容添加发布
  7. PAT 1051-1060 题解
  8. Uncaught ReferenceError: but is not defined
  9. 利用WPS功能破解无线路由器PIN码
  10. 小米 MIUI 12 Magisk root教程(无需刷REC)
  11. 大数据技术原理与应用学习笔记(五)
  12. 腾讯视频投屏显示无法连接服务器,腾讯视频突然不能投屏怎么解决 腾讯视频突然不能投屏解决方法...
  13. CSS动画效果(animation属性)解析
  14. android 动画-补间动画
  15. 微信小程序开发工具项目的基本组成结构
  16. steam 32位 linux 下载地址,「Linux」- 安装 Steam 客户端
  17. 成都宏鑫软科技有限公司
  18. 如何安装虚拟机的集成服务器,如何在虚拟机上安装Hyper-V集成服务?
  19. B1192 [HNOI2006]超级英雄Hero 二分图匹配
  20. 入坑 c计划 day 1

热门文章

  1. 巧用记忆化搜索代替暴力递归(洛谷P1464题题解,Java语言描述)
  2. 算成绩啦(洛谷P5740、P5741题题解,Java语言描述)
  3. 【抽象代数】代数系统、群与商群
  4. Windows 平台下的C++代理类(供C # 使用)
  5. Golang面试题解析(五)
  6. android手势感应预研
  7. 软件工程:汇编语言和C语言在软件工程的应用,计算机学生必看!
  8. C++老话题:用指向函数的指针作函数参数
  9. 我就是不敢的openeim002
  10. 只靠自己的飞鸽传书想象和推断