决策树(decision tree)是一种基本的分类与回归方法,其主要优点是模型具有可读性,分类速度快。学习时利用损失函数(正则化的极大似然函数)最小化的原则建立决策树模型。预测时,对新的数据,利用决策树模型进行分类。根据一组训练数据学习的决策树不是唯一的,与训练数据不相矛盾的(能对训练数据进行正确分类)决策树可能有多个,也可能一个也没有。我们需要的是一个与训练数据矛盾较小(训练误差小)的决策树,同时具有很好的泛化能力(测试误差小)。
决策树学习通常包括 3 个步骤:特征选择、决策树的生成和决策树的修剪。其中前两个步骤是几乎同时进行的。在每一步中,我们构建根节点,选择最优特征,并根据该特征对训练数据集进行划分(对应于模型的局部最优),使得各个子集有一个在当前条件下最好的分类,同时完成该层决策树的构建(如果这些自己已经能够被基本正确分类,那么构建叶结点,否则继续对其进行分割)。如此递归地进行下去,直到所有训练数据自己被基本正确分类,或者没有合适的特征为止。这样就生成了一棵决策树。之后我们需要对已生成的树进行自上而下的剪枝,将树变得简单,从而具有更好的泛化能力(对应于模型的全局最优)。具体地,就是剪掉过于细分的叶节点,使其回退到父结点,甚至更高的结点,然后将父结点或者更高的结点改为新的叶结点。
数据有很多特征,那么在每一步中我们选择哪个特征?选择了特征之后又该如何在该特征上进行划分?这就是特征选择要做的事情。特征选择在预选区队训练数据有分类能力(与随机分类的结果有较大差异)的特征。特征选择有许多标准,我们根据这些标准对决策树学习的算法进行分类。比如ID3对应的标准是信息增益、C4.5对应的标准是信息增益比、CART对应的标准是基尼指数。下面给出这些标准的定义并结合实例进行说明。
熵:熵(entropy)表示随机变量不确定性的度量,设 X X X 是一个取有限个值的离散随机变量,其概率分布为
P ( X = x i ) = p i , i = 1 , 2 , ⋯   , n P(X = x_i) = p_i, \quad i = 1, 2, \cdots, n P(X=xi)=pi,i=1,2,⋯,n
则随机变量 X X X 的熵定义为:
H ( X ) = − ∑ i = 1 n p i log p i \color{Red}{H(X) = - \sum_{i = 1}^{n} p_i \log p_i} H(X)=−i=1∑npilogpi
若 p i = 0 p_i = 0 pi=0 ,则定义 0 log 0 = 0 0 \log 0 = 0 0log0=0 。通常式中对数以 2 为底,这时熵的单位称作比特(bit),以 e e e 和 10 为底的熵的单位称作纳特(nat)和哈托特(hat),因为熵只依赖于 X X X 的分布,因此也可写作 H ( p ) H(p) H(p) 。熵越大,随机变量的不确定性就越大。若熵中的概率由估计得到(特别是极大似然估计),这时熵称为经验熵(empirical entropy)。下图展示了二值随机变量熵 H ( p ) H(p) H(p) 随概率 p p p 变化的曲线。
条件熵:条件熵(conditional entropy) H ( Y ∣ X ) H(Y|X) H(Y∣X) 表示在已知随机变量 X X X 的条件下随机变量 Y Y Y 的不确定性。随机变量 X X X 给定的条件下随机变量 Y Y Y 的条件熵定义为:
H ( Y ∣ X ) = ∑ i = 1 n p i H ( Y ∣ X = x i ) \color{Red}{H(Y|X) = \sum_{i = 1}^{n} p_i H(Y|X = x_i)} H(Y∣X)=i=1∑npiH(Y∣X=xi)
当条件熵中的概率由估计(特别是极大似然估计)得到时称为经验条件熵(empirical conditional entropy)。
信息增益:信息增益(information gain)表示得知特征 X X X 的信息而使得类 Y Y Y 的信息的不确定性减少的程度,又称为互信息(mutual information)。特征 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 ) \color{Red}{g(D, A) = H(D) - H(D|A)} g(D,A)=H(D)−H(D∣A)
信息增益比:特征 A A A 对训练数据集 D D D 的信息增益比 g R ( D , A ) g_R (D,A) gR(D,A) 定义为其信息增益 g ( D , A ) g(D,A) g(D,A) 与训练数据集 D D D 关于特征 A A A 的值的熵 H A ( D ) H_A (D) HA(D) 之比,即
g R ( D , A ) = g ( D , A ) H A ( D ) \color{Red}{g_R (D, A) = \frac{g(D, A)}{H_A (D)}} gR(D,A)=HA(D)g(D,A)
其中, H A ( D ) = − ∑ j = 1 S ∣ D i ∣ ∣ D ∣ log 2 ∣ D i ∣ ∣ D ∣ H_A (D) = - \sum_{j = 1}^{S} \frac{|D_i|}{|D|} \log_2 \frac{|D_i|}{|D|} HA(D)=−∑j=1S∣D∣∣Di∣log2∣D∣∣Di∣ , S S S 是特征 A A A 取值的个数
以信息增益作为划分训练数据集的特征,存在偏向于选择取值较多的特征的问题,比如在学生信息中我们用学号作为特征,那么显然一次性就可以划分结束,但是这样的结果没有实际意义。使用信息增益比可以对这一问题进行校正
基尼指数:分类问题中,假设有 K K K 个类,样本点属于第 k k k 类的概率为 p k p_k pk ,则概率分布的基尼指数(Gini index)定义为
G i n i ( p ) = ∑ k = 1 K p k ( 1 − p k ) = 1 − ∑ k = 1 K p k 2 \color{Red}{Gini(p) = \sum_{k = 1}^{K} p_k (1 - p_k) = 1 - \sum_{k = 1}^{K}p_k^2} Gini(p)=k=1∑Kpk(1−pk)=1−k=1∑Kpk2
对于给定的样本集合 D D D ,其基尼指数为
G i n i ( D ) = 1 − ∑ k = 1 K ( ∣ C k ∣ ∣ D ∣ ) 2 \color{Red}{Gini(D) = 1 - \sum_{k = 1}^{K} \left(\frac{|C_k|}{|D|}\right)^2} Gini(D)=1−k=1∑K(∣D∣∣Ck∣)2
其中, C k C_k Ck 是 D D D 中属于第 k k k 类的样本子集。
如果样本集合 D D D 根据特征 A A A 是否取某一可能值 a a a 被分割成 D 1 D_1 D1 和 D 2 D_2 D2 两部分,即
D 1 = { ( x , y ) ∈ D ∣ A ( x ) = a } , D 2 = D − D 1 D_1 = \{(x, y)\in D| A(x) = a\}, \ D_2 = D - D_1 D1={(x,y)∈D∣A(x)=a}, D2=D−D1
则在特征 A A A 的条件下,集合 D D 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 ) \color{Red}{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)
直观来说,基尼指数反映了从数据集随机抽取两个样本,其类别标记不一致的概率,因此基尼指数越小,数据集纯度越高,基尼指数越大,数据集的不确定性越大。基尼指数 G i n i ( D ) Gini(D) Gini(D) 表示集合 D D D 的不确定性,基尼指数 G ( D , A ) G(D, A) G(D,A) 表示经 A = a A = a A=a 分割后集合 D D D 的不确定性。基尼指数越大,样本集合的不确定性也就越大。下图展示了二分类问题中,基尼指数 G i n i ( p ) Gini(p) Gini(p) 、熵之半 1 2 H ( p ) \frac{1}{2}H(p) 21H(p) 和分类误差率关于概率 p p p 的关系
ID3:选择信息增益最大的特征作为最优特征
C4.5:选择信息增益比最大的特征作为最优特征
CART:选择基尼指数最小的特征及其对应的切分点作为最优特征与最优切分点
输入:训练数据集 D D D ,特征集 A A A ,阈值 ϵ \epsilon ϵ
输出:决策树 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 = \varnothing 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 的信息增益小于阈值 ϵ \epsilon ϵ ,则设置 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 i D_i Di ,将 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
输入:训练数据集 D D D ,特征集 A A A ,阈值 ϵ \epsilon ϵ
输出:决策树 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 = \varnothing 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 的信息增益比小于阈值 ϵ \epsilon ϵ ,则设置 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 i D_i Di ,将 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
在C4.5中,对于连续型特征 x ( j ) x^{(j)} x(j) 采取了离散化处理(具体为二值化处理),比如某连续型特征在数据集上的取值从小到大为 { a 1 , a 2 , ⋯   , a n } \{ a_1, a_2, \cdots, a_n\} {a1,a2,⋯,an},可以在每两个值之间选择一个切分点 b b b(可以是左闭右开区间中任意一个值),这样得到了一个切分点集合 { b 1 , b 2 , ⋯   , b ) n − 1 } \{ b_1, b_2, \cdots, b){n - 1}\} {b1,b2,⋯,b)n−1}。基于 b i b_i bi 我们把该特征划分为了两个部分 D − = { x ∣ x ( j ) ≤ b i } D^{-} = \{x|x^{(j)} \le b_i\} D−={x∣x(j)≤bi} 和 D + = { x ∣ x ( j ) > b i } D^{+} = \{x|x^{(j)} \gt b_i\} D+={x∣x(j)>bi}。于是我们对每个 b i b_i bi 求信息增益(比),选择信息增益(比)最大的作为最优切分点。另外不同于离散型特征只作一次划分,可以对连续型属性进行多次划分,也就是说连续型特征可以多次使用。
当缺失值较少时,可以直接忽略有缺失值的样本,但是当缺失值较多时就不能忽略。对于含有缺失值的样本有两种情况:(1) 特征值缺失;(2) 标签值缺失。在C4.5中,对两种情况做如下处理:
特征值缺失:我们假设特征 x ( j ) x^{(j)} x(j) 含有缺失值,且未缺失部分的样本数据集为 D ~ \tilde{D} D~,定义
ρ = ∣ D ~ ∣ ∣ D ∣ \rho = \frac{|\tilde{D}|}{|D|} ρ=∣D∣∣D~∣
p ~ k = D ~ k ∣ D ~ ∣ , k = 1 , 2 , ⋯   , K \tilde{p}_k = \frac{\tilde{D}_k}{|\tilde{D}|}, \quad k = 1, 2, \cdots, K p~k=∣D~∣D~k,k=1,2,⋯,K
r ~ l = D ~ l ∣ D ~ ∣ , l = 1 , 2 , ⋯   , S j \tilde{r}_l = \frac{\tilde{D}_l}{|\tilde{D}|}, \quad l = 1, 2, \cdots, S_j r~l=∣D~∣D~l,l=1,2,⋯,Sj
其中 ρ \rho ρ 表示完整数据的比例。 D ~ k \tilde{D}_k D~k 表示完整数据中标签为第 k k k 类的样本数据集,所以 p ~ k \tilde{p}_k p~k 表示标签为第 k k k 类的样本在完整数据集中的比例。 D ~ l \tilde{D}_l D~l 表示特征 x ( j ) x^{(j)} x(j) 取值为 l l l 的数据集, S j S_j Sj 是特征 x ( j ) x^{(j)} x(j) 的取值个数,所以 r ~ l \tilde{r}_l r~l 表示特征 x ( j ) x^{(j)} x(j) 取值为 l l l 的样本在完整数据集中的比例。有了这些定义我们可以对信息增益公式做一些修改:
g ( D , x ( j ) ) = ρ ( H ( D ~ ) − ∑ l = 1 S j r ~ l H ( D ~ l ) ) g(D, x^{(j)}) = \rho \left( H(\tilde{D}) - \sum_{l = 1}^{S_j}\tilde{r}_l H(\tilde{D}_l)\right) g(D,x(j))=ρ⎝⎛H(D~)−l=1∑Sjr~lH(D~l)⎠⎞
总的来说就是单独计算一个特征的信息增益时先考虑其完整数据的信息增益,然后乘一个衡量缺失比例的系数。
标签值缺失:若缺失样本 x \mathcal{x} x 在特征(对所有特征) x ( j ) x^{(j)} x(j) 上的特征值已知,那么将其划分到这个结点上。比如一个样本属性值 x ( 1 ) = x 1 ( 1 ) , x ( 2 ) = x 1 ( 2 ) x^{(1)} = x^{(1)}_1, x^{(2)} = x^{(2)}_1 x(1)=x1(1),x(2)=x1(2),那么将该样本划分到 x ( 1 ) = x 1 ( 1 ) , x ( 2 ) = x 1 ( 2 ) x^{(1)} = x^{(1)}_1, x^{(2)} = x^{(2)}_1 x(1)=x1(1),x(2)=x1(2) 的叶结点,并且样本的权值 w x \mathcal{w}_{\mathcal{x}} wx保持不变。如果同时有某个特征值缺失,比如特征 x ( j ) x^{(j)} x(j) 缺失,那么先将样本点划分到特征 x ( j ) x^{(j)} x(j) 分支后的所有结点中,并且在各结点中的权值变为 r ~ l ⋅ w x \tilde{r}_l \cdot \mathcal{w}_{\mathcal{x}} r~l⋅wx
分类与回归树(Classification And Regression Tree,CART)即可用于分类也可用于回归,CART假设决策树是二叉树,内部结点特征的取值为“是”和“否”,左分支是取值为“是”的分支,右分支是取值为“否”的分支。
输入:训练数据集 D D D ,停止计算的条件
输出:CART 决策树
根据训练数据集,从根结点开始,递归地对每个结点进行以下操作,构建二叉决策树:
(1) 设结点的训练数据集为 D D D ,计算现有特征对该数据集的基尼指数 G i n i ( D ) Gini(D) Gini(D) 。此时对每一个特征 A A A ,对其可能取的每一个值 a a a ,根据样本点对 A = a A = a A=a 的测试为“是”或“否”将 D D D 分割成 D 1 D_1 D1 和 D 2 D_2 D2 两部分,然后计算 A = a A = a A=a 时的基尼指数 G i n i ( D , A ) Gini(D, A) Gini(D,A) ;
(2) 在所有可能的特征 A A A 以及它们所有可能的切分点中,选择基尼指数最小的特征及其对应的切分点作为最优特征与最优切分点。依最优特征与最优切分点,从现结点生成两个子结点,将训练数据集依特征分配到两个子结点中去;
(3) 对两个子结点递归地调用 (1),(2),直到满足停止条件;
(4) 生成 CART 决策树
算法停止计算的条件是结点中的样本个数小于预定阈值,或样本集的基尼指数小于预定阈值(样本基本属于同一类),或者没有更多特征。
一个回归树把特征空间的一个划分 R m , m = 1 , 2 , ⋯   , M R_m, m = 1, 2, \cdots, M Rm,m=1,2,⋯,M 映射到一个固定的输出值 c m c_m cm,回归模型可以表示为
f ( x ) = ∑ m = 1 M c m I ( x ∈ R m ) f(x) = \sum_{m = 1}^{M}c_m I(x \in R_m) f(x)=m=1∑McmI(x∈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 来表示回归树对于训练误差的预测误差,用平方误差最小的准则求解每个单元上的最优输出值,即均值(如果是绝对值误差最小,就是中位数)。那么重点就是怎样进行空间的划分。
我们先寻找最优切分点,对于一个特征 x ( j ) x^{(j)} x(j),我们设切分点 s ( j ) s(j) s(j) 将其特征空间划分为两部分
R 1 ( j , s ( j ) ) = { x ∣ x ( j ) ≤ s ( j ) } , R 2 ( j , s ( j ) ) = { x ∣ x ( j ) > s ( j ) } R_1 (j, s(j)) = \{x | x^{(j)} \le s(j)\}, \ R_2 (j, s(j)) = \{x | x^{(j)} \gt s(j)\} R1(j,s(j))={x∣x(j)≤s(j)}, R2(j,s(j))={x∣x(j)>s(j)}
于是,最优切分点就是使数据集在 R 1 , R 2 R_1, R_2 R1,R2 上平方误差最小的点。令
c 1 ^ ( j , s ( j ) ) = y i ˉ , x i ∈ R 1 ( j , s ( j ) ) \hat{c_1} (j, s(j)) = \bar{y_i}, \ x_i \in R_1 (j, s(j)) c1^(j,s(j))=yiˉ, xi∈R1(j,s(j))
c 2 ^ ( j , s ( j ) ) = y i ˉ , x i ∈ R 2 ( j , s ( j ) ) \hat{c_2} (j, s(j)) = \bar{y_i}, \ x_i \in R_2 (j, s(j)) c2^(j,s(j))=yiˉ, xi∈R2(j,s(j))
则特征 j j j 的最优切分点s(j) 使下式达到最小
g ( s ) = min c 1 ∑ x i ∈ R 1 ( y i − c 1 ( j , s ( j ) ) ) 2 + min c 2 ∑ x i ∈ R 1 ( y i − c 1 ( j , s ( j ) ) ) 2 g(s) = \mathop{\min}_{c_1} \sum_{x_i \in R_1}{(y_i - c_1 (j, s(j)))}^2 + \mathop{\min}_{c_2} \sum_{x_i \in R_1}{(y_i - c_1 (j, s(j)))}^2 g(s)=minc1xi∈R1∑(yi−c1(j,s(j)))2+minc2xi∈R1∑(yi−c1(j,s(j)))2
这样对于所有的特征,我们得到了一个特征与最优切分点对 ( j , s ( j ) ) (j, s(j)) (j,s(j)) ,下一步就是选取最优特征。令
m ( j ) = min s g ( s ) m(j) = \mathop{\min}_{s} g(s) m(j)=minsg(s)
于是最优特征就是最小 m ( j ) m(j) m(j) 对应的特征,我们按照该特征及其最优切分点对数据集进行划分。接着重复上述过程,直到满足停止条件。
输入:训练数据集 D D D
输出:回归树 f ( x ) f(x) f(x)
在训练数据集所在的输入空间中,递归地将每个区域划分为两个子区域并决定每个子区域上的输出值,构建二叉决策树:
(1) 选择最优切分变量 j j j 与切分点 s s s,求
min j , s [ min c 1 ∑ x i ∈ R 1 ( j , s ) + min c 1 ∑ x i ∈ R 1 ( j , s ) ] \mathop{\min}_{j,s}\left[ \mathop{\min}_{c_1} \sum_{x_i \in R_1 (j, s)} + \mathop{\min}_{c_1} \sum_{x_i \in R_1 (j, s)} \right] minj,s⎣⎡minc1xi∈R1(j,s)∑+minc1xi∈R1(j,s)∑⎦⎤
遍历变量 j j j,对固定的切分变量 j j j 扫描切分点 s s s,选择使上式达到最小值的对 ( j , s ) (j, s) (j,s);
(2) 用选定的对 ( j , s ) (j, s) (j,s) 划分区域并决定相应的输出值:
R 1 ( j , s ) = { x ∣ x ( j ) ≤ s ( j ) } , R 2 ( j , s ) = { x ∣ x ( j ) > s ( j ) } R_1 (j, s) = \{x | x^{(j)} \le s(j)\}, \ R_2 (j, s) = \{x | x^{(j)} \gt s(j)\} R1(j,s)={x∣x(j)≤s(j)}, R2(j,s)={x∣x(j)>s(j)}
c 1 ^ ( j , s ( j ) ) = y i ˉ , x i ∈ R 1 ( j , s ( j ) ) \hat{c_1} (j, s(j)) = \bar{y_i}, \ x_i \in R_1 (j, s(j)) c1^(j,s(j))=yiˉ, xi∈R1(j,s(j))
c 2 ^ ( j , s ( j ) ) = y i ˉ , x i ∈ R 2 ( j , s ( j ) ) \hat{c_2} (j, s(j)) = \bar{y_i}, \ x_i \in R_2 (j, s(j)) c2^(j,s(j))=yiˉ, xi∈R2(j,s(j))
(3) 继续对两个子区域调用步骤(1),(2),直至满足停止条件;
(4) 将输入空间划分为 M M M 个区域 R 1 , R 2 , ⋯   , R M R_1, R_2, \cdots, R_M R1,R2,⋯,RM,生成决策树:
f ( x ) = ∑ m = 1 M c m ^ I ( x ∈ R m ) f(x) = \sum_{m = 1}^{M}\hat{c_m}I(x \in R_m) f(x)=m=1∑Mcm^I(x∈Rm)
三个算法最明显的区别就是对于特征选择的策略不同,不过目的都是降低数据集的不确定性。具体来说,ID3使用信息增益来衡量不确定性,C4.5使用信息增益比来衡量不确定性,CART使用基尼指数来衡量不确定性。
具体比较ID3和C4.5:信息增益等于熵减去条件熵。信息增益越大说明一个特征减少数据集不确定性的能力越强,也就是该特征的分类能力越强。但是也有例外的情况,考虑一个极端例子,对班上的同学进行分类,如果我们用学号作为特征,那么每个学生分成了一类,得到了深度为2的树,但显然这样的分类没有任何意义。于是我们引入对树的分支(一个特征的特征值)的惩罚,即数据集关于特征的熵,从而得到信息增益比。因此,当存在特征有较多可取的值时,C4.5比ID3表现更好。另一个不同点是ID3只能处理离散型特征,而C4.5可以通过对连续型特征进行离散化处理来对连续型特征进行分支
对于CART:最直观的感觉就是,基尼指数好算得多,毕竟不用求对数。另一个明显的区别是CART树是一个二叉树,这也进一步简化了求基尼指数。但也正是因为这一结构,CART树存在深度过大的问题,所以更适合处理二值特征问题。此外,CART树可以处理回归问题。
前面生成的决策树往往对训练数据的分类很准确,但是对未知的测试数据的分类却没有那么准确,即出现过拟合现象。解决这一问题的办法就是考虑决策树的复杂度,对已生成的决策树进行剪枝(pruning)。这一过程往往通过极小化决策树整体的损失函数来实现。
设树 T T T 的叶结点个数为 ∣ T ∣ |T| ∣T∣ , t t t 是树 T T T 的叶结点,该结点有 N t N_t Nt 个样本点,其中 k k k 类样本点有 N t k N_{tk} Ntk 个, k = 1 , 2 , ⋯   , K k = 1, 2, \cdots, K k=1,2,⋯,K , H t ( T ) H_t(T) Ht(T) 为叶结点 t t t 上的经验熵, α ≥ 0 \alpha \ge 0 α≥0 为参数,则决策树的损失函数可以定义为
C α ( T ) = ∑ t = 1 ∣ T ∣ N t H t ( T ) C_\alpha (T) = \sum_{t = 1}^{|T|}N_t H_t (T) Cα(T)=t=1∑∣T∣NtHt(T)
其中经验熵为
H t ( T ) = − ∑ k = 1 K N t k N t log N t k N t H_t (T) = - \sum_{k = 1}^{K}\frac{N_{tk}}{N_t} \log \frac{N_{tk}}{N_t} Ht(T)=−k=1∑KNtNtklogNtNtk
从损失函数表达式可以看出,其第一项表示模型对训练数据的预测误差,第二项为对模型复杂度的惩罚。较大的 α \alpha α 促使选择更简单的模型,当 α = 0 \alpha = 0 α=0 时,不考虑模型的复杂度。剪枝就是当 α \alpha α 确定时,选择损失函数最小的模型。
可以看出,决策树生成只考虑了通过信息增益(或信息增益比、基尼指数)对训练数据进行更好的拟合,而决策树的剪枝通过优化损失函数还考虑了减小模型的复杂度。决策树生成学习局部的模型,而决策树剪枝学习整体的模型。
输入:生成算法的整个树 T T T ,参数 α \alpha α
输出:修剪后的子树 T α T_\alpha Tα
(1) 计算每个结点的经验熵;
(2) 递归地从树的叶结点向上回缩:如果回缩后整体树的损失函数小于等于回缩前的损失函数,则进行剪枝,即将父结点变为新的叶结点;
(3) 返回(2),直至不能继续为止,得到损失函数最小的子树 T α T_\alpha Tα。
每进行一次划分,对划分前后的树计算其在验证集上的准确率,如果划分后准确率降低,则不进行划分,否则继续进行树的生成
CART 的剪枝使用同样形式的损失函数:
C α ( T ) = C ( T ) + α ∣ T ∣ C_\alpha (T) = C(T) + \alpha |T| Cα(T)=C(T)+α∣T∣
其中, T T T 为任意子树, C ( T ) C(T) C(T) 为对训练数据的预测误差(基尼指数), ∣ T ∣ |T| ∣T∣ 为子树的叶结点个数, α \alpha α 为参数, C α ( T ) C_\alpha (T) Cα(T) 为参数是 α \alpha α 时的子树 T T T 的整体损失。对于CART树的剪枝我们分成两个步骤进行。
1. 剪枝并得到子树序列
从整体树 T 0 T_0 T0 开始剪枝,对 T 0 T_0 T0 的任意内部结点 t t t ,我们进行下列计算
显然当 α = 0 \alpha = 0 α=0 时,上面的损失函数更小,当 α \alpha α 很大时下面的损失函数更小,于是存在 α ( t ) = C ( t ) − C ( T t ) ∣ T t ∣ − 1 \alpha (t) = \frac{C(t) - C(T_t)}{|T_t| - 1} α(t)=∣Tt∣−1C(t)−C(Tt) 使得两个损失函数相同,这时上面的树结点更少,于是对 T t T_t Tt 进行剪枝得到子树 T α T_\alpha Tα
因此,对于 T 0 T_0 T0 中的每个结点 t t t ,我们可以求得对应的 α ( t ) \alpha (t) α(t) 和一个剪枝后的子树 T α T_\alpha Tα ( α 0 = 0 \alpha_0 = 0 α0=0 对应整体树 T 0 T_0 T0)。将刚刚得到的 α \alpha α 从小到大排列并记为 α 0 = 0 , α 1 , α 2 , ⋯ \alpha_0 = 0, \alpha_1, \alpha_2, \cdots α0=0,α1,α2,⋯ , T α T_\alpha Tα 进行对应的排列并记为 T 0 , T 1 , T 2 , ⋯ T_0, T_1, T_2, \cdots T0,T1,T2,⋯ ,于是 T i T_i Ti 为区间 [ α i , α i + 1 ] [\alpha_i, \alpha_{i+1}] [αi,αi+1] 的最优子树。
相比ID3和C4.5算法的剪枝, α \alpha α 没有给出一个固定的值,需要进一步判断这一系列子树中哪一个是最优的
2. 通过交叉验证法在子树序列中选取最优子树
对第 1 步中的到的子树序列在验证数据集上进行交叉验证(测试各子树的平方误差或基尼指数,平方误差或基尼指数最小的决策树被认为是最优的决策树)。当最优子树 T k T_k Tk 确定后,对应的 α k \alpha_k αk 也确定了,即得到最优决策树 T α T_\alpha Tα
下面是书中给出的伪代码,感觉是有问题的,会在之后提出我的问题
输入:CART算法生成的决策树 T 0 T_0 T0
输出:最优决策树 T α T_\alpha Tα
(1) 设 k = 0 k = 0 k=0 , T = T 0 T = T_0 T=T0 ;
(2) 设 α = + ∞ \alpha = + \infty α=+∞ ;
(3) 自下而上地对各个内部结点 t t t 计算(一个问题是内部结点是否包含根结点,如果包含那么可能与步骤(6)的结束条件产生矛盾) C ( T t ) C(T_t) C(Tt) , ∣ T t ∣ |T_t| ∣Tt∣ 以及
α ( t ) = C ( t ) − C ( T t ) ∣ T t ∣ − 1 \alpha (t) = \frac{C(t) - C(T_t)}{|T_t| - 1} α(t)=∣Tt∣−1C(t)−C(Tt)
α = min ( α , α ( t ) ) \alpha = \min (\alpha, \alpha(t)) α=min(α,α(t))
(4) 对 α ( t ) = α \alpha (t) = \alpha α(t)=α 的内部结点 t t t 进行剪枝(如果这轮迭代求得的 α ( t ) \alpha (t) α(t) 比前一轮大,那么就不需要剪枝),并对叶结点 t t t 以多数表决法决定其类,得到树 T T T ;
(5) 设 k = k + 1 k = k + 1 k=k+1 , α k = α \alpha_k = \alpha αk=α , T k = T T_k = T Tk=T ;
(6) 如果 T k T_k Tk 不是由根结点及两个叶结点构成的树,则回到步骤(3),否则令 T k = T n T_k = T_n Tk=Tn ;
(7) 采用交叉验证法在子树序列 T 0 , T 1 , ⋯   , T n T_0, T_1, \cdots, T_n T0,T1,⋯,Tn 中选取最优子树 T α T_\alpha Tα 。
我们假设有下面这样一棵树,记为 T 0 T_0 T0,对于给定的 α \alpha α,它有两个最优子树 T 1 , T 2 T_1, T_2 T1,T2,且 C α ( T 1 ) = C α ( T 2 ) C_\alpha(T_1) = C_\alpha(T_2) Cα(T1)=Cα(T2),因为剪枝操作是已经完成的,所以对于结点 t 1 , t 2 t_1, t_2 t1,t2,有 C ( t 1 ) ≤ C ( T t 1 ) , C ( t 2 ) ≤ C ( T t 2 ) C(t_1) \le C(T_{t_1}), \ C(t_2) \le C(T_{t_2}) C(t1)≤C(Tt1), C(t2)≤C(Tt2),那么在树 T 1 T_1 T1 中就应该继续在 t 2 t_2 t2 结点处进行剪枝,得到 T 3 T_3 T3,那么一定有 C α ( T 3 ) < C a l p h a ( T 1 ) C_\alpha(T_3) \lt C_alpha(T_1) Cα(T3)<Calpha(T1),这与 T 1 T_1 T1 是最优子树矛盾。
伪代码问题(由步骤(3)是否在当时就计算出每个内部结点对应的 α ( t ) \alpha (t) α(t)引起,如果认为是那么就不需要考虑下面的问题):
如果只是计算一个节点的 α ( t ) \alpha (t) α(t)就向下进行:
如果是计算全部节点的 α ( t ) \alpha (t) α(t)再向下进行应该会是下面的情况
预剪枝是在生成决策树的过程中进行的,每进行一次分支就进行判断该分支的必要性(即剪枝),对剪枝后的树,用验证机上的数据计算其准确率,如果分支后准确率更高,就不进行剪枝。后剪枝是先生成树,然后自下而上地考察内部结点,若剪枝引起精度上升就进行剪枝。
实际操作能够发现,后剪枝通常比预剪枝保留更多分支,一般情形下后剪枝决策树欠拟合的风险更小,泛化性能也更高。但是后剪枝的过程是在树生成以后进行的,需要对所有内部结点逐一考察,因此时间上的花销更大。而预剪枝虽然降低了过拟合的风险,但是有些分支当前划分虽然不能提升泛化能力,但是在其基础上进行的后续划分却有可能导致性能显著提高(如从第3层到第4层,泛化性能下降,即树在验证集上的准确率降低,因此停止了划分。但是如果继续划分下去,在第5层可能获得比第3层高的准确率)。预剪枝基于“贪心”本质禁止这些分支展开,给预剪枝决策树带来了欠拟合的风险。
CCP(Cost-Complelexity Pruning,代价复杂度剪枝)就是前面讲的CART的剪枝方法。方法自下而上地计算每个内部结点的损失,得到最优子树序列,然后根据其在验证集上的表现选出最优子树。
REP(Reduced-Error Pruning,错误率降低剪枝)借助决策树在验证集上的准确率判断是否进行剪枝。
PEP(Pessimistic-Error Pruning,悲观剪枝法)采取自上而下的剪枝并且不需要验证集,因此剪枝后错分率必定上升,所以计算错分率时添加了0.5的惩罚因子。考虑一个叶结点 t t t 中有 N t N_t Nt 个样本, E t E_t Et 个错分样本。那么该点的错分率 ε t = E t + 0.5 N t \varepsilon_t = \frac{E_t + 0.5}{N_t} εt=NtEt+0.5,如果树 T T T 有 ∣ T ∣ |T| ∣T∣ 个叶结点,那么树 T T T 的错分率为 ε T = ∑ t = 1 ∣ T ∣ E t + 0.5 N t = ∑ t = 1 ∣ T ∣ ( E t + 0.5 ) N \varepsilon_T = \sum_{t = 1}^{|T|} \frac{E_t + 0.5}{N_t} = \frac{\sum_{t = 1}^{|T|}(E_t + 0.5)}{N} εT=∑t=1∣T∣NtEt+0.5=N∑t=1∣T∣(Et+0.5),假设树 T T T 的样本服从二项分布 B ( N , ε T ) B(N, \varepsilon_T) B(N,εT) ,那么其期望误判个数为 N × ε T = ∑ t = 1 ∣ T ∣ ( E t + 0.5 ) N \times \varepsilon_T = \sum_{t = 1}^{|T|}(E_t + 0.5) N×εT=∑t=1∣T∣(Et+0.5),标准差为 N × ε T × ( 1 − ε T ) \sqrt{N \times \varepsilon_T \times (1 - \varepsilon_T)} N×εT×(1−εT)。当剪枝前的误判个数大于剪枝后的误判个数一个标准差时就决定剪枝
多变量决策树(multivariate decision tree)并不是多个特征的意思,而是在进行分支时不仅仅只看一个特征的取值,而是多个特征的线性组合。比如单变量决策树进行分支的依据可能是 x ( 1 ) ≤ 5.5 , x ( 1 ) > 5.5 x^{(1)} \le 5.5, x^{(1)} \gt 5.5 x(1)≤5.5,x(1)>5.5 或者 x ( 2 ) ≤ 7.5 , x ( 2 ) > 7.5 x^{(2)} \le 7.5, x^{(2)} \gt 7.5 x(2)≤7.5,x(2)>7.5 ,而多变量决策树进行分支的标准可能是 0.3 × x ( 1 ) + 0.7 × x ( 2 ) ≤ 0 , 0.3 × x ( 1 ) + 0.7 × x ( 2 ) > 0 0.3\times x^{(1)} + 0.7\times x^{(2)}\le 0, 0.3\times x^{(1)} + 0.7\times x^{(2)}\gt 0 0.3×x(1)+0.7×x(2)≤0,0.3×x(1)+0.7×x(2)>0。体现在特征空间中,单变量决策树对空间的划分是平行于坐标轴的,而多变量决策树是一条曲线。虽然单变量决策树有很好的解释性,但当学习任务非常复杂以至于需要进行多段划分时,多变量决策树就会变现的更好也更接近真实函数。下图中黑色折线就是多段的单变量划分结果,而红色曲线是多变量决策树的划分结果。
有的时候我们想要得到的输出结果不是只有一个,比如我们根据某地的气象数据预测其未来某段时间的风向、风速和是否降雨等,显然这些输出不属于同一个问题,不能归结为单一输出的多标签问题。如果输出之间完全独立,这时我们可以对每一个输出建立一个单独的决策树进行预测,但是当输出变量之间有较强的相关性时,建立多输出决策树是一个更好的选择。
C5.0是C4.5算法的改进。由于C4.5算法只适合于能够驻留于内存的数据集,面对大数据及十分乏力,因此提出了C5.0算法。C5.0使用熵的下降速度(因为找不到相关资料,这里不清楚这个速度是什么东西,个人感觉还是信息增益比啊)作为特征选择的依据,采用了Boosting方式提高了模型准确率;计算速度更快,占用内存更少;在面对数据遗漏和输入字段很多时表现稳健;相比其他模型更易于理解,模型退出的规则有非常直观的解释。
决策树模型的最大问题是方差很大,不稳定,很小的数据扰动就可能产生一棵完全不同的决策树。解决这一问题的办法是集成学习,组合多棵决策树的预测结果进行预测,也就是非常有名的随机森林。这一部分笔记等到学习集成学习的时候再进行整理。
通过下面贷款申请样本的数据学习一个贷款申请的决策树,用以对未来的贷款申请进行分类,即当新的客户提出贷款申请时,根据申请人的特征利用决策树决定是否批准贷款申请。
数据集用 D D D 表示,年龄、有工作、有自己的房子和信贷情况4个特征用 A 1 , A 2 , A 3 , A 4 A_1, A_2, A_3, A_4 A1,A2,A3,A4 表示,并以 1 , 2 , 3 1, 2, 3 1,2,3 表示年龄的值为青年、中年、老年,以 1 , 2 1, 2 1,2 表示有工作和有自己的房子的值为是和否,以 1 , 2 , 3 1, 2, 3 1,2,3 表示信贷情况的值为非常好、好和一般。
计算 D D D 的经验熵
H ( D ) = − ( 9 15 × log 2 9 15 + 6 15 × log 2 6 15 ) = 0.971 H(D) = - \left( \frac{9}{15} \times \log_2 \frac{9}{15} + \frac{6}{15} \times \log_2 \frac{6}{15} \right) = 0.971 H(D)=−(159×log2159+156×log2156)=0.971
计算特征 A i A_i Ai 给定条件下 D D D 的条件经验熵
H ( D ∣ A 1 ) = 5 15 H ( D ∣ A 1 = 1 ) + 5 15 H ( D ∣ A 1 = 2 ) + 5 15 H ( D ∣ A 1 = 3 ) = 5 15 ( − 2 5 log 2 2 5 − 3 5 log 2 3 5 ) + 5 15 ( − 3 5 log 2 3 5 − 2 5 log 2 2 5 ) + 5 15 ( − 4 5 log 2 4 5 − 1 5 log 2 1 5 ) = 0.888 H ( D ∣ A 2 ) = 5 15 H ( D ∣ A 2 = 1 ) + 10 15 H ( D ∣ A 2 = 2 ) = 0.647 H ( D ∣ A 3 ) = 6 15 H ( D ∣ A 3 = 1 ) + 9 15 H ( D ∣ A 3 = 2 ) = 0.551 H ( D ∣ A 4 ) = 5 15 H ( D ∣ A 4 = 1 ) + 6 15 H ( D ∣ A 4 = 2 ) + 4 15 H ( D ∣ A 4 = 3 ) = 0.647 \begin{aligned} H(D | A_1) & = \frac{5}{15}H(D | A_1 = 1) + \frac{5}{15}H(D | A_1 = 2) + \frac{5}{15}H(D | A_1 = 3) \\ & = \frac{5}{15}\left( -\frac{2}{5} \log_2 \frac{2}{5} -\frac{3}{5} \log_2 \frac{3}{5}\right) + \frac{5}{15}\left( -\frac{3}{5} \log_2 \frac{3}{5} -\frac{2}{5} \log_2 \frac{2}{5}\right) + \frac{5}{15}\left( -\frac{4}{5} \log_2 \frac{4}{5} -\frac{1}{5} \log_2 \frac{1}{5}\right) \\ & = 0.888 \\ H(D | A_2) & = \frac{5}{15}H(D | A_2 = 1) + \frac{10}{15}H(D | A_2 = 2) \\ & = 0.647 \\ H(D | A_3) & = \frac{6}{15}H(D | A_3 = 1) + \frac{9}{15}H(D | A_3 = 2) \\ & = 0.551 \\ H(D | A_4) & = \frac{5}{15}H(D | A_4 = 1) + \frac{6}{15}H(D | A_4 = 2) + \frac{4}{15}H(D | A_4 = 3) \\ & = 0.647 \end{aligned} H(D∣A1)H(D∣A2)H(D∣A3)H(D∣A4)=155H(D∣A1=1)+155H(D∣A1=2)+155H(D∣A1=3)=155(−52log252−53log253)+155(−53log253−52log252)+155(−54log254−51log251)=0.888=155H(D∣A2=1)+1510H(D∣A2=2)=0.647=156H(D∣A3=1)+159H(D∣A3=2)=0.551=155H(D∣A4=1)+156H(D∣A4=2)+154H(D∣A4=3)=0.647
计算信息增益
g ( D , A 1 ) = H ( D ) − H ( D ∣ A 1 ) = 0.083 g ( D , A 2 ) = H ( D ) − H ( D ∣ A 2 ) = 0.324 g ( D , A 3 ) = H ( D ) − H ( D ∣ A 3 ) = 0.420 g ( D , A 4 ) = H ( D ) − H ( D ∣ A 4 ) = 0.363 \begin{aligned} g(D, A_1) & = H(D) - H(D | A_1) = 0.083 \\ g(D, A_2) & = H(D) - H(D | A_2) = 0.324 \\ g(D, A_3) & = H(D) - H(D | A_3) = 0.420 \\ g(D, A_4) & = H(D) - H(D | A_4) = 0.363 \\ \end{aligned} g(D,A1)g(D,A2)g(D,A3)g(D,A4)=H(D)−H(D∣A1)=0.083=H(D)−H(D∣A2)=0.324=H(D)−H(D∣A3)=0.420=H(D)−H(D∣A4)=0.363
D D D 关于特征 A 3 A_3 A3 的信息增益最大,所以选择 A 3 A_3 A3 为最优特征
根据 A 3 A_3 A3 对数据集进行分割后,得到了两个新的子集 D 1 , D 2 D_1, D_2 D1,D2,其中 D 1 D_1 D1 都是同类样本,不需要再进行细分, D 2 D_2 D2 中有 3 个样本类别为“是”,6 个为“否”,需要进行进一步划分
计算 D D D 的经验熵
H ( D 2 ) = − ( 1 3 × log 2 1 3 + 2 3 × log 2 2 3 ) = 0.918 H(D_2) = - \left( \frac{1}{3} \times \log_2 \frac{1}{3} + \frac{2}{3} \times \log_2 \frac{2}{3} \right) = 0.918 H(D2)=−(31×log231+32×log232)=0.918
计算特征 A i A_i Ai 给定条件下 D D D 的条件经验熵
H ( D 2 ∣ A 1 ) = 4 9 H ( D 2 ∣ A 1 = 1 ) + 2 9 H ( D 2 ∣ A 1 = 2 ) + 3 9 H ( D 2 ∣ A 1 = 3 ) = 4 9 ( − 1 4 log 2 1 4 − 3 4 log 2 3 4 ) + 2 9 × 0 + 3 9 ( − 2 3 log 2 2 3 − 1 3 log 2 1 3 ) = 0.667 H ( D 2 ∣ A 2 ) = 3 9 H ( D 2 ∣ A 2 = 1 ) + 6 9 H ( D 2 ∣ A 2 = 2 ) = 0 H ( D 2 ∣ A 4 ) = 4 9 H ( D 2 ∣ A 4 = 1 ) + 4 9 H ( D 2 ∣ A 4 = 2 ) + 1 9 H ( D 2 ∣ A 4 = 3 ) = 0.444 \begin{aligned} H(D_2 | A_1) & = \frac{4}{9}H(D_2 | A_1 = 1) + \frac{2}{9}H(D_2 | A_1 = 2) + \frac{3}{9}H(D_2 | A_1 = 3) \\ & = \frac{4}{9}\left( -\frac{1}{4} \log_2 \frac{1}{4} -\frac{3}{4} \log_2 \frac{3}{4}\right) + \frac{2}{9}\times 0 + \frac{3}{9}\left( -\frac{2}{3} \log_2 \frac{2}{3} -\frac{1}{3} \log_2 \frac{1}{3}\right) \\ & = 0.667 \\ H(D_2 | A_2) & = \frac{3}{9}H(D_2 | A_2 = 1) + \frac{6}{9}H(D_2 | A_2 = 2) \\ & = 0 \\ H(D_2 | A_4) & = \frac{4}{9}H(D_2 | A_4 = 1) + \frac{4}{9}H(D_2 | A_4 = 2) + \frac{1}{9}H(D_2 | A_4 = 3) \\ & = 0.444 \end{aligned} H(D2∣A1)H(D2∣A2)H(D2∣A4)=94H(D2∣A1=1)+92H(D2∣A1=2)+93H(D2∣A1=3)=94(−41log241−43log243)+92×0+93(−32log232−31log231)=0.667=93H(D2∣A2=1)+96H(D2∣A2=2)=0=94H(D2∣A4=1)+94H(D2∣A4=2)+91H(D2∣A4=3)=0.444
计算信息增益
g ( D 2 , A 1 ) = H ( D 2 ) − H ( D 2 ∣ A 1 ) = 0.251 g ( D 2 , A 2 ) = H ( D 2 ) − H ( D 2 ∣ A 2 ) = 0.918 g ( D 2 , A 4 ) = H ( D 2 ) − H ( D 2 ∣ A 4 ) = 0.474 \begin{aligned} g(D_2, A_1) & = H(D_2) - H(D_2 | A_1) = 0.251 \\ g(D_2, A_2) & = H(D_2) - H(D_2 | A_2) = 0.918 \\ g(D_2, A_4) & = H(D_2) - H(D_2 | A_4) = 0.474 \\ \end{aligned} g(D2,A1)g(D2,A2)g(D2,A4)=H(D2)−H(D2∣A1)=0.251=H(D2)−H(D2∣A2)=0.918=H(D2)−H(D2∣A4)=0.474
D 2 D_2 D2 关于特征 A 2 A_2 A2 的信息增益最大,所以选择 A 2 A_2 A2 为最优特征
此时所有子集的样本点都是同一类,结束
剪枝
记前面生成的决策树为 T 0 T_0 T0 ,因为 D 1 , D 21 , D 22 D_1, D_{21}, D_{22} D1,D21,D22 中的样本点都是同一类,所以 H ( D 1 ) , H ( D 21 ) , H ( D 22 ) H(D_1), H(D_{21}), H(D_{22}) H(D1),H(D21),H(D22)都是 0 ,叶结点个数 ∣ T 0 ∣ = 3 |T_0| = 3 ∣T0∣=3,易求得 C α ( T 0 ) = 3 α C_\alpha (T_0) = 3\alpha Cα(T0)=3α
若在 D 2 D_2 D2 处进行剪枝,记剪枝后的树为 T 1 T_1 T1,对于叶结点 D 1 , D 2 D_1, D_2 D1,D2,知道 H ( D 1 ) = 0 , H ( D 2 ) = 0.918 H(D_1) = 0, H(D_2) = 0.918 H(D1)=0,H(D2)=0.918,于是
C α ( T 1 ) = 6 H ( D 1 ) + 9 H ( D 2 ) + 2 α = 8.262 + 2 α C_\alpha(T_1) = 6\ H(D_1) + 9\ H(D_2) + 2\alpha = 8.262 + 2\alpha Cα(T1)=6 H(D1)+9 H(D2)+2α=8.262+2α
故当 3 α ≥ 8.262 + 2 α 3\alpha \ge 8.262 + 2\alpha 3α≥8.262+2α,即 α ≥ 8.262 \alpha \ge 8.262 α≥8.262 时应该剪枝(取等时根据奥卡姆剃刀原则选择结点更少的)
若继续对 T 1 T_1 T1 进行剪枝,记剪枝后的树为 T 2 T_2 T2, 即以根结点为单结点的树, H ( D ) = 0.971 H(D) = 0.971 H(D)=0.971, C α ( T 2 ) = 15 H ( D ) + α = 14.565 + α C_\alpha (T_2) = 15 H(D) + \alpha = 14.565 + \alpha Cα(T2)=15H(D)+α=14.565+α,故当 8.262 + 2 α ≥ 14.565 + α 8.262 + 2\alpha \ge 14.565 + \alpha 8.262+2α≥14.565+α,即 α ≥ 6.303 \alpha \ge 6.303 α≥6.303 时应当剪枝
综上当 0 ≤ α < 6.303 0 \le \alpha \lt 6.303 0≤α<6.303 时,不需要剪枝,最终子树为整体树 T 0 T_0 T0,当 α ≥ 6.303 \alpha \ge 6.303 α≥6.303 时修剪后的子树为以根结点为单结点的树 T 2 T_2 T2
计算 D D D 的经验熵
H ( D ) = − ( 9 15 × log 2 9 15 + 6 15 × log 2 6 15 ) = 0.971 H(D) = - \left( \frac{9}{15} \times \log_2 \frac{9}{15} + \frac{6}{15} \times \log_2 \frac{6}{15} \right) = 0.971 H(D)=−(159×log2159+156×log2156)=0.971
计算特征 A i A_i Ai 给定条件下 D D D 的条件经验熵
H ( D ∣ A 1 ) = 5 15 H ( D ∣ A 1 = 1 ) + 5 15 H ( D ∣ A 1 = 2 ) + 5 15 H ( D ∣ A 1 = 3 ) = 5 15 ( − 2 5 log 2 2 5 − 3 5 log 2 3 5 ) + 5 15 ( − 3 5 log 2 3 5 − 2 5 log 2 2 5 ) + 5 15 ( − 4 5 log 2 4 5 − 1 5 log 2 1 5 ) = 0.888 H ( D ∣ A 2 ) = 5 15 H ( D ∣ A 2 = 1 ) + 10 15 H ( D ∣ A 2 = 2 ) = 0.647 H ( D ∣ A 3 ) = 6 15 H ( D ∣ A 3 = 1 ) + 9 15 H ( D ∣ A 3 = 2 ) = 0.551 H ( D ∣ A 4 ) = 5 15 H ( D ∣ A 4 = 1 ) + 6 15 H ( D ∣ A 4 = 2 ) + 4 15 H ( D ∣ A 4 = 3 ) = 0.647 \begin{aligned} H(D | A_1) & = \frac{5}{15}H(D | A_1 = 1) + \frac{5}{15}H(D | A_1 = 2) + \frac{5}{15}H(D | A_1 = 3) \\ & = \frac{5}{15}\left( -\frac{2}{5} \log_2 \frac{2}{5} -\frac{3}{5} \log_2 \frac{3}{5}\right) + \frac{5}{15}\left( -\frac{3}{5} \log_2 \frac{3}{5} -\frac{2}{5} \log_2 \frac{2}{5}\right) + \frac{5}{15}\left( -\frac{4}{5} \log_2 \frac{4}{5} -\frac{1}{5} \log_2 \frac{1}{5}\right) \\ & = 0.888 \\ H(D | A_2) & = \frac{5}{15}H(D | A_2 = 1) + \frac{10}{15}H(D | A_2 = 2) \\ & = 0.647 \\ H(D | A_3) & = \frac{6}{15}H(D | A_3 = 1) + \frac{9}{15}H(D | A_3 = 2) \\ & = 0.551 \\ H(D | A_4) & = \frac{5}{15}H(D | A_4 = 1) + \frac{6}{15}H(D | A_4 = 2) + \frac{4}{15}H(D | A_4 = 3) \\ & = 0.647 \end{aligned} H(D∣A1)H(D∣A2)H(D∣A3)H(D∣A4)=155H(D∣A1=1)+155H(D∣A1=2)+155H(D∣A1=3)=155(−52log252−53log253)+155(−53log253−52log252)+155(−54log254−51log251)=0.888=155H(D∣A2=1)+1510H(D∣A2=2)=0.647=156H(D∣A3=1)+159H(D∣A3=2)=0.551=155H(D∣A4=1)+156H(D∣A4=2)+154H(D∣A4=3)=0.647
计算信息增益
g ( D , A 1 ) = H ( D ) − H ( D ∣ A 1 ) = 0.083 g ( D , A 2 ) = H ( D ) − H ( D ∣ A 2 ) = 0.324 g ( D , A 3 ) = H ( D ) − H ( D ∣ A 3 ) = 0.420 g ( D , A 4 ) = H ( D ) − H ( D ∣ A 4 ) = 0.363 \begin{aligned} g(D, A_1) & = H(D) - H(D | A_1) = 0.083 \\ g(D, A_2) & = H(D) - H(D | A_2) = 0.324 \\ g(D, A_3) & = H(D) - H(D | A_3) = 0.420 \\ g(D, A_4) & = H(D) - H(D | A_4) = 0.363 \\ \end{aligned} g(D,A1)g(D,A2)g(D,A3)g(D,A4)=H(D)−H(D∣A1)=0.083=H(D)−H(D∣A2)=0.324=H(D)−H(D∣A3)=0.420=H(D)−H(D∣A4)=0.363
计算 D D D 关于特征的值的熵
H A 1 ( D ) = − ( 5 15 log 2 5 15 + 5 15 log 2 5 15 + 5 15 log 2 5 15 ) = 1.585 H A 2 ( D ) = − ( 5 15 log 2 5 15 + 10 15 log 2 10 15 ) = 1.585 H A 3 ( D ) = − ( 6 15 log 2 6 15 + 9 15 log 2 9 15 ) = 0.971 H A 4 ( D ) = − ( 5 15 log 2 5 15 + 6 15 log 2 6 15 + 4 15 log 2 4 15 ) = 1.566 \begin{aligned} H_{A_1}(D) & = - \left( \frac{5}{15} \log_2 \frac{5}{15} + \frac{5}{15} \log_2 \frac{5}{15} + \frac{5}{15} \log_2 \frac{5}{15} \right) = 1.585 \\ H_{A_2}(D) & = - \left( \frac{5}{15} \log_2 \frac{5}{15} + \frac{10}{15} \log_2 \frac{10}{15} \right) = 1.585\\ H_{A_3}(D) & = - \left( \frac{6}{15} \log_2 \frac{6}{15} + \frac{9}{15} \log_2 \frac{9}{15} \right) = 0.971\\ H_{A_4}(D) & = - \left( \frac{5}{15} \log_2 \frac{5}{15} + \frac{6}{15} \log_2 \frac{6}{15} + \frac{4}{15} \log_2 \frac{4}{15} \right) = 1.566 \end{aligned} HA1(D)HA2(D)HA3(D)HA4(D)=−(155log2155+155log2155+155log2155)=1.585=−(155log2155+1510log21510)=1.585=−(156log2156+159log2159)=0.971=−(155log2155+156log2156+154log2154)=1.566
计算信息增益比
g R ( D , A 1 ) = g ( D , A 1 ) H A 1 ( D ) = 0.052 g R ( D , A 2 ) = g ( D , A 2 ) H A 2 ( D ) = 0.204 g R ( D , A 3 ) = g ( D , A 3 ) H A 3 ( D ) = 0.433 g R ( D , A 4 ) = g ( D , A 4 ) H A 4 ( D ) = 0.232 \begin{aligned} g_R(D, A_1) & = \frac{g(D, A_1)}{H_{A_1}(D)} = 0.052 \\ g_R(D, A_2) & = \frac{g(D, A_2)}{H_{A_2}(D)} = 0.204 \\ g_R(D, A_3) & = \frac{g(D, A_3)}{H_{A_3}(D)} = 0.433 \\ g_R(D, A_4) & = \frac{g(D, A_4)}{H_{A_4}(D)} = 0.232 \end{aligned} gR(D,A1)gR(D,A2)gR(D,A3)gR(D,A4)=HA1(D)g(D,A1)=0.052=HA2(D)g(D,A2)=0.204=HA3(D)g(D,A3)=0.433=HA4(D)g(D,A4)=0.232
D D D 关于特征 A 3 A_3 A3 的信息增益比最大,所以选择 A 3 A_3 A3 为最优特征
根据 A 3 A_3 A3 对数据集进行分割后,得到了两个新的子集 D 1 , D 2 D_1, D_2 D1,D2,其中 D 1 D_1 D1 都是同类样本,不需要再进行细分, D 2 D_2 D2 中有 3 个样本类别为“是”,6 个为“否”,需要进行进一步划分
计算 D D D 的经验熵
H ( D 2 ) = − ( 1 3 × log 2 1 3 + 2 3 × log 2 2 3 ) = 0.918 H(D_2) = - \left( \frac{1}{3} \times \log_2 \frac{1}{3} + \frac{2}{3} \times \log_2 \frac{2}{3} \right) = 0.918 H(D2)=−(31×log231+32×log232)=0.918
计算特征 A i A_i Ai 给定条件下 D D D 的条件经验熵
H ( D 2 ∣ A 1 ) = 4 9 H ( D 2 ∣ A 1 = 1 ) + 2 9 H ( D 2 ∣ A 1 = 2 ) + 3 9 H ( D 2 ∣ A 1 = 3 ) = 4 9 ( − 1 4 log 2 1 4 − 3 4 log 2 3 4 ) + 2 9 × 0 + 3 9 ( − 2 3 log 2 2 3 − 1 3 log 2 1 3 ) = 0.667 H ( D 2 ∣ A 2 ) = 3 9 H ( D 2 ∣ A 2 = 1 ) + 6 9 H ( D 2 ∣ A 2 = 2 ) = 0 H ( D 2 ∣ A 4 ) = 4 9 H ( D 2 ∣ A 4 = 1 ) + 4 9 H ( D 2 ∣ A 4 = 2 ) + 1 9 H ( D 2 ∣ A 4 = 3 ) = 0.444 \begin{aligned} H(D_2 | A_1) & = \frac{4}{9}H(D_2 | A_1 = 1) + \frac{2}{9}H(D_2 | A_1 = 2) + \frac{3}{9}H(D_2 | A_1 = 3) \\ & = \frac{4}{9}\left( -\frac{1}{4} \log_2 \frac{1}{4} -\frac{3}{4} \log_2 \frac{3}{4}\right) + \frac{2}{9}\times 0 + \frac{3}{9}\left( -\frac{2}{3} \log_2 \frac{2}{3} -\frac{1}{3} \log_2 \frac{1}{3}\right) \\ & = 0.667 \\ H(D_2 | A_2) & = \frac{3}{9}H(D_2 | A_2 = 1) + \frac{6}{9}H(D_2 | A_2 = 2) \\ & = 0 \\ H(D_2 | A_4) & = \frac{4}{9}H(D_2 | A_4 = 1) + \frac{4}{9}H(D_2 | A_4 = 2) + \frac{1}{9}H(D_2 | A_4 = 3) \\ & = 0.444 \end{aligned} H(D2∣A1)H(D2∣A2)H(D2∣A4)=94H(D2∣A1=1)+92H(D2∣A1=2)+93H(D2∣A1=3)=94(−41log241−43log243)+92×0+93(−32log232−31log231)=0.667=93H(D2∣A2=1)+96H(D2∣A2=2)=0=94H(D2∣A4=1)+94H(D2∣A4=2)+91H(D2∣A4=3)=0.444
计算信息增益
g ( D 2 , A 1 ) = H ( D 2 ) − H ( D 2 ∣ A 1 ) = 0.251 g ( D 2 , A 2 ) = H ( D 2 ) − H ( D 2 ∣ A 2 ) = 0.918 g ( D 2 , A 4 ) = H ( D 2 ) − H ( D 2 ∣ A 4 ) = 0.474 \begin{aligned} g(D_2, A_1) & = H(D_2) - H(D_2 | A_1) = 0.251 \\ g(D_2, A_2) & = H(D_2) - H(D_2 | A_2) = 0.918 \\ g(D_2, A_4) & = H(D_2) - H(D_2 | A_4) = 0.474 \\ \end{aligned} g(D2,A1)g(D2,A2)g(D2,A4)=H(D2)−H(D2∣A1)=0.251=H(D2)−H(D2∣A2)=0.918=H(D2)−H(D2∣A4)=0.474
计算 D 2 D_2 D2 关于特征的值的熵
H A 1 ( D 2 ) = − ( 4 9 log 2 4 9 + 2 9 log 2 2 9 + 3 9 log 2 3 9 ) = 1.530 H A 2 ( D 2 ) = − ( 3 9 log 2 3 9 + 6 9 log 2 6 9 ) = 0.918 H A 4 ( D 2 ) = − ( 1 9 log 2 1 9 + 4 9 log 2 4 9 + 4 9 log 2 4 9 ) = 1.392 \begin{aligned} H_{A_1}(D_2) & = - \left( \frac{4}{9} \log_2 \frac{4}{9} + \frac{2}{9} \log_2 \frac{2}{9} + \frac{3}{9} \log_2 \frac{3}{9} \right) = 1.530 \\ H_{A_2}(D_2) & = - \left( \frac{3}{9} \log_2 \frac{3}{9} + \frac{6}{9} \log_2 \frac{6}{9} \right) = 0.918\\ H_{A_4}(D_2) & = - \left( \frac{1}{9} \log_2 \frac{1}{9} + \frac{4}{9} \log_2 \frac{4}{9} + \frac{4}{9} \log_2 \frac{4}{9} \right) = 1.392 \end{aligned} HA1(D2)HA2(D2)HA4(D2)=−(94log294+92log292+93log293)=1.530=−(93log293+96log296)=0.918=−(91log291+94log294+94log294)=1.392
计算信息增益比
g R ( D 2 , A 1 ) = g ( D 2 , A 1 ) H A 1 ( D 2 ) = 0.164 g R ( D 2 , A 2 ) = g ( D 2 , A 2 ) H A 2 ( D 2 ) = 1.000 g R ( D 2 , A 4 ) = g ( D 2 , A 4 ) H A 4 ( D 2 ) = 0.341 \begin{aligned} g_R(D_2, A_1) & = \frac{g(D_2, A_1)}{H_{A_1}(D_2)} = 0.164 \\ g_R(D_2, A_2) & = \frac{g(D_2, A_2)}{H_{A_2}(D_2)} = 1.000 \\ g_R(D_2, A_4) & = \frac{g(D_2, A_4)}{H_{A_4}(D_2)} = 0.341 \end{aligned} gR(D2,A1)gR(D2,A2)gR(D2,A4)=HA1(D2)g(D2,A1)=0.164=HA2(D2)g(D2,A2)=1.000=HA4(D2)g(D2,A4)=0.341
D 2 D_2 D2 关于特征 A 2 A_2 A2 的信息增益比最大,所以选择 A 2 A_2 A2 为最优特征
此时所有子集的样本点都是同一类,结束
剪枝
记前面生成的决策树为 T 0 T_0 T0 ,因为 D 1 , D 21 , D 22 D_1, D_{21}, D_{22} D1,D21,D22 中的样本点都是同一类,所以 H ( D 1 ) , H ( D 21 ) , H ( D 22 ) H(D_1), H(D_{21}), H(D_{22}) H(D1),H(D21),H(D22)都是 0 ,叶结点个数 ∣ T 0 ∣ = 3 |T_0| = 3 ∣T0∣=3,易求得 C α ( T 0 ) = 3 α C_\alpha (T_0) = 3\alpha Cα(T0)=3α
若在 D 2 D_2 D2 处进行剪枝,记剪枝后的树为 T 1 T_1 T1,对于叶结点 D 1 , D 2 D_1, D_2 D1,D2,知道 H ( D 1 ) = 0 , H ( D 2 ) = 0.918 H(D_1) = 0, H(D_2) = 0.918 H(D1)=0,H(D2)=0.918,于是
C α ( T 1 ) = 6 H ( D 1 ) + 9 H ( D 2 ) + 2 α = 8.262 + 2 α C_\alpha(T_1) = 6\ H(D_1) + 9\ H(D_2) + 2\alpha = 8.262 + 2\alpha Cα(T1)=6 H(D1)+9 H(D2)+2α=8.262+2α
故当 3 α ≥ 8.262 + 2 α 3\alpha \ge 8.262 + 2\alpha 3α≥8.262+2α,即 α ≥ 8.262 \alpha \ge 8.262 α≥8.262 时应该剪枝(取等时根据奥卡姆剃刀原则选择结点更少的)
若继续对 T 1 T_1 T1 进行剪枝,记剪枝后的树为 T 2 T_2 T2