统计学习方法读书笔记第五章:决策树

统计学习方法读书笔记第五章:决策树

  • 决策树
    • 决策树模型与学习
    • 特征选择
    • 决策树的生成
    • 决策树的剪枝
    • CART算法
    • CART剪枝

决策树

决策树是一种基本的分类与回归方法。决策树模型呈树形结构,在分类问题中,表示基于特征对实例进行分类的过程。它可以认为是if-then规则的集合,也可以认为是定义在特征空间与类空间上的条件概率分布。其主要优点是模型具有可读性,分类速度快。学习时,利用训练数据,根据损失函数最小化的原则建立决策树模型。预测时,对新的数据,利用决策树模型进行分类。决策树学习通常包括3个步骤:特征选择、决策树的生成和决策树的修剪。

决策树模型与学习

  • 决策树模型
    (决策树)分类决策树模型是一种描述对实例进行分类的树形结构。决策树由结点和有向边组成。结点有两种类型:内部结点和叶结点。内部结点表示一个特征或属性,叶结点表示一个类。
    用决策树分类,从根结点开始,对实例的某一特征进行测试,根据测试结果,将实例分配到其子结点;这时,每一个子结点对应着该特征的一个取值。如此递归地对实例进行测试并分配,直至达到叶结点。最后将实例分到叶结点的类中。
  • 决策树与if-then规则
    可以将决策树看成一个if-then规则的集合。决策树的路径或其对应的if-then规则集合具有一个重要的性质:互斥并且完备。
  • 决策树与条件概率分布
    决策树还表示给定特征条件下类的条件概率分布。这一条件概率分布定义在特征空间的一个划分上。将特征空间划分为互不相交的单元或区域,并在每个单元定义一个类的概率就构成了一个条件概率分布。决策树的一条路径对应于划分中的一个单元。决策树所表示的条件概率分布由各个单元给定条件下类的条件概率分布组成。
  • 决策树学习
    学习的目标是根据给定的训练数据集构建一个决策树模型,使它能够对实例进行正确的分类。本质上是从训练数据集中归纳出一组分类规则。现实中决策树学习算法通常采用启发式方法,近似求解优化问题。这样得到的决策树是次最优的。
    决策树学习的算法通常是一个递归地选择最有特征,并根据该特征对训练数据进行分割,使得对各个子数据集有一个最好的分类的过程。这一过程对应着对特征空间的划分,也对应着决策树的构建。
    需要对已生成的树自下而上进行剪枝,将树变得更简单,从而使它具有更好的泛化能力。
    决策树学习算法包含特征选择、决策树的生成与决策树的剪枝过程。

