第5章 决策树
决策树
(decision tree)是一种基本的分类与回归方法。可以认为是互斥且完备的if-then规则的集合。优点:模型具有可读性、分类速度快。- 通常包括三个步骤:特征选择、决策树的生成、决策树的修剪
- 思想来源主要有ID3算法、C4.5算法、CART算法
定义
:分类决策树模型是一种描述对实例进行分类的树形结构。决策树由结点(node)和有向边(directed edge)组成。结点有两种类型,内部结点(internal node)和叶结点(leaf node)。内部结点表示一个特征或属性,叶结点表示一个类。- 决策树还表示给定特征条件下类的条件概率分布
- 决策树学习的损失函数通常为正则化的极大似然函数
- 决策树构建思想:
- 开始,构建根结点,将所有训练数据都放在根结点
- 选择一个最优特征,按照这一特征将训练数据集分割成子集,使得各个子集有一个当前条件下最好的分类
* 如果这些子集已经能够被基本正确分类,那么构建叶结点,并将这些子集分到所对应的叶结点中去
* 如果还有子集不能基本正确分类,那么就对这些子集选择新的最优特征,继续对其进行分割,构建相应的结点
- 如此递归,直至所有训练数据子集被基本正确分类或者没有合适的特征为止
- 最后,每个子集都被分到叶结点上,都有明确的分类 特征选择
,在于选取对训练数据集具有分类能力的特征,通常准则为信息增益或信息增益比熵
(entropy)是表示随机变量不确定性的度量。设X是一个取有限个书的离散随机变量,概率分布为
P(X=xi)=pi, i=1,2...,n P ( X = x i ) = p i , i = 1 , 2... , n
则随机变量X的熵定义为
H(X)=−∑I=1npilogpi注:0log0=0 H ( X ) = − ∑ I = 1 n p i log p i 注 : 0 log 0 = 0
条件熵
(conditional entropy)表示在已知随机变量X的条件下随机变量Y的不确定性。定义为X给定条件下Y的条件概率分布的熵对X的数学期望
H(Y|X)=∑I=1npiH(Y|X=xi), pi=P(X=xi), I=1,2,...,n H ( Y | X ) = ∑ I = 1 n p i H ( Y | X = x i ) , p i = P ( X = x i ) , I = 1 , 2 , . . . , n- 当熵和条件熵中的概率由数据估计(特别是极大似然估计)得到时,所对应的熵与条件熵分别为
经验熵
(empirical entropy)和经验条件熵
(empirical conditional entropy) 信息增益
(information gain)表示得知特征X的信息而使得类Y的信息的不确定性减少的程度
特征A对训练数据集D的信息增益g(D,A),定义为集合D的经验熵H(D)与特征A给定条件下D的经验条件熵H(D|A)之差
g(D,A)=H(D)−H(D|A) g ( D , A ) = H ( D ) − H ( D | A )- 一般,熵H(Y)和条件熵H(Y|X)之差称为
互信息
(mutual information)。决策树学习中的信息增益等价于训练数据集中的类与特征的互信息 - 信息增益大的特征具有更强的分类能力。特征选择方法:对训练数据集D计算每个特征的信息增益,选择信息增益最大的特征
信息增益的算法
输入:训练数据集D和特征A
输出:特征A对训练数据集D的信息增益g(D,A)
(1)计算数据集D的经验熵H(D)
H(D)=−∑k=1K|Ck||D|log2|Ck||D| H ( D ) = − ∑ k = 1 K | C k | | D | log 2 | C k | | D |
(2)计算特征A对数据集D的经验条件熵H(D|A)
H(D|A)=∑i=1n|Di||D|H(Di)=−∑i=1n|Di||D|∑k=1K|Dik||Di|log2|Dik||Di| H ( D | A ) = ∑ i = 1 n | D i | | D | H ( D i ) = − ∑ i = 1 n | D i | | D | ∑ k = 1 K | D i k | | D i | log 2 | D i k | | D i |
(3)计算信息增益
g(D,A)=H(D)−H(D|A) g ( D , A ) = H ( D ) − H ( D | A )- 以信息增益作为划分的训练数据集的特征,存在偏向于选择取值较多的特征的问题。可用
信息增益比
(information gain ratio)校正。 - 定义:特征A对训练数据集D的信息增益比
gR(D,A)
g
R
(
D
,
A
)
定义为其信息增益
g(D,A)
g
(
D
,
A
)
与训练数据集D关于特征A的值的熵
HA(D)
H
A
(
D
)
之比(n为特征A的取值个数)
gR(D,A)=g(D,A)HA(D)HA(D)=−∑i=1n|Di||D|log2|Di||D| g R ( D , A ) = g ( D , A ) H A ( D ) H A ( D ) = − ∑ i = 1 n | D i | | D | log 2 | D i | | D | - ID3算法核心是应用信息增益准则选择特征
ID3算法
输入:训练数据集D,特征集A,阈值 ε ε
输出:决策树T
(1)若D中所有实例同属于一类 Ck C k ,则T为单结点树,并将类 Ck C k 作为该结点的类标记,返回T;
(2)若 A=∅ A = ∅ ,则T为单结点树,并将D中所有实例数最大的类 Ck C k 作为该结点的类标记,返回T
(3)否则,计算A中各特征对的的信息增益,选择信息增益最大的特征 Ag A g
(4)如果 Ag A g 的信息增益小于与之 ε ε ,则设置T为单结点树,并将D中实例数量最大的类 Ck C k 作为该结点的类标记,返回T
(5)
否则,对 Ag A g 的每一可能值 ai a i ,依 Ag=ai A g = a i 将D分割为若干非空子集 Di D i ,将 Di D i 中实例数最大的类作为标记构建子结点,由结点及其子结点构成树T,返回T;
(6)对第i个子结点,以 Di D i 为训练集,以 A−Ag A − A g 为特征集,递归地调用步(1)~(5),得到子树 Ti T i ,返回 Ti T i- ID3算法只有树的生成,所以该算法生成的树容易产生过拟合
C4.5算法
,标准步骤中与ID3不同的仅将(3)中艺信息增益比选择特征剪枝
(pruning):在决策树学习中将已生成的树进行简化的过程,通过极小化决策树整体的损失函数来实现- 决策树学习的损失函数定义为
Cα(T)=∑t=1|T|NtHt(T)+α|T| C α ( T ) = ∑ t = 1 | T | N t H t ( T ) + α | T |
结点的经验熵
Ht(T)=−∑kNtkNtlogNtkNt H t ( T ) = − ∑ k N t k N t log N t k N t
左侧记为C(T),有
Cα(T)=C(T)+α|T| C α ( T ) = C ( T ) + α | T |
其中,C(T)表示模型对训练数据的预测误差,即模型与训练数据的拟合程度,|T|表示模型的复杂度, α α越大模型越简单
- 决策树生成只考虑了通过提高信息增益(或信息增益比)对训练数据进行更好的拟合。而决策树剪枝通过优化损失函数还考虑了减小模型复杂度。决策树生成学习局部的模型,决策树剪枝学习整体的模型
树的剪枝算法
输入:生成算法产生整个树T,参数 α α
输出:修剪后的子树 Tα T α
(1)计算每个结点的经验熵
(2)递归地从树的叶结点向上回缩
设一组叶结点会所到其父结点之前与之后的整体树分别为 TB T B 和 TA T A ,其对应的损失函数分别是 Cα(TB) C α ( T B ) 和 Cα(TA) C α ( T A ) ,若 Cα(TA)≤Cα(TB) C α ( T A ) ≤ C α ( T B ) ,则父结点变为新的叶结点
(3)返回(2)知道不能继续位置,得到损失函数最小的子树 Tα T α分类与回归树
(classification and regression tree, CART)模型可用于分类和回归问题,是在给定输入随机变量X条件下输出随机变量Y的条件概率分布的学习方法。决策树是二叉树
(1)决策树生成:尽量大
(2)决策树剪枝:损失函数最小- CART对回归树用平方误差最小化准则,对分类树用基尼指数最小化准则
最小二乘回归树生成算法
P69(不全)
输入:训练数据集D
输出:回归树 f(x) f ( x )
递归将每个区域划分为两个子区域,构建二叉决策树
(1)选择最优切分变量j与切分点s,使均方误差和最小
(2)用选定的(j,s)对划分区域并决定相应输出值
(3)继续对两个子区域调用步骤(1)(2),直至满足停止条件
(4)将输入空间划分为M个区域,生成决策树
f(x)=∑m=1MĉmI(x∈Rm) f ( x ) = ∑ m = 1 M c ^ m I ( x ∈ R m )基尼指数
表达了集合D的不确定性,基尼指数Gini(D,A)表达了经过A=a分割后的集合D的不确定性。
Gini(p)=∑k=1Kpk(1−pk)=1−∑k=1Kp2k G i n i ( p ) = ∑ k = 1 K p k ( 1 − p k ) = 1 − ∑ k = 1 K p k 2
对给定样本集合D,基尼指数为
Gini(D)=1−∑k=1K(|Ck||D|)2 G i n i ( D ) = 1 − ∑ k = 1 K ( | C k | | D | ) 2
对由特征A取值a分割的两个子集,特征A条件下,集合D的基尼指数为
Gini(D,A)=|D1||D|Gini(D1)+|D2||D|Gini(D2) G i n i ( D , A ) = | D 1 | | D | G i n i ( D 1 ) + | D 2 | | D | G i n i ( D 2 )
CART生成算法
P70
输入:训练数据集D,停止条件
输出:CART决策树
(1)计算基尼指数
(2)选择基尼指数最小的特征和切分点
(3)递归(1)(2),直至满足条件
(4)生成CART树- 待考证:基尼指数和熵的效果差不多,但是更快
CART剪枝算法
P73
(1)剪枝,形成一个子树序列
(2)交叉验证的到最优子树