第五章 决策树

参考文献 李航 《统计学习方法》

决策树是一种基本的分类与回归方法,在此主要讨论基于分类的决策树,其模型呈现树形结构,表示基于特征对实例进行分类的过程。
主要优点:可读性,分类速度快
决策树学习的三个步骤:特征选择,决策树的生成和决策树的修剪
常用算法:ID3、C4.5和CART

决策树模型

决策树由结点和有向边组成,结点包括:叶结点和内部结点,内部结点表示一个特征或属性,叶结点表示类
决策树可被看做一个if-then的规则的集合,重要性质:互斥且完备,即每个实例都被一条路径或一条规则所覆盖,且只被一条路径或规则覆盖

决策树学习

假设给定训练数据集: 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)},其中 x i = ( x i ( 1 ) , x i ( 2 ) , . . . , x i ( n ) ) x_{i}=(x_{i}^{(1)},x_{i}^{(2)},...,x_{i}^{(n)}) xi=(xi(1),xi(2),...,xi(n)) n n n为特征数, y i ∈ { 1 , 2 , . . . , K } y_i\in\{1,2,...,K\} yi{1,2,...,K}为类别标记, i = 1 , 2 , . . . , N i=1,2,...,N i=1,2,...,N为样本容量数.
决策树的学习本质上是从训练集中归纳出一组分类规则,决策树学习是由训练数据集估计条件概率模型.
决策树学习的损失函数通常是正则化的极大似然函数.
决策树学习的策略是以损失函数为目标函数的最小化.

从所有可能的决策树中选取最优的决策树是NP完全问题,所以现实中,决策树学习算法通常采用启发式方法,近似求解这一优化问题,这样得到的决策树是次最优的
⇒ 递 归 地 选 取 次 最 优 特 征 → 依 据 特 征 对 数 据 集 进 行 分 割 ⇒ 决 策 树 的 构 建 \Rightarrow 递归地选取次最优特征\rightarrow 依据特征对数据集进行分割\Rightarrow 决策树的构建
以上方法生成的决策树可能对训练数据有很好的分类能力,但是对未知的测试数据未必有很好的分类能力,即可能发生过拟合现象。我们需要对已生成的树进行自下而上的剪枝,将树变得简单具有较强的泛化能力
决策树表示一个条件概率分布 ⇒ \Rightarrow 深浅不同的决策树对应着不同复杂的概率模型
决策树的生成对应于模型的局部选择,只考虑局部最优 决策树的剪枝对应于模型的全局选择,考虑全局最优

特征选择

特征选择在于选取对训练数据具有分类能力的特征(如果利用一个特征进行分类的结果与随机分类的结果没有很大差别,则称这个特征是没有分类能力的)
特征选择的准则:信息增益或信息增益比
特征选择是决定使用哪个特征来划分特征空间

信息增益

信息量:某事件发生的概率小,则该事件的信息量大, h ( x ) = − l o g 2 ( x ) h(x)=-log_2(x) h(x)=log2(x)
如果两个事件X和Y独立,即 P ( X Y ) = P ( X ) P ( Y ) P(XY)=P(X)P(Y) P(XY)=P(X)P(Y),假设两者的信息量分别为 H ( X ) , H ( Y ) H(X),H(Y) H(X),H(Y),则两者同时发生的信息量为 H ( X Y ) = H ( X ) + H ( Y ) H(XY)=H(X)+H(Y) H(XY)=H(X)+H(Y)

:表示随机变量不确定性的度量,设 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 l o g p i H(X)=-\sum\limits_{i=1}^{n}p_ilogp_i H(X)=i=1npilogpi
熵只依赖于 X X X的分布,而与 X X X的取值无关,所以也可将 X X X的熵记作 H ( p ) H(p) H(p), H ( p ) = − ∑ i = 1 n p i l o g p i H(p)=-\sum\limits_{i=1}^{n}p_ilogp_i H(p)=i=1npilogpi
熵越大,随机变量的不确定性越大, 0 ≤ H ( p ) ≤ l o g n 0\leq H(p) \leq logn 0H(p)logn

两点分布:熵为 H ( p ) = − p l o g p − ( 1 − p ) l o g ( 1 − p ) H(p)=-plogp-(1-p)log(1-p) H(p)=plogp(1p)log(1p), p = 0 或 p = 1 时 , H ( p ) = 0 p=0或p=1时,H(p)=0 p=0p=1H(p)=0,随机变量完全没有不确定性, p = 0.5 时 , H ( p ) = 1 p=0.5时,H(p)=1 p=0.5H(p)=1,熵取值最大,随机变量的不确定性越大