特征选择

  • 特征选择问题
    特征选择在于选取对训练数据具有分类能力的特征,这样可以提高决策树学习的效率。如果利用一个特征进行分类的结果与随机分类的结果没有很大差别,则称这个特征是没有分类能力的。经验上扔掉这样的特征对决策树学习的精度影响不大。通常特征选择的准则是信息增益或信息增益比。
    特征选择是决定用哪个特征来划分特征空间。
  • 信息增益
    在信息论与概率统计中,熵是表示随机变量不确定性的度量。设 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_{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_{i=1}^np_ilogp_i H(p)=i=1npilogpi
    熵越大,随机变量的不确定性就越大。从定义可验证
    0 ≤ H ( p ) ≤ l o g n 0 \leq H(p) \leq logn 0H(p)logn
    设有随机变量 ( 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 ) H(Y|X) H(YX)表示在已知随机变量 X X X的条件下随机变量Y的不确定性。随机变量 X X X给定的条件下随机变量 Y Y Y的条件熵 H ( Y ∣ X ) H(Y|X) H(YX),定义为 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(YX)=i=1npiH(YX=xi)
    这里, p i = P ( X = x i ) , i = 1 , 2 , . . . , n p_i=P(X=x_i), i=1,2,...,n pi=P(X=xi),i=1,2,...,n
    当熵和条件熵中的概率由数据估计得到时,所对应的熵与条件熵分别称为经验熵和经验条件熵。
    信息增益表示得知特征 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(DA)之差,即
    g ( D , A ) = H ( D ) − H ( D ∣ A ) g(D,A)=H(D)-H(D|A) g(D,A)=H(D)H(DA)
    一般地,熵 H ( Y ) H(Y) H(Y)与条件熵 H ( Y ∣ X ) H(Y|X) H(YX)之差称为互信息。决策树学习中的信息增益等价于训练数据集中类与特征的互信息。
    决策树学习应用信息增益准则选择特征。给定训练数据集 D D D和特征 A A A,经验熵 H ( D ) H(D) H(D)表示对数据集 D D D进行分类的不确定性,而经验条件熵 H ( D ∣ A ) H(D|A) H(DA)表示在特征 A A A给定的条件下对数据集 D D D进行分类的不确定性。那么它们的差,即信息增益,就表示由于特征 A A A而使得对数据集 D D D的分类的不确定性减少的程度。显然,对于数据集 D D D而言,信息增益依赖于特征,不同的特征往往具有不同的信息增益。信息增益大的特征具有更强的分类能力。
    设训练数据集为 D D D ∣ D ∣ |D| D表示其样本容量,即样本个数。设有 K K K个类 C k C_k Ck k = 1 , 2 , . . . , K k=1,2,...,K k=1,2,...,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=1KCk=D。设特征 A A A n n n个不同的取值 { a 1 , a 2 , . . . , a n } \{a_1,a_2,...,a_n\} {a1,a2,...,an},根据特征 A A A的取值将 D D D划分为 n n n个子集 D 1 , D 2 , . . . , D n D_1,D_2,...,D_n D1,D2,...,Dn ∣ D i ∣ |D_i| Di D i D_i Di的样本个数, ∑ i = 1 n ∣ D i ∣ = ∣ D ∣ \sum_{i=1}^n|D_i|=|D| i=1nDi=D。记子集 D i D_i Di中属于类 C k C_k Ck的样本的集合为 D i k D_{ik} Dik,即 D i k = D i ∪ C k D_{ik}=D_i \cup C_k Dik=DiCk ∣ 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 ) H(D) H(D)
    H ( D ) = − ∑ k = 1 K ∣ C k ∣ ∣ D ∣ l o g 2 ∣ C k ∣ ∣ D ∣ H(D)=-\sum_{k=1}^K \frac{|C_k|}{|D|}log_2\frac{|C_k|}{|D|} H(D)=k=1KDCklog2DCk
    (2) 计算特征 A A A对数据集 D D D的经验条件熵 H ( D ∣ A ) H(D|A) H(DA)
    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 ∣ l o g 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(DA)=i=1nDDiH(Di)=i=1nDDik=1KDiDiklog2DiDik
    (3) 计算信息增益
    g ( D , A ) = H ( D ) − H ( D ∣ A ) g(D,A)=H(D)-H(D|A) g(D,A)=H(D)H(DA)
  • 信息增益比
    信息增益值得大小是相对于训练数据集而言的,并没有绝对意义。在分类问题困难时,也就是说在训练数据集的经验熵大的时候,信息增益值会偏大。反之,信息增益值会偏小。使用信息增益比可以对这一问题进行校正。这是特征选择的另一准则。
    信息增益比 特征 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的经验熵 H ( D ) H(D) H(D)之比:
    g R ( D , A ) = g ( D , A ) H ( D ) g_R(D,A)=\frac{g(D,A)}{H(D)} gR(D,A)=H(D)g(D,A)

决策树的生成

  • 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=\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的信息增益小于阈值 ε \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 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} AAg为特征集,递归地调用步(1)~(5),得到子树 T i T_i Ti,返回 T i T_i Ti
  • C4.5的生成算法
    C4.5算法与ID3算法相似,C4.5算法对ID3算法进行了改进。C4.5在生成的过程中,用信息增益比来选择特征。

决策树的剪枝

