zoukankan      html  css  js  c++  java
  • 决策树

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

      定义(决策树):决策树由结点(node)和 有向边(directed edge)组成。结点有两种类型:内部结点(internal node)和叶节点(leaf node)。内部结点表示一个特征或属性,叶节点表示一个类。

      决策树的路径或其对应的if-then规则集合具有一个重要的性质:互斥并且完备。这就是说,每一个实例都被一条路径或一条规则所覆盖,而且只被一条路径或一条规则所覆盖。

      决策树学习的算法通常是一个递归地选择最优特征,并根据该特征对训练数据进行分割,使得对各个子数据集有一个最好的分类的过程。决策树学习算法包括特征选择决策树生成决策树的剪枝过程。决策树学习常用的算法有ID3C4.5CART

     

      特征选择

      通常特征选择的准则是信息增益信息增益比

      特征增益

      在信息论与概率统计中,熵(entropy)是表示随机变量不确定性的度量。设X是一个取有限个值的离散随机变量,其概率分布为

            

    则随机变量X的熵定义为

              (1)

    在式(1)中,若,则定义。通常式(1)中的对数以2为底或以e为底(自然对数),这是熵的单位分别称作比特(bit)或纳特(nat)。由定义可知,熵只依赖与X的分布,而与X的取值无关,所以也可将X的熵记作,即

              (2)

    熵越大,随机变量的不确定性就越大。从定义可验证

              (3)

      设有随机变量,其联合概率分布为

            

    条件熵表示在已知随机变量X的条件下随机变量Y的不确定性。随机变量X给定的条件下随机变量Y的条件熵(conditional entropy),定义为X给定条件下Y的条件概率分布的熵对X的数学期望

              (4)

    这里,

      当熵和条件熵中的概率由数据估计(特别是极大似然估计)得到时,所对应的熵与条件熵分别称为经验熵(enpirical entropy)和经验条件熵(empirical conditional entropy)。此时,如果有0概率,令

      信息增益(information gain)表示得知特征X的信息而使得类Y的信息的不确定性减少的程度。

      定义(信息增益)特征A对训练数据集D的信息增益,定义为集合D的经验熵与特征A给定条件下D的经验条件熵之差,即

              (5)

    一般地,熵与条件熵之差称为互信息(mutual information)。决策树学习中的信息增益等价于训练数据集中类与特征的互信息。

      根据信息增益准则的特征选择方法是:对训练数据集(或子集)D,计算其每个特征的信息增益,并比较他们的大小,选择信息增益最大的特征。

      设训练数据集为D,表示其样本容量,即样本个数。设有K个类为属于类的样本个数,。设特征A有n个不同的取值,根据特征A的取值将D划分为n个子集的样本个数,。记子集中属于类的样本的集合为,即的样本个数。于是信息增益的算法如下:

      算法(信息增益)

      输入:训练数据集D和特征A;

      输出:特征A对训练数据集D的信息增益

      (1)计算数据集D的经验熵

              (6)

      (2)计算特征A对数据集D的经验条件熵

              (7)

      (3)计算信息增益

              (8)

      信息增益比

      以信息增益作为划分训练数据集的特征,存在偏向于选择取值较多的特征的问题。使用信息增益比(information gain ratio)可以对这一问题进行校正。这是特征选择的另一准则。

      定义(信息增益比)特征A对训练数据集D的信息增益比定义为其信息增益与训练数据集D关于特征A的值的熵之比,即

              (9)

    其中,,n是特征A取值的个数。

     

      决策树的生成

      决策树的生成有ID3C4.5两种生成算法。

      ID3算法

      ID3算法的核心是在决策树各个结点上应用信息增益准则选择特征,递归地构建决策树。

      算法(ID3算法)

      输入:训练数据集D,特征集A,阈值

      输出:决策树T。

      (1)若D中所有实例属于同一类,则T为单结点树,并将类作为该结点的类标记,返回T;

      (2)若,则T为单结点树,并将D中实例数最大的类作为该结点的类标记,返回T;

      (3)否则,按算法计算A中各特征对D的信息增益,选择信息增益最大的特征

      (4)如果的信息增益小于阈值,则置T为单结点树,并将D中实例数最大的类作为该结点的类标记,返回T;

      (5)否则,对的每一可能值,依将D分割为若干非空子集,将中实例数最大的类作为标记,构建子结点,由结点及其子结点构成树T,返回T;

      (6)对第i个子结点,以为训练集,以为特征集,递归地调用步(1)~步(5),得到子树,返回

     

      算法(C4.5的生成算法)

      输入:训练数据集D,特征集A,阈值

      输出:决策树T。

      (1)如果D中所有实例属于同一类,则置T为单结点树,并将作为该结点的类,返回T;

      (2)如果,则置T为单结点树,并将D中实例数最大的类作为该结点的类,返回T;

      (3)否则,按式(9)计算A中各特征对D的信息增益比,选择信息增益比最大的特征

      (4)如果的信息增益比小于阈值,则置T为单结点树,并将D中实例数最大的类作为该结点的类,返回T;

      (5)否则,对的每一个可能值,依将D分割为子集若干非空,将中实例数最大的类作为标记,构建子结点,由结点及其子结点构成树T,返回T;

      (6) 对结点i,以为训练集,以为特征集,递归地调用步(1)~步(5),得到子树,返回

     

      决策树的剪枝

      决策树生成算法递归地产生决策树,知道不能继续下去为止。这样产生的树往往对训练数据的分类很准确,但对未知的测试数据的分类却没有那么准确,即出现过拟合现象。解决这个问题的方法是考虑决策树的复杂度,对已生成的决策树进行简化。在决策树学习中将已生成的树进行简化的过程称为剪枝(pruning)

      下面介绍一种简单的决策树学习的剪枝算法。

      决策树的剪枝往往通过极小化决策树整体的损失函数(loss function)或代价函数(cost function)来实现。设树T的叶结点个数为,t是树T的叶结点,该叶结点有个样本点,其中k类的样本点有个,为叶结点t上的经验熵,为参数,则决策树学习的损失函数可以定义为

              (10)

    其中经验熵为

              (11)

      在损失函数中,将式(10)右端的第一项记作

              (12)

    这时有

              (13)

    式(13)中,表示模型对训练数据的预测误差,即模型与训练数据的拟合程度,表示模型复杂度,参数控制两者之间的影响。较大的促使选择较简单的模型(树),较小的促使选择较复杂的模型(树)。意味着只考虑模型与训练数据的拟合程度,不考虑模型的复杂度。决策树生成学习局部的模型,而决策树剪枝学习整体的模型。式(10)或式(13)定义的损失函数最小原则进行剪枝就是用正则化的极大似然估计进行模型选择。

      算法(树的剪枝算法)

      输入:生成算法产生的整个树T,参数

      输出:修剪后的子树

      (1)计算每个结点的经验熵。

      (2)递归地从树的叶结点向上回缩。

      设一组叶结点回缩到其父结点之前与之后的整体树分别为,其对应的损失函数值分别是

            

    则进行剪枝,即将父结点变为新的叶结点。

      (3)返回(2),直至不能继续为止,得到损失函数最小的子树

     

      CART算法

      分类与回归树(classification and regression tree, CART)模型是应用广泛的决策树学习方法。CART同样由特征选择、树的生成及剪枝组成,既可以用于分类也可以用于回归。以下将用于分类与回归的树统称为决策树。

      CART假设决策树是二叉树,内部结点特征的取值为“是”和“否”,左分支是取值为“是”的分支,右分支是取值为“否”的分支。

      CART算法由以下两步组成:

      (1)决策树生成:基于训练数据集生成决策树,生成的决策树要尽量大;

      (2)决策树剪枝:用验证数据集对已生成的树进行剪枝并选择最优子树,这时用损失函数最小作为剪枝的标准。

      CART生成

      决策树的生成就是递归地构建二叉决策树的过程。对回归树用平方误差最小化准则,对分类树用基尼指数(Gini index)最小化准则,进行特征选择,生成二叉树。

      1、回归树的生成

      算法(最小二乘回归树生成算法)

      输入:训练数据集D;

      输出:回归树

      在训练数据集所在的输入空间中,递归地将每个区域划分为两个子区域并决定每个子区域上的输出值,构建二叉决策树:

      (1)选择最优切分变量j与切分点s,求解

              (14)

      遍历变量j,对固定的切分变量j扫描切分点s,选择使式(14)达到最小值的对(j,s)。

      (2)用选定的对(j,s)划分区域并决定相应的输出值:

            

             

      (3)继续对两个子区域调用步骤(1),(2),直至满足停止条件。

      (4)将输入空间划分为M个区域 ,生成决策树:

            

      2、分类树的生成

      分类树用基尼指数选择最优特征,同时决定该特征的最优二值切分点。

      定义(基尼指数)分类问题中,假设有K个类,样本点属于第k类的概率为,则概率分布的基尼指数定义为

              (15)

    对于二类分类问题,若样本点属于第一类的概率是p,则概率分布的基尼指数为

              (16)

      对于给定的样本集合D,其基尼指数为

              (17)

    这里,是D中属于第k类的样本子集,K是类的个数。

      如果样本集合D根据特征A是否取某一可能值a被分割成两部分,即

            

    则在特征A的条件下,集合D的基尼指数定义为

              (18)

    基尼指数Gini(D)表示集合D的不确定性,基尼指数Gini(D,A)表示经分割后集合D的不确定性。基尼指数值越大,样本集合的不确定性也就越大,这一点与熵相似。

      算法(CART生成算法)

      输入:训练数据集D,停止计算的条件;

      输出:CART决策树。

      根据训练数据集,从根节点开始,递归地对每个结点进行以下操作,构建二叉决策树:

      (1)设结点的训练数据集为D,计算现有特征对该数据集的基尼指数。此时,对每一个特征A,对其可能取的每个值a,根据样本点对的测试为“是”或“否”将D分割成两部分,利用式(18)计算 时的基尼指数。

      (2)在所有可能的特征A以及它们所有可能的切分点a中,选择基尼指数最小的特征及其对应的切分点作为最优特征与最优切分点。依最优特征与最优切分点,从现结点生成两个子结点,将训练数据集依特征分配到两个子结点中去。

      (3)对两个子结点递归地调用(1),(2),直至满足停止条件。

      (4)生成CART决策树。

      算法停止计算的条件是结点中的样本个数小于预定阈值,或样本集的基尼指数小于预定阈值(样本基本属于同一类),或者没有更多特征。

      

      CART剪枝

      CART剪枝算法由两步组成:首先从生成算法产生的决策树低端开始不断剪枝,直到的根节点,形成一个子树序列;然后通过交叉验证法在独立的验证数据集上对子树序列进行测试,从中选择最优子树。

      1、剪枝,形成一个子树序列

      在剪枝过程中,计算子树的损失函数:

              (19)

    其中,T为任意子树,为对训练数据的预测误差(如基尼指数),为子树的叶结点个数,为参数,为参数是时的子树T的整体损失。参数权衡训练数据的拟合程度与模型的复杂度。

      当大的时候,最优子树 偏小;当小的时候,最优子树偏大。极端情况,当时,整体树是最优的。当时,根节点组成的单结点树是最优的。

      从整体树开始剪枝。对的任意内部结点t,以t为单结点树的损失函数是

              (20)

    以t为根节点的子树的损失函数是

              (21)

      当充分小时,有不定式

              (22)

      当增大时,在某一

              (23)

      当再增大时,不等式(22)反向。只要与t有相同的损失函数值,而t的结点少,因此t比更可取,对进行剪枝。

      为此,对中每一内部结点t,计算

               (24)

    它表示剪枝后整体损失函数减少的程度。在中剪去最小的,将得到的子树作为,同时将最小的设为为区间 的最优子树。

      如此剪枝下去,直至得到根节点。在这一过程中,不断地增加的值,产生新的区间。

      2、在剪枝得到的子树序列中通过交叉验证选取最优子树

      算法(CART剪枝算法)

      输入:CART算法生成的决策树

      输出:最优决策树

      (1)设

      (2)设

      (3)自上而下地对各内部结点t计算以及

            

            

    这里,表示以t为根节点的子树,是对训练数据的预测误差,的叶结点个数。

      (4)对的内部结点t进行剪枝,并对叶结点t以多数表决法决定其类,得到树T。

      (5)设

      (6)如果不是由根节点及两个叶结点构成的树,则回到步骤(3);否则令

      (7)采用交叉验证法在子树序列中选取最优子树

  • 相关阅读:
    C#通过反射获取类中的方法和参数个数,反射调用方法带参数
    C#利用WinRAR实现压缩和解压缩
    C# 使用HttpWebRequest Post提交数据,携带Cookie和相关参数示例
    C#使用Linq To XML读取XML,Linq生成XML,Linq创建带属性或带节点XML
    MVC使用Newtonsoft无需实体类,实现JSON数据返回给前端页面使用
    JSON对象与字符串之间的相互转换
    Javascript正则表达式详细讲解和示例,通俗易懂
    C#比较两个list集合,两集合同时存在或A集合存在B集合中无
    Uploadify 3.2上传文件,限制类型,大小,传递参数等
    c# 反射得到实体类的字段名称和值,DataTable转List<T>
  • 原文地址:https://www.cnblogs.com/Peyton-Li/p/7717377.html
Copyright © 2011-2022 走看看