统计学习方法笔记-决策树模型

简介:
    决策树是一种基本的分类与回归方法。下面的笔记主要记录用于分类的决策树。决策树模型呈树形结构,在分类中,表示基于特征对实例进行分类的过程。其主要优点是:模型具有可读性,分类速度快。学习时利用训练数据,根据损失函数最小化原则建立决策树模型。决策树学习通常包括三个步骤:特征选择、决策树的生成、决策树的修剪。

决策树模型与学习

决策树模型:
    分类决策树模型是一种描述对实例进行分类的树形结构(注意:kd树是二叉树,而决策树不限于二叉树)。决策树由结点和有向边组成。结点分为:内结点和外结点。内结点表示一个特征或属性,外结点表示一个类。
    用决策树分类,从根节点开始对实例的某一特征进行测试,根据测试结果,将实例分配到其子结点;这时,每个子结点对应着该特征的一个取值。如此递归的堆实例进行测试并且分配,直至达到叶结点。最后将实例分到叶结点的类中。下图是一个决策树示意图:
                                         统计学习方法笔记-决策树模型_第1张图片                            

决策树学习:
    决策树的构建过程如下:开始,构建根结点,将所有训练数据都放在根结点。选择一个最优特征,按照这一特征将训练数据集分割成子集,使得各个子集有一个在当前条件下最好的分类。如果这些子集已经能够被基本正确分类,那么构建叶结点,并将这些子集分配到对应的叶结点中去;如果还有子集不能够被基本正确分类,那么对这些子集选择最优特征,继续对其进行分割,构建相应的结点。如此递归下去,直至所有训练数据子集被基本正确分类或者没有合适的特征为止。最后每个子集都被分到叶结点上,即都有了明确的类。这就生成了一颗决策树。
    以上方法有可能对训练数据有很好的分类能力,但对未知的测试数据未必有很好的分类能力,即可能发生过拟合。我们需要对已经生成的树自下而上进行剪枝,将树变得更简单,从而使它具备更好的泛化能力。
    决策树生成对应模型的局部选择(只针对训练数据),而决策树的剪枝则考虑全局最优(针对所有数据,泛化能力)

            特征选择
特征选择在于选取对训练数据具有分类能力的特征,这样可以提高决策树的学习效率。通常特征选择的准则是通过比较信息增益或信息增益比。

熵与条件熵:
    熵是表示随机变量不确定性的度量。设X是一个取有限个值的离散随机变量,其概率分布为: P( X = x i  ) =   p i  ,i = 1,2,···,n
则随机变量X的熵定义为
                                        
(其中 x i  表示类别为 c i  的x集合,所以 p i  也就是X中类别为 c i  的概率,所以H(X)依赖于 c i  的概率pi,而于X的取值无直接关系)
    通常H(X)中的对数以2或者e为底,这时熵的单位分别称作比特或纳特。由定义可知,熵只依赖于X的分布,而与X的取值无关,所以也可将X的熵记作H(p);
    熵越大,随机变量的不确定性就越大。从定义可验证:
                                            0 <= H(p) <= log n

    条件熵H(Y|X)表示在已知随机变量X的条件下随机变量Y的不确定性。随机变量X给定的条件下随机变量Y的条件熵H(Y|X),定义为:X给定条件下Y的条件概率分布的熵对X的数学期望
                                       