决策树生成算法递归地产生决策树,直到不能继续下去为止。这样产生的树往往对训练数据的分类很准确,但对未知的测试数据的分类却没有那么准确,即出现过拟合现象。
在决策树学习中将已生成的树进行简化的过程称为剪枝。具体地,剪枝从已生成的树上裁掉一些子树或叶结点,并将其根结点或父结点作为新的叶结点,从而简化分类树模型。
决策树的剪枝往往通过极小化决策树整体的损失函数或代价函数来实现。设树 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,...,K k=1,2,...,K H t ( T ) H_t(T) Ht(T)为叶结点 t t t上的经验熵, α ⩾ 0 \alpha \geqslant 0 α0为参数,则决策树学习的损失函数可以定义为
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=1TNtHt(T)+αT
其中经验熵为
H t ( T ) = − ∑ k N t k N t l o g N t k N t H_t(T)=-\sum_{k}\frac{N_{tk}}{N_t}log\frac{N_{tk}}{N_t} Ht(T)=kNtNtklogNtNtk
在损失函数中,记
C ( T ) = ∑ t = 1 ∣ T ∣ N t H t ( T ) = − ∑ t = 1 ∣ T ∣ ∑ k = 1 K N t k l o g N t k N t C(T)=\sum_{t=1}^{|T|}N_tH_t(T)=-\sum_{t=1}^{|T|}\sum_{k=1}^{K}N_{tk}log\frac{N_{tk}}{N_t} C(T)=t=1TNtHt(T)=t=1Tk=1KNtklogNtNtk
这时有
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 \geqslant 0 α0控制两者之间的影响。较大的 α \alpha α促使选择较简单的模型(树),较小的 α \alpha α促使选择较复杂的模型(树)。 α = 0 \alpha=0 α=0意味着只考虑模型与训练数据的拟合程度,不考虑模型的复杂程度。
剪枝,就是当 α \alpha α确定时,选择损失函数最小的模型,即损失函数最小的子树。可以看出,决策树生成只考虑了通过提高信息增益(或信息增益比)对训练数据进行更好的拟合。而决策树剪枝通过优化损失函数还考虑了减小模型复杂度。决策树生成学习局部的模型,而决策树剪枝学习整体的模型。
树的剪枝算法
输入:生成算法产生的整个树 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) \leqslant C_\alpha(T_B) Cα(TA)Cα(TB)
则进行剪枝,即将父结点变为新的叶结点。
(3) 返回(2),直至不能继续未知,得到损失函数最小的子树 T α T_\alpha Tα

CART算法