条件熵:条件熵 H ( Y ∣ X ) H(Y|X) H(YX)表示在已知随机变量 X X X的条件下随机变量 Y Y Y的不确定性,设有随机变量 ( X , Y ) (X,Y) X,Y,其联合概率分布为 P ( X = x i , Y = y j ) = p i j , i = 1 , 2 , . . . , n ; j = 1 , 2 , . . . , m P(X=x_i,Y=y_j)=p_{ij},i=1,2,...,n;j=1,2,...,m P(X=xi,Y=yj)=pij,i=1,2,...,n;j=1,2,...,m, 条 件 熵 : H ( Y ∣ X ) = ∑ i = 1 n p i H ( Y ∣ X = x i ) , p i = P ( X = x i ) , i = 1 , 2 , . . . , n 条件熵:H(Y|X)=\sum \limits_{i=1}^{n}p_iH(Y|X=x_i),p_i=P(X=x_i),i=1,2,...,n H(YX)=i=1npiH(YX=xi),pi=P(X=xi),i=1,2,...,n

联合熵 H ( X , Y ) = − ∑ x ∑ y p ( x , y ) l o g p ( x , y ) H(X,Y)=-\sum _x \sum _y p(x,y)logp(x,y) H(X,Y)=xyp(x,y)logp(x,y)
H ( Y ∣ X ) = H ( X , Y ) − H ( X ) H(Y|X)=H(X,Y)-H(X) H(YX)=H(X,Y)H(X),证明如下:
H ( Y ∣ X ) = H ( X , Y ) − H ( X ) = − ∑ x ∑ y p ( x , y ) l o g p ( x , y ) + ∑ x p ( x ) l o g p ( x ) = − ∑ x ∑ y p ( x , y ) l o g p ( x , y ) + ∑ y ∑ x p ( x , y ) l o g p ( x ) = − ∑ x ∑ y p ( x , y ) l o g p ( x , y ) p ( x ) = − ∑ x ∑ y p ( x , y ) l o g p ( y ∣ x ) = − ∑ x ∑ y p ( y ∣ x ) p ( x ) l o g p ( y ∣ x ) = − ∑ x p ( x ) ∑ y p ( y ∣ x ) l o g p ( y ∣ x ) = H ( Y ∣ X ) \begin{aligned} H(Y|X)&=H(X,Y)-H(X)\\ &=-\sum _x \sum _y p(x,y)logp(x,y)+\sum_xp(x)logp(x)\\ &=-\sum _x \sum _y p(x,y)logp(x,y)+\sum_y\sum_x p(x,y)logp(x)\\ &=-\sum _x \sum _y p(x,y)log\frac{p(x,y)}{p(x)}\\ &=-\sum _x \sum _y p(x,y)logp(y|x)\\ &=-\sum _x \sum _y p(y|x)p(x)logp(y|x)\\ &=-\sum_x p(x) \sum_y p(y|x)logp(y|x)\\ &= H(Y|X) \end{aligned} H(YX)=H(X,Y)H(X)=xyp(x,y)logp(x,y)+xp(x)logp(x)=xyp(x,y)logp(x,y)+yxp(x,y)logp(x)=xyp(x,y)logp(x)p(x,y)=xyp(x,y)logp(yx)=xyp(yx)p(x)logp(yx)=xp(x)yp(yx)logp(yx)=H(YX)

当熵和条件熵中的概率有数据估计得到时,所对应的熵与条件熵分别称为经验熵和经验条件熵,且 0 l o g 0 = 0 0log0=0 0log0=0

相对熵(KL散度):两个概率分布间差异的非对称性度量 D ( p ∣ ∣ q ) = ∑ x p ( x ) l o g p ( x ) q ( x ) D(p||q)=\sum_xp(x)log \frac{p(x)}{q(x)} D(pq)=xp(x)logq(x)p(x)