(注意:这儿的 x i  不是特指之前说的“ 类别为 c i  的x集合 ”,而是以满足某些条件的将X划分的子集,比如:根据特征A的不同取值,将X划分为不同的子集 x i  ,i = 1,2,···,k,求在特征A确定的情况下,数据集的条件熵
(由之前可知,H(Y|X = x i)等于 所有 p j  和log pj    乘积之和的相反数,并且 pj  是在xi 数据集上类型为 ci 的概率
    当熵和条件熵的概率由数据估计(特别是极大似然估计)得到时,所对应的熵和条件熵分别称为经验熵和经验条件熵。此时,如果有0概率,令0log0 = 0
    
信息增益:
    表示得知特征X的信息而使得类Y的信息的不确定性减少的程度。
    定义:特征A对训练数据集D的信息增益g(D,A),定义为:集合D的经验熵H(D)与特征A给定条件下D的经验条件熵H(D | A)之差,即    g(D,A) = H(D) - H(D | A)    
    一般地,熵H(Y)和条件熵H(Y | X)的差称为互信息。决策树学习中的信息增益等价于训练数据集中类与特征的互信息。
    信息增益大的特征具有更强的分类能力。
    根据信息增益准则的最优特征选择方法:对训练数据集D,计算其每个特征的信息增益,并比较大小,选择信息增益最大的特征。

信息增益比:
    信息增益值的大小是相对于训练数据集而言的,并没有绝对意义。在训练数据集的熵大的时候,信息增益值也会偏大,反之信息增益值会偏小。使用信息增益比会对这一问题进行校正,这是特征选择的另一准则。
    比如:一数据集D,只给出特征A的信息增益值是0.1,我们并不知道他对减少数据集D不确定性的作用有多大,但是如果给出特征A的信息增益比是0.5,我们就能明确他对减少数据集D不确定性的有多重要了。
    定义:特征A对训练数据集D的信息增益比 g R(D,A)定义为其信息增益g(D,A)与训练数据集D的经验熵H(D)之比:
                                                 g R(D,A) = g(D,A) / H(D)

决策树的生成
ID3算法:
    简介:
    ID3算法的核心是在决策树的各个结点上应用信息增益准则选择特征,递归的构建决策树。具体方法是:从根节点开始,对结点计算所有可能的特征的信息增益,选择信息增益最大的特征作为结点的特征,由该特征的不同取值建立子结点;再对子结点递归的调用上述方法,构建决策树;直到所有特征的信息增益小于阈值或没有特征可以选择为止。    
    算法:
    输入:训练数据集D,特征集A,阈值 ε
   输出:决策树T
    1、若D中所有实例都属于同一类 c k ,则T为单结点树,并将类 c k  作为该结点的类标记,返回T;
    2、若A = ∅,则T为单节点数,并将D中实例数最大的类 c k  作为该结点的类标记,返回T;
    3、否则,计算A中各特征对D的信息增益,选择增益最大的特征 A g  ;
    4、如果Ag 的信息增益小于阈值ε,则置T为单结点树,并将D中实例数最大的类ck 作为该结点的类标记,返回T;
    5、否则,对 A g  的每一个可能值 a i  ,依 A g  = ai 将D分割为若干非空子集Di ,将Di 中实例数最大的类作为标记,构建子结点,由结点及其子结点构成树T,返回T;
    6、对第i个子结点,以Di为训练集,以A - {Ag }为特征集,递归的调用1 ~ 5步,得到子树Ti,返回Ti。
    
C4.5的生成算法:
    与ID3算法相似,但是对其做了改进,C4.5在生成决策树的过程中,使用信息增益比来选择特征。
    输入:训练数据集D,特征集A,阈值 ε
   输出:决策树T
    算法过程和ID3一模一样,只不过用信息增益比取代信息增益来进行特征选择,这儿就不重复阐述了。

决策树的剪枝
简介:
    决策树生成算法递归的产生决策树,直到不能继续下去为止,这样产生的树往往对训练数据很准确,但是对未知的测试数据的分类却没那么准确,即出现过拟合现象。过拟合的原因在于学习时过多地考虑如何提高对训练数据的正确分类,从而构建出过于复杂的决策树。解决这个问题的办法是考虑决策树的复杂度,对已生成的决策树进行简化。
    决策树的剪枝往往通过极小化决策树整体的损失函数或代价函数来实现。设树T的叶结点个数为|T|,t是树T的叶结点,该叶结点有 N t个样本点,其中k类的样本点有 N tk个,k = 1,2,···,K, H t(T)为叶结点t上的经验熵, α >= 0为参数,则决策树学习的损失函数可以定义为                                 
                                       
其中经验熵为                 
                                             统计学习方法笔记-决策树模型_第2张图片
在损失函数中,第一项记作
                         统计学习方法笔记-决策树模型_第3张图片
这时有
                                        
                                    
上式中C(T)表示模型对训练数据的预测误差(用各个叶结点的熵和样本数的乘积之和来表示,之所以要乘以样本数主要是为了公平表示各个叶结点的误差,比如:果两个叶结点A、B熵都是0.1,但是A的样本数是10000而B的是10,他们如果仅用熵去表示各个叶结点的预测误差明显不公平,故乘以叶结点的样本总数),即模型与训练数据的拟合程度,|T|表示模型复杂度,参数 α>=0控制两者之间的影响。较大的α促使选择较简单的模型,较小的α促使选择较复杂的模型。α=0意味着只考虑模型与训练数据的拟合程度,不考虑模型的复杂度。
    剪枝,就是当α确定时,选择损失函数最小的模型,即损失函数最小的子树。
    可以看出决策树生成只考虑了通过提高信息增益(或信息增益比)对训练数据进行更好的拟合。而决策树剪枝通过优化损失函数还考虑了较小模型复杂度。决策树生成学习局部的模型,而决策树剪枝学习整体的模型。
    上式中定义的损失函数的极小化等价于正则化的极大似然估计(也是通过加入正则式防止过拟合)。所以利用损失函数最小原则进行剪枝就是用正则化的极大似然估计进行模型选择。
剪枝算法:
    下面介绍一种简单的剪枝算法
    输入:生成算法产生的整个树T,参数 α;
    输出:修剪后的树Tα
    1、计算每个结点的熵
    2、递归的从叶结点向上回缩,设一组叶结点回缩到其父结点之前和之后的整体树分别为TB与TA ,其对应的损失函数分别是Cα (TB)与Cα (TA),如果
                                Cα (TA) <= Cα (TB)
则进行剪枝,即将父结点变成新的叶结点。
    3、返回2,直至不能继续为止,得到的损失函数最小的子树T α。

CART算法
简介:
    CART是英文classification and regression tree的简写,中文译为分类与回归树,是应用广泛的决策树学习方法。CART同样由特征选择,树的生成及剪枝组成,即可用于分类也可用于回归,以下将用于分类与回归的树统称为决策树。
        CART假设决策树是二叉树,内部结点特征的取值为“是”和“否”,左分支是取值为“是”的分支,右分支是取值为“否”的分支。

回归树的生成:
    假设X与Y分别为输入和输出变量,并且Y是连续变量,给定训练数据集
                                
    一个回归树对应着输入空间(即特征空间)的一个划分以及在划分的单元上的输出值。假设已将输入空间划分为M个单元 R 1  ,R 2  ,···,R M ,并且在每个单元 R m 上有一个固定的输出值 c m ,于是回归树模型可表示为
                                    
当输入空间的划分确定时,可以用平方误差 来表示回归树对于训练数据在单元Rm上的的预测误差,用平方误差最小的准则来解每个单元上的最优输出值,易知,单元 R m 上的 c m 的最优值 R m 上的所有输入实例 x i  对应的输出 y i  的均值,即
                                    
那么最大的问题就是如何对输入空间进行划分。这里采用启发式的方法,选择第j个特征 x j  和 在 x j  特征上某个值s,作为你切分变量(即切分特征)和切分点,并定义两大区域:
                                        
然后寻找最优切分特征j和最优切分点s,具体的,求解
                            
对于固定的输入特征j可以找到最优的切分点s(即对应区域所有点的j特征的均值),如下:
                    
遍历所有特征,找到最优的切分特征j,构成一个对(j,s)。依此将输入空间划分为两个区域。接着对每个区域重复上述划分过程,直到满足停止条件为止。这样就生成了一棵回归树。这样的回归树通常称为最小二乘回归树,具体算法如下:
    
算法(最小二乘回归树生成算法):
    输入:训练数据集D
    输出:回归树f(x)
    在训练数据集所在的输入空间中,递归地将每个区域划分为两个子区域并决定每个子区域上的输出值,构建二叉决策树:
    1、选择最优切分特征j与切分点s,求解:
                     统计学习方法笔记-决策树模型_第4张图片
   因为 c 1  和c 2 的最优值是对应区域内的所有点在特征j上取值的均值,所以上式的关键是寻找最优的特征j和最优切分点s,通过下面方式寻找最优j和s,遍历特征j,再对每个j遍历所有值s,求出上式所有j和s组合的值,然后找出最小的值对应的j和s对(j,s)。
    2、用选定的对(j,s)划分两块区域并决定相应的输出值,如下:
                         统计学习方法笔记-决策树模型_第5张图片
    3、继续对两个子区域调用步骤1、2,直至满足停止条件。
    4、最终将输入空间划分为M个区域 R 1  ,R 2  ,···,R M  ,生成的决策树如下:
                                    
分类树的生成:
    分类树用基尼指数选择最优特征,同时决定该特征的最优二值切分点。
定义:
    分类问题中,假设有K个类,样本点属于第k类的概率为 p k,则概率分布的基尼指数定位为:
                             统计学习方法笔记-决策树模型_第6张图片
对于给定的样本集合D,其基尼指数为:
                                  统计学习方法笔记-决策树模型_第7张图片
这里, C k 是D中属于第k类的样本子集,K是类的个数。
    如果样本集合D根据特征A是否取某一可能值a被分割成 D 1  和D 2 两部分,即
                            
则在特征A的条件下,集合D的基尼指数定义为:
                 统计学习方法笔记-决策树模型_第8张图片
    此公式类似条件熵,都是特征A区分出来的各子集的概率乘以各自的基尼指数(条件熵中是熵)之和。
    基尼指数Gini(D)表示集合D的不确定性,基尼指数Gini(D,A)表示经A = a分割后集合D的不确定性。基尼指数值越大,样本集合的不确定性也就越大,这一点与熵相似。
    下图显示二类分类问题中基尼指数,熵(单位比特)之半1/2H(p)和分类误差率的关系。横坐标表示概率p,纵坐标表示损失,可以看出基尼指数和熵之半的曲线很接近,都可以近似地代表分类误差率。
                             统计学习方法笔记-决策树模型_第9张图片
CART生成算法:
    输入:训练数据集D,停止计算的条件;
    输出:CART决策树。
    根据训练数据集,从根结点开始,递归地对每个结点进行以下操作,构建二叉决策树:
    1、计算现有特征对数据集D的基尼指数,此时对每一个特征A,对其可能取的每个值a,根据样本点对A = a的测试为“是”或“否”将D分割为 D 1  和D 2 两部分,计算A = a时的基尼指数。
    2、遍历所有可能的特征A以及它们所有可能的切分点a中,选择基尼指数最小的特征及其对应的切分点作为最优特征和最优切分点。依最优特征与最优切分点,从现结点生成两个子结点,将训练数据集依据特征分配到两个子结点中去。
    3、对两个子结点递归的调用1、2,直到满足停止条件。
    4、生成CART决策树
(生成CART的分类决策树和CART的回归决策树的算法其实一样,只不过生成分类决策树是使用基尼指数最小作为切分标准,而回归决策树依据平方误差最小作为切分标准)
    算法停止计算的条件是结点中的样本个数小于预订的阈值,或样本集的基尼指数小于预订阈值(样本基本属于同一类),或者没有更多特征。
CART剪枝:
    CART剪枝算法从“完全生长”的决策树的低端剪去一些子树,使决策树变小(模型变简单),从而能够对未知数据有更准确的预测。CART剪枝算法由两部组成:首先从生成算法产生的决策树 T 0  底端开始不断剪枝,直到T0 的根结点,形成一个子树序列{T0 ,T1 ,T2 ,···,Tn}(注意由下面的具体算法可知:下一个子树是在上一个子树的基础上剪枝的,比如:T2是在T1的基础上剪枝的,而不是直接在T0 的基础上剪枝的);然后通过交叉验证法在独立的验证数据集上对子树序列进行测试,从中选择最优子树。
    1、剪枝,形成一个子树序列
    在剪枝过程中,计算子树的损失函数:
                                
其中,T为任意子树,C(T)为对训练数据的预测误差(如基尼指数),|T|为子树的叶结点个数, α>=0为参数,Cα(T)为参数是α时的子树T的整体损失。参数α权衡训练数据的拟合程度与模型的复杂度。
    对于固定的α,一定存在使损失函数Cα(T)最小的子树,将其表示为Tα 。Tα 在损失函数Cα(T)最小的意义下是最优的。容易验证这样的最优子树是唯一的。当α大的时候,最优子树Tα偏小;当α小的时候,最优子树Tα偏大。极端情况下,当α=0的时候,整体树是最优的。α->的时候,根结点组成的单结点树是最优的。
    可以用递归的方法对树进行剪枝,将 α从小增大,  0= α 0  < α 1  < ···< α n  < + ∞,产生一系列的区间 ;剪枝得到的子树序列对应着区间
的最优子树序列{ T0 ,T1 ,T2 ,···,Tn},序列中的子树是嵌套的。
    具体如下,从整体树T0 开始剪枝,对T0 的任意内部结点t,以t为单结点树的损失函数是
                                                                                                         
以t为根结点的子树 T t 的损失函数是
                                            
    当 α = 0及α充分小时,有不等式
                                            
    当α增大时,在某一α 有   
                                        
    当α再增大时,不等式反向,只要α = C(t) - C(Tt) / |Tt| - 1,Tt 与t有相同的损失函数值,也就是这个时候对t结点剪与不剪枝损失函数都是一样的,而t的结点少,因此t比Tt 更可取,对Tt 进行剪枝。
    为此,对 T 0  中每一个内部结点t,计算
                                    
    它表示剪枝后整体损失函数减少的程度(也就是对应的结点t,当 α 为g(t)时,剪枝和不剪枝生成的树的损失函数都一样,α大于此值并且小于αt+1 时剪枝后损失函数小于不剪枝,但是当α大于等于αt+1 时结点t就不是最佳剪枝点了)。在 T 0  中剪去g(t)最小的 T t ,将得到的子树作为 T 1  ,同时将最小的g(t)设为 α 1  。 T 1  为区间[ α 1 , α 2 )的最优子树。
    如此剪枝下去,直至得到根结点。在这一过程中,不断地增加α的值,产生新的区间。(之所以α值要从小到大剪,而不是从大到小,是因为α越小,树就越大;α从小到大,裁剪后得到的树叶从大到小,这样才能不断的从大剪到小
    2、在剪枝得到的子树序列 T 0  ,T 1  ,T 2  ,···,T n 中通过交叉验证选取最优子树 T α
    具体地,利用独立的验证数据集,测试子树序列 T 0  ,T 1  ,T 2  ,···,T n 中各棵子树的平方误差或基尼指数(分别针对回归决策树和分类决策树),当最优子树 T k  确定时,对应的 α k  也确定了,即得到最优决策树 T α  。
    具体算法如下:
    输入:CART算法生成的决策树T0
    输出:最优决策树 T α
    1、设k = 0, T =  T 0
    2、设 α = +
    3、自下而上的对 各内部结点t计算C(Tt),|Tt|以及
                                        统计学习方法笔记-决策树模型_第10张图片
    4、自上而下的访问内部结点t,如果有g(t) = α,进行剪枝,并对叶结点t以多数表决法决定其类,得到树T。
    5、设k = k + 1,αk = α ,Tk = T。
    6、如果T不是由根结点单独构成的树,则回到步骤4.(注意不用重新计算剪枝后的树内部结点的C(Tt)和g(t),而是原用T0
    7、采用交叉验证法在子树序列T0 ,T1 ,T2 ,···,Tn 中选取最优子树Tα



你可能感兴趣的:(机器学习)