1 决策树的基本概念
- 决策树(decision tree ) 是一种基本的分类与回归方法(这里主要讨论用于分类的决策树);
- 决策树模型呈树形结构,在分类问题中,表示基于特征对实例进行分类的过程
- 可以认为是 if-then 规则的集合。
- 由决策树的根结点到叶结点的每一条路径构建一条规则
- 路径上内部结点的特征对应着规则的条件,而叶结点的类对应着规则的结论
- 决策树的路径或其对应的if-then 规则集合具有一个重要的性质:互斥并且完备
- 即每一个实例,都只被一条路径或一条规则所覆盖
- 这里所谓覆盖是指:实例的特征与路径上的特征一致,或实例满足规则的条件
- 也可以认为是定义在特征空间与类空间上的条件概率分布。
- 这一条件概率分布定义在特征空间的一个划分(partition)上
- 将特征空间划分为互不相交的单元(cell)或区域(region),并在每个单元定义一个类的概率分布就构成了一个条件概率分布
- 决策树的一条路径对应于划分中的一个单元
- 决策树所表示的条件概率分布由各个单元给定条件下类的条件概率分布组成
- 由于决策树表示一个条件概率分布,所以深浅不同的决策树,对应着不同复杂度的概率模型
- 可以认为是 if-then 规则的集合。
- 决策树主要优点:模型具有可读性,分类速度快。
- 学习时,利用训练数据,根据损失函数最小化的原则,建立决策树模型。
- 预测时,对新的数据,利用决策树模型进行分类
- 决策树学习包括3 个步骤:特征选择、决策树的生成和决策树的修剪
- 决策树的生成,对应于模型的局部选择;决策树的剪枝对应于模型的全局选择
- 决策树的生成,只考虑局部最优;相对地,决策树的剪枝则考虑全局最优
- 决策树结构
- 结点(node)
- 内部结点(internal node)表示一个特证或属性
- 叶结点(leaf node)表示一个类
- 有向边(directed edge)
- 结点(node)
- 决策树生成过程
- 用决策树分类,从根结点开始,对实例的某一特征进行测试
- 根据测试结果,将实例分配到其子结点。这时,每一个子结点,对应着该特征的一个取值
- 如此递归地对实例进行测试并分配,直至达到叶结点
- 最后将实例分到叶结点的类中
2 特征选择
-
特征选择:选取对训练数据具有分类能力的特征
-
特征选择的准则
- 信息增益
- 信息增益比
-
熵(entropy):随机变量不确定性的度量
设 X X X是一个取有限个值的离散随机变量,其概率分布为 P ( X = x i ) = p i , i = 1 , 2 , . . . , n P(X=x_i)=p_i,i=1,2,...,n P(X=xi)=pi,i=1,2,...,n
则随机变量 X X X的熵: H ( X ) = − ∑ i = 1 n p i log p i = H ( p ) H(X)=-\sum_{i=1}^np_i\log p_i=H(p) H(X)=−∑i=1npilogpi=H(p)
- 熵只依赖于 X X X的分布, 而与 X X X的取值无关
- 此时,如果有 0 0 0 概率, 令 0 log 0 = 0 0\log0=0 0log0=0
-
条件熵 H ( Y ∣ X ) H(Y|X) H(Y∣X):在已知随机变量 X X X的条件下,随机变量 Y Y Y的不确定性
- 即: X X X给定条件下, Y Y Y的条件概率分布的熵,对 X X X的数学期望
- H ( Y ∣ X ) = ∑ i = 1 n p i H ( Y ∣ X = x i ) H(Y|X)=\sum_{i=1}^np_iH(Y|X=x_i) H(Y∣X)=∑i=1npiH(Y∣X=xi)
-
经验熵 和 经验条件熵:即熵和条件熵,由数据估计〈特别是极大似然估计〉得到。
-
信息增益(information gain)表示得知特征 X X X的信息,而使得类 Y Y Y的信息的不确定性减少的程度
- 特征 A A A对训练数据集 D D D的信息增益 g ( D , A ) g(D,A) g(D,A):集合 D D D的经验娟 H ( D ) H(D) H(D) 与 特征 A A A给定条件下 D D D的经验条件娟 H ( D ∣ A ) H(D|A) H(D∣A)之差
- g ( D , A ) = H ( D ) − H ( D ∣ A ) g(D,A)=H(D)-H(D|A) g(D,A)=H(D)−H(D∣A)
-
信息增益
-
说明:
D D D:训练集
∣ D ∣ |D| ∣D∣:训练集 D D D的样本容量(个数)
C k C_k Ck:类, k = 1 , 2 , . . . , K k=1,2,...,K k=1,2,...,K ,总共有 K K K个类
∣ C k ∣ |C_k| ∣Ck∣:类 C k C_k Ck的样本个数,且 ∑ k = 1 K ∣ C k ∣ = ∣ D ∣ \sum_{k=1}^K|C_k|=|D| ∑k=1K∣Ck∣=∣D∣
A A A:特征,有 n n n个不同取值, A = { a 1 , a 2 , . . . , a i , . . . , a n } A=\{a_1,a_2,...,a_i,...,a_n\} A={a1,a2,...,ai,...,an}
D i D_i Di :训练集 D D D的子集,根据特征 A A A的取值将 D D D分为 n n n个子集
∣ D i ∣ |D_i| ∣Di∣:子集 D i D_i Di的样本个数,且 ∑ k = 1 n ∣ D i ∣ = ∣ D ∣ \sum_{k=1}^n|D_i|=|D| ∑k=1n∣Di∣=∣D∣
D i k D_{ik} Dik:子集 D i D_i Di中,属于类 C k C_k Ck的 样本 的集合, D i k = D i ⋂ C k D_{ik}=D_i\bigcap C_k Dik=Di⋂Ck
∣ D i k ∣ |D_{ik}| ∣Dik∣: D i k D_{ik} Dik的样本个数
-
算法
输入:训练集 D D D 和特征 A A A
输出:特征 A A A 对训练集 D D D 的信息增益 g ( D , A ) g(D,A) g(D,A)
(1)数据集 D D D 的经验熵: H ( D ) = − ∑ k = 1 K ∣ C k ∣ ∣ D ∣ log 2 ∣ C k ∣ ∣ D ∣ H(D)=-\sum_{k=1}^K\frac{|C_k|}{|D|}\log_2\frac{|C_k|}{|D|} H(D)=−∑k=1K∣D∣∣Ck∣log2∣D∣∣Ck∣
(2)特征 A A A 对训练集 D D D 的经验条件熵: 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 ∣ H(D|A)=\sum_{i=1}^n\frac{|D_i|}{|D|}H(D_i)=-\sum_{i=1}^n\frac{|D_i|}{|D|}\sum_{k=1}^K\frac{|D_{ik}|}{|D_i|}\log_2\frac{|D_{ik}|}{|D_i|} H(D∣A)=∑i=1n∣D∣∣Di∣H(Di)=−∑i=1n∣D∣∣Di∣∑k=1K∣Di∣∣Dik∣log2∣Di∣∣Dik∣
(3)信息增益: g ( D , A ) = H ( D ) − H ( D ∣ A ) g(D,A)=H(D)-H(D|A) g(D,A)=H(D)−H(D∣A)
-
-
信息增益比
- 以信息增益作为特征选择的准则,偏向于选择 取值较多的特征,使用信息增益比(information gain ratio)可以对这一问题进行校正
- 特征
A
A
A 对训练集
D
D
D 的信息增益比:信息增益
g
(
D
,
A
)
g(D,A)
g(D,A) 与训练集
D
D
D关于特征
A
A
A的值的经验熵之比
- 信息增益比: g R ( D , A ) = g ( D , A ) H A ( D ) g_R(D,A)=\frac{g(D,A)}{H_A(D)} gR(D,A)=HA(D)g(D,A),其中, H A ( D ) = − ∑ i = 1 n ∣ D i ∣ ∣ D ∣ log 2 ∣ D i ∣ ∣ D ∣ H_A(D)=-\sum_{i=1}^n\frac{|D_i|}{|D|}\log_2\frac{|D_i|}{|D|} HA(D)=−∑i=1n∣D∣∣Di∣log2∣D∣∣Di∣, n n n是特征 A A A取值的个数。
3 决策树的生成
-
I D 3 ID3 ID3算法
-
在决策树各个结点上应用信息增益准则选择特征,递归地构建决策树。
-
输入:训练数据集 D D D,特征集 A A A, 阈值 ε \varepsilon ε;
输出:决策树 T T T。
(1)若 D D D中所有实例属于同一类 C k C_k Ck,则 T T T为单结点树,并将类 C k C_k Ck作为该结点的类标记,返回 T T T;
(2)若 A = ∅ A=\emptyset A=∅,则 T T T为单结点树,并将 D D D中实例数最大的类 C k C_k Ck作为该结点的类标记,返回 T T T;(3)否则, 计算 A A A中各特征对 D D D的信息增益, 选择信息增益最大的特征 A g A_g Ag;
(4)如果 A g A_g Ag的信息增益小于阈值 ε \varepsilon ε,则置 T T T为单结点树,并将 D D D中实例数最大的类 C k C_k Ck作为该结点的类标记,返回 T T T;
(5)否则, 对 A g A_g Ag的每一可能值 a i a_i ai,依 A g = a i A_g=a_i Ag=ai,将 D D D分割为若干非空子集 D D D,将 D i D_i Di 中实例数最大的类作为标记,构建子结点, 由结点及其子结点构成树 T T T, 返回 T T T;
(6)对第 i i i个子结点,以 D i D_i Di 为训练集,以 A − { A g } A-\{A_g\} A−{Ag}为特征集,递归地调用
步(1)~步(5),得到子树 T i T_i Ti,返回 T i T_i Ti。
-
-
C 4.5 C4.5 C4.5算法
-
C 4.5 C4.5 C4.5算法 对 I D 3 ID3 ID3算法进行了改进, C 4.5 C4.5 C4.5算法在决策树生成的过程中,用信息增益比来选择特征。
-
输入:训练数据集 D D D,特征集 A A A, 阈值 ε \varepsilon ε;
输出:决策树 T T T。
(1)若 D D D中所有实例属于同一类 C k C_k Ck,则 T T T为单结点树,并将类 C k C_k Ck作为该结点的类标记,返回 T T T;
(2)若 A = ∅ A=\emptyset A=∅,则 T T T为单结点树,并将 D D D中实例数最大的类 C k C_k Ck作为该结点的类标记,返回 T T T;(3)否则, 计算 A A A中各特征对 D D D的信息增益比, 选择信息增益比最大的特征 A g A_g Ag;
(4)如果 A g A_g Ag的信息增益比小于阈值 ε \varepsilon ε,则置 T T T为单结点树,并将 D D D中实例数最大的类 C k C_k Ck作为该结点的类标记,返回 T T T;
(5)否则, 对 A g A_g Ag的每一可能值 a i a_i ai,依 A g = a i A_g=a_i Ag=ai,将 D D D分割为若干非空子集 D D D,将 D i D_i Di 中实例数最大的类作为标记,构建子结点, 由结点及其子结点构成树 T T T, 返回 T T T;
(6)对第 i i i个子结点,以 D i D_i Di 为训练集,以 A − { A g } A-\{A_g\} A−{Ag}为特征集,递归地调用步(1)~步(5),得到子树 T i T_i Ti,返回 T i T_i Ti。
-
4 决策树的剪枝
-
过拟合的原因:学习时,过多地考虑如何提高对训练数据的正确分类,从而构建出过于复杂的决策树。
-
剪枝(pruning):在决策树学习中将己生成的树进行简化的过程。具体地,从己生成的树上裁掉一些子树或叶结点,并将其根结点或父结点作为新的叶结点,从而简化分类树模型。
-
决策树的剪枝,往往通过 极小化 决策树整体的损失函数或代价函数来实现。
-
决策树的剪枝算法
-
说明
-
T T T:决策树
∣ T ∣ |T| ∣T∣:决策树 T T T的叶结点个数,表示模型复杂度
t t t:决策树 T T T的叶结点
N t N_t Nt:叶结点 t t t的样本个数,其中 k k k类有 N t k N_{tk} Ntk个样本, k = 1 , 2 , . . . , K k=1,2,...,K k=1,2,...,K
-
-
决策树学习的损失函数
-
叶结点 t t t上的经验熵: H t ( T ) = − ∑ k = 1 K N t k N t log 2 N t k N t H_t(T)=-\sum_{k=1}^K\frac{N_{tk}}{N_t}\log_2\frac{N_{tk}}{N_t} Ht(T)=−∑k=1KNtNtklog2NtNtk
-
损失函数 C α ( T ) = ∑ t = 1 ∣ T ∣ N t H t ( T ) + α ∣ T ∣ C_\alpha(T)=\sum_{t=1}^{|T|}N_tH_t(T)+\alpha|T| Cα(T)=∑t=1∣T∣NtHt(T)+α∣T∣
-
模型对训练数据的预测误差: C ( T ) = ∑ t = 1 ∣ T ∣ N t H t ( T ) = ∑ t = 1 ∣ T ∣ ∑ k = 1 K N t k log 2 N t k N t C(T)=\sum_{t=1}^{|T|}N_tH_t(T)=\sum_{t=1}^{|T|}\sum_{k=1}^KN_{tk}\log_2\frac{N_{tk}}{N_t} C(T)=∑t=1∣T∣NtHt(T)=∑t=1∣T∣∑k=1KNtklog2NtNtk
- C ( T ) C(T) C(T),即 模型与训练数据的拟合程度
-
继而,有损失函数 C α ( T ) = C ( T ) + α ∣ T ∣ C_\alpha(T)=C(T)+\alpha|T| Cα(T)=C(T)+α∣T∣
- 模型与训练数据的拟合程度 C ( T ) C(T) C(T) 与 模型复杂度 ∣ T ∣ |T| ∣T∣ ,经过参数 α ≥ 0 \alpha\geq0 α≥0控制两者,对损失函数的影响。
-
-
决策树的剪枝算法
输入:生成算法严生的整个树 T T T,参数 α \alpha α;
输出:修剪后的子树 T α T_\alpha Tα。
(1)计算每个结点的经验熵
(2)递归地从树的叶结点向上回缩。设一组叶结占回缩到其父结点之前与之后的整体树分别为 T B T_B TB与 T A T_A TA,其对应的损失函数值分别是 C α ( T B ) C_\alpha(T_B) Cα(TB)与 C α ( T A ) C_\alpha(T_A) Cα(TA),如果 C α ( T A ) ≤ C α ( T B ) C_\alpha(T_A)\leq C_\alpha(T_B) Cα(TA)≤Cα(TB) ,则进行剪枝,即将父结点变为新的叶结点;
(3)返回(2)直至不能继续为止,得到损失函数最小的子树 T T T。
注意:步骤(2)只需考虑两个树的损失函数的差,其计算可以在局部进行,所以,决策树的剪枝算法可以由一种动态规划的算法实现。
-
决策树之CART算法
-
CART算法三个步骤:特征选择、树的生成、树的剪枝
-
CART算法:在给定输入随机变量 X X X条件下,输出随机变量 Y Y Y的条件概率分布的学习方法
- CART 假设决策树是二叉树
- 内部结点特征的取值为“是”和“否”。左分支是取值为"是"的分支,右分支是取值为"否"的分支
- 这样的决策树等价于递归地二分每个特征,将输入空间即特征空间划分为有限个单元,并在这些单元上确定预测的概率分布,也就是在输入给定的条件下,输出的条件概率分布
-
回归树生成
-
说明
训练集 D D D: D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) } D=\{(x_1,y_1),(x_2,y_2),...,(x_N,y_N)\} D={(x1,y1),(x2,y2),...,(xN,yN)}
输入空间划分为 M M M个单元 R m R_m Rm, m = { 1 , 2 , . . . , M } m=\{1,2,...,M\} m={1,2,...,M}
每个单元 R m R_m Rm上有一个固定的输出值 c m c_m cm
回归树模型可表示为: f ( x ) = ∑ m = 1 M c m I ( x ∈ R m ) f(x)=\sum_{m=1}^M c_mI(x\in R_m) f(x)=∑m=1McmI(x∈Rm)
用平方误差来表示回归树对于训练集(划分好的单元 R m R_m Rm)的预测误差: ∑ x i ∈ R m ( y i − f ( x i ) ) 2 \sum_{x_i\in R_m}(y_i-f(x_i))^2 ∑xi∈Rm(yi−f(xi))2
单元 R m R_m Rm的输出值 c m c_m cm的最优值 c ^ m \hat c_m c^m :单元 R m R_m Rm上所有输入实例 x i x_i xi对应的输出 y i y_i yi的均值。
c ^ m = a v e ( y i ∣ x i ∈ R m ) \hat c_m=ave(y_i|x_i\in R_m) c^m=ave(yi∣xi∈Rm)
对输入空间的进行划分:选择第 j j j个变量 x ( j ) x^{(j)} x(j)和它取的值 s s s,作为切分变量(splitting variable)和切分点(splitting point),并定义两个区域 R 1 ( j , s ) = { x ∣ x j ≤ s } R_1(j,s)=\{x|x^{j}\leq s\} R1(j,s)={x∣xj≤s}, R 2 ( j , s ) = { x ∣ x j > s } R_2(j,s)=\{x|x^{j}>s\} R2(j,s)={x∣xj>s}
-