互信息:可以看成是一个随机变量中包含的关于另一个随机变量的信息量,或者说是一个随机变量由于已知另一个随机变量而减少的不肯定性
I ( X , Y ) = D ( p ( x , y ) ∣ ∣ p ( x ) p ( y ) ) = ∑ x , y p ( x , y ) l o g p ( x , y ) p ( x ) p ( y ) I(X,Y)=D(p(x,y)||p(x)p(y))=\sum_{x,y}p(x,y)log\frac {p(x,y)}{p(x)p(y)} I(X,Y)=D(p(x,y)p(x)p(y))=x,yp(x,y)logp(x)p(y)p(x,y)
H ( X ∣ Y ) = H ( X ) − I ( X , Y ) , I ( X , Y ) = H ( X ) − H ( X ∣ Y ) H(X|Y)=H(X)-I(X,Y),I(X,Y)=H(X)-H(X|Y) H(XY)=H(X)I(X,Y),I(X,Y)=H(X)H(XY),证明如下:
H ( X ∣ Y ) = H ( X ) − I ( X , Y ) = − ∑ x p ( x ) l o g p ( x ) − ∑ x , y p ( x , y ) l o g p ( x , y ) p ( x ) p ( y ) = − ∑ y ∑ x p ( x , y ) l o g p ( x ) − ∑ x , y p ( x , y ) l o g p ( x , y ) p ( x ) p ( y ) = − ∑ x ∑ y p ( x , y ) l o g p ( x , y ) p ( y ) = − ∑ x ∑ y p ( x , y ) l o g p ( x ∣ y ) = H ( X ∣ Y ) \begin{aligned} H(X|Y)&=H(X)-I(X,Y)\\ &=-\sum_xp(x)logp(x)-\sum_{x,y}p(x,y)log\frac {p(x,y)}{p(x)p(y)}\\ &=-\sum_y\sum_x p(x,y)logp(x)-\sum_{x,y}p(x,y)log\frac {p(x,y)}{p(x)p(y)}\\ &=-\sum_x\sum_y p(x,y)log\frac {p(x,y)}{p(y)}\\ &=-\sum_x\sum_y p(x,y)logp(x|y)\\ &=H(X|Y) \end{aligned} H(XY)=H(X)I(X,Y)=xp(x)logp(x)x,yp(x,y)logp(x)p(y)p(x,y)=yxp(x,y)logp(x)x,yp(x,y)logp(x)p(y)p(x,y)=xyp(x,y)logp(y)p(x,y)=xyp(x,y)logp(xy)=H(XY)

决策树学习中的信息增益等价于训练数据集中类与特征的互信息,特征 A A A对训练数据集 D D D的信息增益定义为 g ( D , A ) g(D,A) g(D,A), g ( D , A ) = H ( D ) − H ( D ∣ A ) g(D,A)=H(D)-H(D|A) g(D,A)=H(D)H(DA)

信息增益的算法

输入:训练数据集 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 ) H(D) H(D), H ( D ) = − ∑ k = 1 K ∣ C k ∣ ∣ D ∣ l o g ∣ C k ∣ ∣ D ∣ H(D)=-\sum\limits_{k=1}^{K}\frac{|C_k|}{|D|}log\frac{|C_k|}{|D|} H(D)=k=1KDCklogDCk
(2)计算特征 A A A对数据集 D D D的经验条件熵 H ( D ∣ A ) H(D|A) H(DA),
H ( D ∣ A ) = − ∑ i , k p ( D k , A i ) l o g p ( D k ∣ A i ) = − ∑ i , k p ( A i ) p ( D k ∣ A i ) l o g p ( D k ∣ A i ) = − ∑ i p ( A i ) ∑ k p ( D k ∣ A i ) l o g p ( D k ∣ A i ) = − ∑ i = 1 n ∣ D i ∣ ∣ D ∣ ∑ k = 1 K ∣ D i k ∣ D i l o g ∣ D i k ∣ D i \begin{aligned} H(D|A)&=-\sum_{i,k}p(D_k,A_i)logp(D_k|A_i)\\ &=-\sum_{i,k}p(A_i)p(D_k|A_i)logp(D_k|A_i)\\ &=-\sum_{i}p(A_i)\sum_k p(D_k|A_i)logp(D_k|A_i)\\ &=-\sum_{i=1}^{n}\frac{|D_i|}{|D|}\sum_{k=1}^{K} \frac {|D_{ik}|}{D_i}log\frac {|D_{ik}|}{D_i}\\ \end{aligned} H(DA)=i,kp(Dk,Ai)logp(DkAi)=i,kp(Ai)p(DkAi)logp(DkAi)=ip(Ai)kp(DkAi)logp(DkAi)=i=1nDDik=1KDiDiklogDiDik
(3)计算信息增益 g ( D , A ) = H ( D ) − H ( D ∣ A ) g(D,A)=H(D)-H(D|A) g(D,A)=H(D)H(DA)