分类与回归树(classification and regression tree, CART)是应用广泛的决策树学习方法。CART是在给定输入随机变量 X X X条件下输出随机变量 Y Y Y的条件概率分布的学习方法。CART假设决策树是二叉树,内部结点特征的取值为“是”和“否”,左分支是取值为“是”的分支,右分支是取值为“否”的分支。这样的决策树等价于递归地二分每个特征,将输入空间即特征空间划分为有限个单元,并在这些单元上确定预测的概率分布,也就是在输入给定的条件下输出的条件概率分布。
CART算法由以下两步组成:
(1) 决策树生成:基于训练数据集生成决策树,生成的决策树要尽量大;
(2) 决策树剪枝:用验证数据集对已生成的树进行剪枝并选择最优子树,这时用损失函数最小作为剪枝的标准。

  • CART生成 决策树的生成就是递归地构建二叉决策树的过程。对回归树用平方误差最小化准则,对分类树用基尼指数最小化准则,进行特征选择,生成二叉树。
    回归树的生成
    假设 X X X Y Y Y分别为输入和输出变量,并且 Y Y Y是连续变量,给定训练集
    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 1 , R 2 , . . . , R M R_1,R_2,...,R_M R1,R2,...,RM,并且在每个单元 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(xRm)
    当输入空间的划分确定时,可以用平方误差 ∑ x i ∈ R m ( y i − f ( x i ) ) 2 \sum_{x_i\in R_m}(y_i-f(x_i))^2 xiRm(yif(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(yixiRm)
    问题是怎样对输入空间进行划分。这里采用启发式的方法,选择第 j j j个变量 x ( j ) x^{(j)} x(j)和它取的值 s s 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}
    然后寻找最优切分变量 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_{x_i\in R_1(j,s)}(y_i-c_1)^2 + \min_{c_2}\sum_{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可以找到最优切分点 s s s
    c ^ 1 = a v e ( y i ∣ x i ∈ R 1 ( j , s ) ) 和 c ^ 2 = a v e ( y i ∣ x i ∈ R 2 ( j , s ) ) \hat{c}_1=ave(y_i|x_i\in R_1(j,s)) 和 \hat{c}_2=ave(y_i|x_i\in R_2(j,s)) c^1=ave(yixiR1(j,s))c^2=ave(yixiR2(j,s))
    遍历所有输入变量,找到最优的切分变量 j j j,构成一个对 ( j , s ) (j,s) (j,s),依此将输入空间划分为两个区域。接着,对每个区域重复上述划分过程,直到满足停止条件为止。这样就生成一棵回归树。这样的回归树通常称为最小二乘回归树。
    最小二乘回归树生成算法
    输入:训练数据集 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}\bigg[\min_{c_1}\sum_{x_i\in R_1(j,s)}(y_i-c_1)^2 + \min_{c_2}\sum_{x_i\in R_2(j,s)}(y_i-c_2)^2\bigg] 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 } c ^ m = 1 N m ∑ x i ∈ R m ( j , s ) y i , x ∈ R m , m = 1 , 2 R_1(j,s)=\{x|x^{(j)}\leq s\}, R_2(j,s)=\{x|x^{(j)}>s\} \\ \hat{c}_m=\frac{1}{N_m}\sum_{x_i\in R_m(j,s)}y_i,x\in R_m, m=1,2 R1(j,s)={xx(j)s},R2(j,s)={xx(j)>s}c^m=Nm1xiRm(j,s)yi,xRm,m=1,2
    (3) 继续对两个子区域调用步骤(1),(2),直至满足停止条件。
    (4) 将输入空间划分为 M M M个区域 R 1 , R 2 , . . . , R M R_1,R_2,...,R_M R1,R2,...,RM,并生成决策树:
    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(xRm)
    分类树的生成
    分类树用基尼指数选择最优特征,同时决定该特征的最优二值切分点。
    基尼指数 分类问题中,假设有 K K K个类,样本点属于第 k 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}^Kp_k^2 Gini(p)=k=1Kpk(1pk)=1k=1Kpk2
    对于给定的样本集合 D D D,其基尼指数为
    G i n i ( D ) = 1 − ∑ k = 1 K ( ∣ C k ∣ ∣ D ∣ ) 2 Gini(D)=1-\sum_{k=1}^K\bigg (\frac{|C_k|}{|D|}\bigg)^2 Gini(D)=1k=1K(DCk)2
    这里, C k C_k Ck D D D中属于第 k k k类的样本子集, 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)DA(x)=a,D2=DD1
    则在特征 A A A的条件下,集合 D D D的基尼指数定义为
    G i n i ( D , A ) = ∣ D 1 ∣ ∣ D ∣ G i n i ( D 1 ) + ∣ D 1 ∣ ∣ D ∣ G i n i ( D 2 ) Gini(D,A)=\frac{|D_1|}{|D|}Gini(D_1)+\frac{|D_1|}{|D|}Gini(D_2) Gini(D,A)=DD1Gini(D1)+DD1Gini(D2)
    基尼指数 G i n i ( D ) Gini(D) Gini(D)表示集合 D D D的不确定性,基尼指数 G i n i ( D , A ) Gini(D,A) Gini(D,A)表示经 A = a A=a A=a分割后集合 D D D的不确定性。基尼指数越大,样本集合的不确定性也就越大,这一点与熵相似。
    CART生成算法
    输入:训练数据集 D D D,停止计算的条件;
    输出:CART决策树。
    根据训练数据集,从根结点开始,递归地对每个结点进行以下操作,构建二叉决策树:
    (1) 设结点的训练数据集为 D D 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的基尼指数。
    (2) 在所有可能的特征 A A A以及它们所有可能的切分点 a a a中,选择基尼指数最小的特征及其对应的切分点作为最有特征与最优切分点。依最优特征与最优切分点,从现结点生成两个子结点,将训练数据集依特征分配到两个子节点中去。
    (3) 对两个子结点递归地条用(1),(2),直到满足停止条件。
    (4) 生成CART决策树。
    算法停止计算的条件是节点中的样本个数小于预定阈值,或样本集的基尼指数小于预定阈值(样本基本属于同一类),或者没有更多特征。

