决策树
- 树与二叉树
- 基本流程
- 划分选择
- 剪枝处理
- 连续值与缺失值处理
树与二叉树
树是有限元素的集合
- 根结点、内部节点、叶结点
- 父结点、子结点
- 层次、深度
二叉树
- 每个结点最多只能有2个子结点
简单实例
基本流程
决策树的生成是一个递归过程。在决策树基本算法中,有三种情形会导致递归返回
-
当前结点包含的样本全属于同一类别,无需划分
-
当前属性为空,或是所有样本在所有属性上取值相同,无需划分
把当前结点标记为叶结点,并将其类别设定为该结点所含样本最多的类别
-
当前结点包含的样本集合为空,不能划分
把当前结点标记为叶结点,将其类别设定为其父结点所含样本最多的类别
划分选择
-
信息增益 - > ID3
属性A对训练数据集D的信息增益Gain(D,A)定义为集合D的经验熵Ent(D)与属性A给定条件下D的经验条件熵Ent(D|A)之差
表示划分前后不确定性减少的程度,应选择信息增益最大的属性对样本进行划分
G a i n ( D , A ) = E n t ( D ) − E n t ( D ∣ A ) Gain(D,A)=Ent(D)-Ent(D|A) Gain(D,A)=Ent(D)−Ent(D∣A)
E n t ( D ) = − ∑ k = 1 K ∣ C k ∣ ∣ D ∣ l o g 2 ∣ C k ∣ ∣ D ∣ Ent(D)=-\sum_{k=1}^{K}\frac{|C_k|}{|D|}log_2\frac{|C_k|}{|D|} Ent(D)=−k=1∑K∣D∣∣Ck∣log2∣D∣∣Ck∣
E n t ( D ∣ A ) = ∑ i = 1 n ∣ D i ∣ ∣ D ∣ E n t ( D i ) Ent(D|A)=\sum_{i=1}^{n}\frac{|D_i|}{|D|}Ent(D_i) Ent(D∣A)=i=1∑n∣D∣∣Di∣Ent(Di)
-
信息增益比 - > C4.5
以信息增益为划分指标,存在偏向选择取值较多的属性的问题
属性A对训练数据集D的信息增益Gain(D,A)定义为其信息增益与训练数据集关于属性A的熵Ent(A)
G a i n _ r a t i o ( D , A ) = G a i n ( D , A ) E n t ( A ) Gain\_ratio(D,A)=\frac{Gain(D,A)}{Ent(A)} Gain_ratio(D,A)=Ent(A)Gain(D,A)
E n t ( A ) = − ∑ i = 1 V ∣ D i ∣ ∣ D ∣ l o g 2 ∣ D i ∣ ∣ D ∣ Ent(A)=-\sum_{i=1}^{V}\frac{|D_i|}{|D|}log_2\frac{|D_i|}{|D|} Ent(A)=−i=1∑V∣D∣∣Di∣log2∣D∣∣Di∣
-
基尼指数 - > CART
描述数据集D的纯度,表示一个随机选中的样本在子集中被分错的可能性,应选择基尼指数最小的特征进行划分。
基尼指数的定义为
G i n i ( p ) = ∑ k = 1 K p k ( 1 − p k ) = 1 − ∑ k = 1 K p k 2 Gini(p)=\sum_{k=1}^Kp_k(1-p_k)=1-\sum_{k=1}^Kp_k^2 Gini(p)=k=1∑Kpk(1−pk)=1−k=1∑Kpk2
样本集合D的基尼指数
G i n i ( D ) = 1 − ∑ k = 1 K ( ∣ C k ∣ ∣ D ∣ ) 2 Gini(D)=1-\sum_{k=1}^{K}(\frac{|C_k|}{|D|})^2 Gini(D)=1−k=1∑K(∣D∣∣Ck∣)2
按照特征A划分以后集合D的不确定性
G i n i ( D , A ) = ∣ D 1 ∣ ∣ D ∣ G i n i ( D 1 ) + ∣ D 2 ∣ ∣ D ∣ G i n i ( D 2 ) Gini(D,A)=\frac{|D_1|}{|D|}Gini(D_1)+\frac{|D_2|}{|D|}Gini(D_2) Gini(D,A)=∣D∣∣D1∣Gini(D1)+∣D∣∣D2∣Gini(D2)
CART是分类和回归树,这里只介绍分类树。由于CART是二叉树,在分裂时不仅要选择最优的特征,还要选择最优的二值切分点,在计算时要计算特征的全部取值对应的基尼指数。
决策树模型——决策树的生成
- ID3
- C4.5
- CART
实例——以二分类为例
使用ID3算法生成决策树
首先计算属性“色泽”的信息增益:
E n t ( D ) = − ( 8 17 l o g 2 8 17 + 9 17 l o g 2 9 17 ) = 0.998 Ent(D)=-(\frac{8}{17}log_2\frac{8}{17}+\frac{9}{17}log_2\frac{9}{17})=0.998 Ent(D)=−(178log2178+179log2179)=0.998
E n t ( D 1 ) = − ( 3 6 l o g 2 ( 3 6 ) + 3 6 l o g 2 ( 3 6 ) ) = 1.000 Ent(D_1)=-(\frac{3}{6}log_2(\frac{3}{6})+\frac{3}{6}log_2(\frac{3}{6}))=1.000 Ent(D1)=−(63log2(63)+63log2(63))=1.000
E n t ( D 2 ) = − ( 4 6 l o g 2 ( 4 6 ) + 2 6 l o g 2 ( 2 6 ) ) = 0.918 Ent(D_2)=-(\frac{4}{6}log_2(\frac{4}{6})+\frac{2}{6}log_2(\frac{2}{6}))=0.918 Ent(D2)=−(64log2(64)+62log2(62))=0.918
E n t ( D 3 ) = − ( 1 5 l o g 2 ( 1 5 ) + 4 5 l o g 2 ( 4 5 ) ) = 0.722 Ent(D_3)=-(\frac{1}{5}log_2(\frac{1}{5})+\frac{4}{5}log_2(\frac{4}{5}))=0.722 Ent(D3)=−(51log2(51)+54log2(54))=0.722
G a i n ( D , 色 泽 ) = E n t ( D ) − [ 6 17 E n t ( D 1 ) + 6 17 E n t ( D 2 ) + 5 17 E n t ( D 3 ) ] = 0.109 Gain(D,色泽)=Ent(D)-[\frac{6}{17}Ent(D_1)+\frac{6}{17}Ent(D_2)+\frac{5}{17}Ent(D_3)]=0.109 Gain(D,色泽)=Ent(D)−[176Ent(D1)+176Ent(D2)+175Ent(D3)]=0.109
类似的,可计算其他属性的信息增益
G a i n ( D , 根 蒂 ) = 0.143 ; G a i n ( D , 敲 声 ) = 0.141 ; G a i n ( D , 纹 理 ) = 0.381 ; Gain(D,根蒂)=0.143;Gain(D,敲声)=0.141;Gain(D,纹理)=0.381; Gain(D,根蒂)=0.143;Gain(D,敲声)=0.141;Gain(D,纹理)=0.381;
G a i n ( D , 脐 部 ) = 0.381 ; G a i n ( D , 触 感 ) = 0.006 ; Gain(D,脐部)=0.381;Gain(D,触感)=0.006; Gain(D,脐部)=0.381;Gain(D,触感)=0.006;
显然,属性“纹理”的信息增益最大,于是被选为划分属性。划分结果如下:
接下来进行进一步划分,最终结果如图
剪枝处理
-
预剪枝 训练时间开销小,但有欠拟合的风险
在决策树生成过程中,对每个结点在划分之前先进行估计,若当前结点的划分不能带来泛化性能提升,则停止划分并将当前结点标记为叶结点
-
后剪枝 泛化性能更好,但训练时间开销大
先生成一颗完整的决策树,然后自底向上的对叶结点进行考察,若将该结点对应的子树替换为叶结点带来泛化性能的提升,则将该结点替换为叶结点
举例来说,首先将西瓜数据集分成训练集和验证集
生成的未剪枝的决策树如下
预剪枝
后剪枝
连续值与缺失值处理
-
连续值
取每个区间的中点,找到其中信息增益最大的点,作为划分点。
对连续属性A,可考察包含n-1个元素的候选划分点集合:
T a = { a i + a i + 1 2 ∣ 1 ≤ i ≤ n − 1 } T_a=\{\frac{a^i+a^{i+1}}{2} | 1≤i≤n-1\} Ta={2ai+ai+1∣1≤i≤n−1}
然后选取最优的划分点进行样本集合划分:
G a i n ( D , A ) = max t ∈ T a G a i n ( D , A , t ) = max t ∈ T a E n t ( D ) − ∑ λ ∈ { − , + } ∣ D t λ ∣ ∣ D ∣ E n t ( D t λ ) Gain(D,A)=\max_{t \in T_a}Gain(D,A,t)=\max_{t \in T_a}Ent(D)-\sum_{\lambda\in\{-,+\}}\frac{|D_t^\lambda|}{|D|}Ent(D_t^\lambda) Gain(D,A)=t∈TamaxGain(D,A,t)=t∈TamaxEnt(D)−λ∈{−,+}∑∣D∣∣Dtλ∣Ent(Dtλ)
需要注意的是,与离散属性不同,若当前结点划分属性为连续属性,该属性还可作为其后代结点的划分属性。
-
缺失值
如果仅对无缺失值的样本进行学习,显然是对数据信息极大的浪费。
两个问题:
- 如何在属性值缺失的情况下进行划分属性选择?
- 给定划分属性,若样本在该属性上的值缺失,如何对样本进行划分?
给定训练集 D D D和属性 a a a,令 D ~ \tilde{D} D~表示在属性 a a a上没有缺失值的样本子集。假定属性 a a a有 V V V个取值 { a 1 , a 2 , . . . , a V } \{a_1,a_2,...,a_V\} {a1,a2,...,aV},令 D ~ v \tilde{D}_v D~v表示 D ~ \tilde{D} D~中在属性 a a a上取值为 a v a_v av的样本子集, D ~ k \tilde{D}_k D~k表示 D ~ \tilde{D} D~中属于第 k k k类的样本子集。假定我们为每个样本 x x x赋予一个权重 w x w_x wx,并定义
ρ = ∑ x ∈ D ~ w x ∑ x ∈ D w x \rho=\frac{\sum_{x\in \tilde{D}}w_x}{\sum_{x\in D}w_x} ρ=∑x∈Dwx∑x∈D~wxρ ~ k = ∑ x ∈ D ~ k w x ∑ x ∈ D ~ w x \tilde{\rho}_k=\frac{\sum_{x\in \tilde{D}_k}w_x}{\sum_{x\in \tilde{D}}w_x} ρ~k=∑x∈D~wx∑x∈D~kwx
r ~ v = ∑ x ∈ D ~ v w x ∑ x ∈ D ~ w x \tilde{r}_v=\frac{\sum_{x\in \tilde{D}^v}w_x}{\sum_{x\in \tilde{D}}w_x} r~v=∑x∈D~wx∑x∈D~vwx
这样就可将信息增益的公式推广为:
G a i n ( D , a ) = ρ × G a i n ( D ~ , a ) = ρ × ( E n t ( D ~ ) − ∑ k = 1 K r ~ v E n t ( D ~ v ) ) Gain(D,a)=\rho×Gain(\tilde{D},a)=\rho×(Ent(\tilde{D})-\sum_{k=1}^{K}\tilde{r}^vEnt(\tilde{D}_v)) Gain(D,a)=ρ×Gain(D~,a)=ρ×(Ent(D~)−k=1∑Kr~vEnt(D~v))
其中
E n t ( D ~ ) = − ∑ k = 1 K p ~ k l o g 2 p ~ k Ent(\tilde{D})=-\sum_{k=1}^{K}\tilde{p}_k log_2\tilde{p}_k Ent(D~)=−k=1∑Kp~klog2p~k
实例