符号说明: ∣ D ∣ 表 示 样 本 容 量 , 设 有 K 个 类 C k , ∣ C k ∣ 为 属 于 C k 的 样 本 数 , ∑ k = 1 K ∣ C k ∣ = ∣ D ∣ , 特 征 A 有 n 个 不 同 的 取 值 , 根 据 特 征 A 将 数 据 集 划 分 为 n 个 子 集 , D 1 , D 2 . . . . , D n , ∑ i = 1 n ∣ D i ∣ = ∣ D ∣ , 记 子 集 D i 中 属 于 类 C k 的 样 本 的 集 合 为 D i k , 即 D i k = D i ∩ C k , ∣ D i k ∣ 为 D i k 的 样 本 数 |D|表示样本容量,设有K个类C_k,|C_k|为属于C_k的样本数,\sum \limits_{k=1}^{K}|C_k|=|D|,\\ 特征A有n个不同的取值,根据特征A将数据集划分为n个子集,D_1,D_2....,D_n,\sum \limits_{i=1}^{n}|D_i|=|D|, \\ 记子集D_i中属于类C_k的样本的集合为D_{ik},即D_{ik}=D_i \cap C_k,|D_{ik}|为D_{ik}的样本数 DKCk,CkCkk=1KCk=D,AnAnD1,D2....,Dn,i=1nDi=D,DiCkDik,Dik=DiCk,DikDik

信息增益比

信息增益作为划分训练数据集的特征,存在偏向于选取值较多的特征,使用信息增益比可以对这一问题进行校正
g R ( D , A ) = g ( D , A ) H A ( D ) , H A ( D ) = − ∑ i = 1 n ∣ D i ∣ ∣ D ∣ l o g ∣ D i ∣ ∣ D ∣ g_R(D,A)=\frac{g(D,A)}{H_A(D)},H_A(D)=-\sum_{i=1}^{n}\frac{|D_i|}{|D|}log\frac{|D_i|}{|D|} gR(D,A)=HA(D)g(D,A),HA(D)=i=1nDDilogDDi

ID3 算法

输入:数据集D,特征集A,阈值 ε \varepsilon ε
输出:决策树T
(1)若D中的所有实例属于同一类 C k C_k Ck,则T为单结点树,并将类 C k C_k Ck作为该结点的类标记,返回T;
(2)若 A = ∅ A = \emptyset A=,则T为单结点树,并将D中实例数最大的类 C k C_k Ck作为该结点的类标记,返回T;
(3)否则,计算A中的各个特征对D的信息增益,选择信息增益最大的特征 A g A_g Ag;
(4)如果 A g A_g Ag的信息增益小于阈值 ε \varepsilon ε ,则置T为单结点树,并将D中实例数最大的类作为该结点的类标记,返回T;
(5)否则,对 A g A_g Ag的每一个可能的值 a i a_i ai,依照 A g = a i A_g = a_i Ag=ai将D分割为若干非空子集 D i D_i Di,将子集 D i D_i Di中实例数最大的类作为标记,构建子结点,由结点及其子结点构成树T,返回T;
(6)对第 i i i个子结点,以 D i D_i Di为训练集,以 A − A g A-A_g AAg为特征集,递归地执行(1)-(5),得到子树 T i T_i Ti,返回 T i T_i Ti.

ID4.5 算法

输入:数据集 D D D,特征集 A A A,阈值 ε \varepsilon ε
输出:决策树 T T T
(1)若D中的所有实例属于同一类 C k C_k Ck,则T为单结点树,并将类 C k C_k Ck作为该结点的类标记,返回T;
(2)若 A = ∅ A = \emptyset A=,则T为单结点树,并将D中实例数最大的类 C k C_k Ck作为该结点的类标记,返回T;
(3)否则,计算A中的各个特征对D的信息增益比,选择信息增益比最大的特征 A g A_g Ag;
(4)如果 A g A_g Ag的信息增益比小于阈值 ε \varepsilon ε ,则置T为单结点树,并将D中实例数最大的类作为该结点的类标记,返回T;
(5)否则,对 A g A_g Ag的每一个可能的值 a i a_i ai,依照 A g = a i A_g = a_i Ag=ai将D分割为若干非空子集 D i D_i Di,将子集 D i D_i Di中实例数最大的类作为标记,构建子结点,由结点及其子结点构成树T,返回T;
(6)对第 i i i个子结点,以 D i D_i Di为训练集,以 A − A g A-A_g AAg为特征集,递归地执行(1)-(5),得到子树 T i T_i Ti,返回 T i T_i Ti.
ID4.5 算法 与 ID3 算法相似,只是在生成过程中使用信息增益比来选择特征

决策树的剪枝