CART剪枝

CART剪枝算法从“完全生长”的决策树的底端剪去一些子树,使决策树变小(模型变简单),从而能够对未知数据有更准确的预测。CART剪枝算法由两步组成:首先从生成算法产生的决策树 T 0 T_0 T0底端开始不断剪枝,直到 T 0 T_0 T0的根结点,形成一个子树序列 { T 0 , T 1 , . . . , T n } \{T_0,T_1,...,T_n\} {T0,T1,...,Tn};然后通过交叉验证法在独立的验证数据集上对子树序列进行测试,从中选择最优子树。

  • 剪枝,形成一个子树序列
    在剪枝过程中,计算子树的损失函数:
    C α = C ( T ) + α ∣ T ∣ C_\alpha=C(T)+\alpha|T| Cα=C(T)+αT
    其中, T T T为任意子树, C ( T ) C(T) C(T)为对训练数据的预测误差(如基尼指数), ∣ T ∣ |T| T为子树的叶结点个数, α ≥ 0 \alpha\geq 0 α0为参数, C α ( T ) C_\alpha(T) Cα(T)为参数是 α \alpha α时的子树 T T T的整体损失。参数 α \alpha α权衡训练数据的拟合程度与模型的复杂度。
    对固定的 α \alpha α,一定存在使损失函数 C α ( T ) C_\alpha(T) Cα(T)最小的子树,将其表示为 T α T_\alpha Tα T α T_\alpha Tα在损失函数 C α ( T ) C_\alpha(T) Cα(T)最小的意义下是最优的。容易验证这样的最优子树是唯一的。当 α \alpha α大的时候,最优子树 T α T_\alpha Tα偏小;当 α \alpha α小的时候,最优子树 T α T_\alpha Tα偏大。极端情况,当 α = 0 \alpha=0 α=0时,整体树是最优的。当 α → ∞ \alpha\to\infty α时,根结点组成的单结点树是最优的。
    Breiman等人证明:可以用递归的方法对树进行剪枝。将 α \alpha α从小增大, 0 = α 0 < α 1 < ⋯ < α n < ∞ 0=\alpha_0<\alpha_1<\cdots<\alpha_n<\infty 0=α0<α1<<αn<,产生一些列的区间 [ α i , α i + 1 ) , i = 0 , 1 , ⋯   , n [\alpha_i,\alpha_{i+1}),i=0,1,\cdots,n [αi,αi+1),i=0,1,,n;剪枝得到的子树序列对应着区间 α ∈ [ α i , α i + 1 ) , i = 0 , 1 , ⋯   , n \alpha\in[\alpha_i,\alpha_{i+1}),i=0,1,\cdots,n α[αi,αi+1),i=0,1,,n的最优子树序列 { T 0 , T 1 , ⋯   , T n } \{T_0,T_1,\cdots,T_n\} {T0,T1,,Tn},序列中的子树是嵌套的。
    具体的,从整体树 T 0 T_0 T0开始剪枝。对 T 0 T_0 T0的任意内部结点 t t t,以 t t t为单结点树的损失函数是
    C α ( t ) = C ( t ) + α C_\alpha(t)=C(t)+\alpha Cα(t)=C(t)+α
    t t t为根结点的子树 T t T_t Tt的损失函数式
    C α ( T t ) = C ( T t ) + α ∣ T t ∣ C_\alpha(T_t)=C(T_t)+\alpha|T_t| Cα(Tt)=C(Tt)+αTt
    α = 0 \alpha=0 α=0 α \alpha α充分小时,有不等式
    C α ( T t ) < C α ( t ) C_\alpha(T_t)<C_\alpha(t) Cα(Tt)<Cα(t)
    α \alpha α增大时,在某一 α \alpha α
    C α ( T t ) = C α ( t ) C_\alpha(T_t)=C_\alpha(t) Cα(Tt)=Cα(t)
    α \alpha α再增大时,不等式反向。只要 α = C ( t ) − C ( T t ) ∣ T t ∣ − 1 \alpha=\frac{C(t)-C(T_t)}{|T_t|-1} α=Tt1C(t)C(Tt) T t T_t Tt t t t有相同的损失函数,而 t t t的结点少,因此 t t t T t T_t Tt更可取,对 T t T_t Tt进行剪枝。
    为此,对 T 0 T_0 T0中的每一内部结点 t t t,计算
    g ( t ) = C ( t ) − C ( T t ) ∣ T t ∣ − 1 g(t) = \frac{C(t)-C(T_t)}{|T_t|-1} g(t)=Tt1C(t)C(Tt)
    它表示剪枝后整体损失函数减少的程度。在 T 0 T_0 T0中剪去 g ( t ) g(t) g(t)最小的 T t T_t Tt,将得到的子树作为 T 1 T_1 T1,同时将最小的 g ( t ) g(t) g(t)设为 α 1 \alpha_1 α1 T 1 T_1 T1为区间KaTeX parse error: Expected 'EOF', got '\alpja' at position 11: [\alpha_1,\̲a̲l̲p̲j̲a̲_2)的最优子树。
    如此剪枝下去,直到得到根结点。在这一过程中,不断地增加 α \alpha α的值,产生新的区间。
  • 在剪枝得到的子树序列 T 0 , T 1 , ⋯   , T n T_0,T_1,\cdots,T_n T0,T1,,Tn中通过交叉验证选取最优子树 T α T_\alpha Tα
    具体地,利用独立的验证数据集,测试子树序列 T 0 , T 1 , ⋯   , T n T_0,T_1,\cdots,T_n T0,T1,,Tn各棵子树的平方误差或基尼指数。平方误差或基尼指数最小的决策树被认为是最优的决策树。在子序列中,每棵子树 T 0 , T 1 , ⋯   , T n T_0,T_1,\cdots,T_n T0,T1,,Tn都对应与一个参数 α 1 , α 2 , ⋯   , α n \alpha_1,\alpha_2,\cdots,\alpha_n α1,α2,,αn。所以,当最优子树 T k T_k Tk确定时,对应的 α k \alpha_k αk也确定了,即得到最优决策树 T α T_\alpha Tα

CART剪枝算法
输入:CART算法生成的决策树 T 0 T_0 T0
输出:最优决策树 T α T_\alpha Tα
(1) 设 k = 0 , T = T 0 k=0, T=T_0 k=0,T=T0
(2) 设 α = + ∞ \alpha=+\infty α=+
(3) 自下而上地对各内部结点 t t t计算 C ( T t ) C(T_t) C(Tt) ∣ T t ∣ |T_t| Tt以及
g ( t ) = C ( t ) − C ( T t ) ∣ T t ∣ − 1 α = min ⁡ ( α , g ( t ) ) g(t) = \frac{C(t)-C(T_t)}{|T_t|-1}\\ \alpha=\min(\alpha,g(t)) g(t)=Tt1C(t)C(Tt)α=min(α,g(t))
这里, T t T_t Tt表示以 t t t为根结点的子树, C ( T t ) C(T_t) C(Tt)是对训练数据的预测误差, ∣ T t ∣ |T_t| Tt T t T_t Tt的叶结点个数;
(4) 自上而下地访问内部结点 t t t,如果有 g ( t ) = α g(t)=\alpha g(t)=α,进行剪枝,并对叶结点 t t t以多数表决法决定其类,得到树 T T T
(5) 设 k = k + 1 , α k = α , T k = T k=k+1,\alpha_k=\alpha,T_k=T k=k+1,αk=α,Tk=T
(6) 如果 T T T不是由根结点单独构成的树,则回到步骤(4);
(7) 采用交叉验证法在子树序列 T 0 , T 1 , ⋯   , T n T_0,T_1,\cdots,T_n T0,T1,,Tn中选取最优子树 T α T_\alpha Tα

你可能感兴趣的:(统计学习方法读书笔记第五章:决策树)