过拟合现象:对训练数据的分类很准确,而对未知的测试数据的分类并没有那么的准确
过拟合的原因:学习时过多地考虑如何提高对训练数据的正确分类,从而构造出过于复杂的决策树
解决办法:对已经生成的复杂的决策树进行简化—剪枝(pruning)
决策树的剪枝:通过极小化决策树的整体的损失函数或者代价函数来实现的 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=0 α=0时不考虑模型的复杂度, α \alpha α越大,单根结点的模型复杂度越小

CART算法

分类与回归树(classification and regression tree, CART)
CART算法:
(1)决策树生成:基于训练数据集生成决策树,生成的决策树要尽量大;
(2)决策树的剪枝:用验证数据集对已经生成的树进行剪枝并选择最优子树(损失函数最小作为剪枝的标准)

CART生成

决策树的生成是递归地构建二叉决策树的过程,对回归树使用平方误差最小化准则,对分类树使用基尼指数最小化准则

最小二乘回归树生成算法

输入:训练数据集 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 ) ( y i − c 1 ) 2 + min ⁡ c 2 ∑ x i ∈ R 2 ( j , s ) ( y i − c 2 ) 2 ] \min_{j,s}[\min_{c_1} \sum \limits_{x_i \in R_1(j,s)}(y_i-c_1)^2 + \min\limits_{c_2} \sum \limits_{x_i \in R_2(j,s)}(y_i-c_2)^2 ] j,smin[c1minxiR1(j,s)(yic1)2+c2minxiR2(j,s)(yic2)2]
遍历变量 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 , R 2 ( j , s ) = { x ∣ x ( j ) } > s R_1(j,s)=\{x|x^{(j)}\} \leq s, R_2(j,s)=\{x|x^{(j)}\} > s R1(j,s)={xx(j)}s,R2(j,s)={xx(j)}>s
c ^ m = 1 N m ∑ x i ∈ R m ( j , s ) y i , x ∈ R m , m = 1 , 2 \hat{c}_m = \frac {1}{N_m}\sum \limits_{x_i \in R_m(j,s)}y_i, x\in R_m, m=1,2 c^m=Nm1xiRm(j,s)yi,xRm,m=1,2
(3)继续对两个子区域调用步骤(1),(2),直至满足停止条件
(4)将输入空间划分为M个区域 R 1 , R 2 , . . . , R M R_1,R_2,...,R_M R1,R2,...,RM,生成决策树.

基尼指数

G i n i ( D ) Gini(D) Gini(D)表示集合 D D D的不确定性,基尼指数越大,样本集合的不确定性越大,与熵相似
分类问题中,假设有K个类,样本点属于第k类的概率为 p k p_k pk,则概率分布的基尼指数定义为 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}^{K}p_k(1-p_k)=1-\sum_{k=1}^{K}p_k^2 Gini(p)=k=1Kpk(1pk)=1k=1Kpk2
example:二分类问题中,属于第一类的概率为p,则 G i n i ( p ) = 2 p ( 1 − p ) Gini(p)=2p(1-p) Gini(p)=2p(1p)
对于给定的样本集合D,其基尼指数为 G i n i ( D ) = 1 − ∑ k = 1 K ( ∣ C k ∣ D ) 2 , C k 表 示 D 中 属 于 第 k 类 的 样 本 子 集 Gini(D)=1-\sum_{k=1}^{K}(\frac{|C_k|}{D})^2,C_k表示D中属于第k类的样本子集 Gini(D)=1k=1K(DCk)2,CkDk
如果样本集合依据某一特征A划分成 D 1 , D 2 D_1,D_2 D1,D2两部分,即 D 1 = { ( x , y ) ∈ D ∣ A = a } , D 2 = D − D 1 D_1=\{(x,y)\in D | A=a\},D_2=D-D_1 D1={(x,y)DA=a},D2=DD1,则在特征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)=DD1Gini(D1)+DD2Gini(D2)

CART生成算法

输入:训练数据集 D D D, 停止计算条件
输出:CART决策树 T T T
根据训练数据集,从根节点开始,递归地对每个结点进行以下操作,构建二叉决策树:
(1)计算现有特征对数据集的基尼指数;
(2)在所有可能的特征以及所有可能的切分点中选择基尼指数最小的特征及其切分点作为最优特征与最优切分点,依照最优特征与最优切分点,从现在的结点生成两个子结点,将训练数据集依特征分配到两个子结点中去;
(3)对两个子结点递归调用(1),(2),直至满足停止条件;
(4)生成CART决策树

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值