该章结构
一、决策树模型与学习:
1、决策树模型:
- 决策树:决策树由节点和有向边组成,节点有两种类型:一种是内部节点,其表示一个特征或属性,一种是叶节点表示一个类别。
2、决策树与条件概率分布:
- 决策树可以表示为:给定特征条件下类的条件概率分布;这一条件概率分布定义在特征空间的一个划分上;这个划分将特征空间划分为互不相交的单元,并且在每个单元上定义一个类的概率分布;这个类的概率分布其实质就是在这个单元中的样本属于某一类的概率,可以理解为一个长度为类个数的列表,列表中的元素就是该单元中的样本属于某一类的概率,这个概率一般是通过统计训练样本得到;每个单元的类的概率分布就构成了决策树所表示的条件概率分布
- 决策树中的每条路径对应于划分中的一个单元。即决策树的每个叶节点对应于一个单元。
- 假设为表示特征向量的随机变量,表示类的随机变量,条件概率分布可以表示为。取值为给定划分下单元的集合(实质上的取值应该是某个样本,但样本一定是落在某个单元中的,而每个单元类的概率分布是一样的,所以可以理解为的取值为某个划分单元);取值为类的集合。
- 各叶结点(单元)往往偏向某一个类, 即属于概率较大的某一类。 决策树分类时将该叶结点(单元)的实例强行分到条件概率大的那一类中去。
- 上面的描述可能有点抽象小面用一个列子来解释一下:图1是一个划分,图2是一个概率分布,图3是决策树,他们的对应关系我用红色数字标出来了;从图2我们可以看出:单元1全是+1的样本,单元2全是-1的样本,单元3全是-1的样本数多于+1的样本数,单元4全是+1的样本数多于-1的样本数。
3、决策树的学习:
- 假设训练集为:其中
- 决策树学习本质上是从训练数据集中归纳出一组分类规则。与训练集不相矛盾的决策树可能有多个,我们需要的是一个于训练集矛盾较小同时又有很好的泛化能力的决策树。
-
总统思路:
- 决策树学习的算法通常是一个递归地选择最优特征的过程,并根据该最优特征对训练数据进行分割,使得分割得到的子集数据集有一个最好的分类。这一过程对应着对特征空间的划分,也对应着决策树的构建。
-
过程:
- 开始,构建根结点,将所有训练数据都放在根结点。选择一个最优特征,按照这一特征将训练数据集分割成子集,使得各个子集有一个在当前条件下最好的分类。
- 然后递归向下处理子集:
- 如果这些子集已经能够被基本正确分类,那么构建叶结点,并将这些子集分到所对应的叶结点中去;
- 如果还有子集不能被基本正确分类,那么就对这些子集选择新的最优特征,继续对其进行分割,构建相应的结点。如此递归地进行下去,直至所有训练数据子集被基本正确分类,或者没有合适的特征为止。
- 最后每个子集都被分到叶结点上,即都有了明确的类。这就生成了一棵决策树
-
剪枝:
- 以上方法生成的决策树可能会发生过拟合的现象。
- 这时我们需要对已生成的树自下而上进行剪枝,将树变得更简单,从而使它具有更好的泛化能力。
- 具体说就是:去掉过于细分的叶结点,使其回退到父结点,甚至更高的结点,然后将父结点或更高的结点改为新的叶结点。
- 决策树学习算法主要包含:特征选择、决策树的生成与决策树的剪枝。
- 决策树学习常用的算法有:ID3、C45与CART
二、特征选择:
- 在上面决策树的学习过程中需要选择一个最优的特征;那么什么是最优特征?怎样选择最优特征?
- 最优特征指的是对训练数据具有分类能力的特征。如果利用一个特征进行分类的结果与随机分类的结果没有很大差别,则称这个特征是没有分类能力的。经验上扔掉这样的特征对决策树学习的精度影响不大。
- 通常选择最优特征的准则是信息增益或信息增益比
1、信息增益:
-
熵(entropy):
- 在信息论与概率统计中, 熵是表示随机变量不确定性的度量.
- 设是一个取有限个值的离散随机变量,其概率分布为:则随机变量的熵定义为: 其中规定,的底可以是或对应的熵的单位是比特(bit)或纳特(nat)
- 熵越大随机变量的不确定性就越大。
- 当随机变量只取两个值:1,0时,即的分布为:熵的公式如下:变化图如下:
- 当或时,随机变量完全没有不确定性.当时,,熵取值最大,随机变量不确定性最大.
-
条件熵(conditional entropy):
- 设有随机变量,其联合概率分布为:
- 条件熵表示在己知随机变量的条件下随机变量的不确定性.定义为给定条件下的条件概率分布的熵对的数学期望:这里:.
-
当熵和条件熵公式中的概率由数据估计(特别是极大似然估计)得到时,所对应的熵与条件熵分别称为经验熵和经验条件熵
-
信息增益(information gain):
- 信息增益:表示得知特征的信息而使得类的信息的不确定性减少的程度.
- 特征对训练数据集的信息增益,定义为集合的经验熵与特征给定条件下的经验条件熵之差,即:
- 熵与条件熵 之差称为互信息.决策树学习中的信息增益等价于训练数据集中类与特征的互信息.
-
信息增益算法:
- 设训练数据集为,表示样本个数。类别为:;表示属于的样本个数.设特征有个不同的取值,根据特征的取值将划分为个子集。记子集,中属于类,的样本的集合为
- 输入:训练数据集和特征;
- 输出:特征对训练集的信息增益
- 第一步:计算数据集的经验熵:
- 第二步:计算特征对数据集的经验条件熵:
- 第三步:计算信息增益:
2、信息增益比:
- 信息增益值的大小是相对于训练数据集而言的,并没有绝对意义.在分类问题困难时,也就是说在训练数据集的经验熵大的时候,信息增益值会偏大.反之,信息增益值会偏小
- 使用信息增益比可以对上面这一问题进行修复.这是特征选择的另一准则.
- 信息增益比:
- 特征A对训练数据集的信息增益比定义为:其信息增益与训练数据集的经验熵之比:
三、决策树的生成:
1、ID3 算法:
- ID3算法的核心是:在决策树各个结点上应用信息增益准则选择特征,递归地构建决策树.
-
具体方法是:
- 从根结点开始,每个结点计算所有可能的特征的信息增益,选择信息增益最大的特征作为当前结点的特征,由该特征的不同取值对该节点的样本进行划分,并建立子结点;
- 再对子结点递归地调用以上方法,构建决策树;
- 直到所有特征的信息增益均很小或没有特征可以选择为止.
-
ID3算法:
- 输入:训练数据集,特征集,阈值;
- 输出:决策树.
- 第一步:若中所有实例属于同一类,则为单结点树,并将类作为该结点的类标记,返回;
- 第二步:若,则为单结点树,并将中实例数最多的类,作为该结点的类标记,返回;
- 第三部:计算中各特征对的信息增益,选择信息增益最大的特征
- 第四部:如果的信息增益小于阈值,则置为单结点树,并将中实例数最多的类,作为该结点的类标记,返回;
- 第五部:如果的信息增益大于阈值,对的每一可能取值,依将分割为若干非空子集,将中实例数最大的类作为标记,构建子结点,由该结点及其子结点构成树,返回;
- 第六部:对第个子结点,以为训练集,以为特征集,递归地调用步(1)~步(5),得到子树,返回.
2、C4.5 算法:
- C4.5算法对ID3算法进行了改进.C4.5在生成的过程中,用信息增益比来选择特征.
-
C4.5算法:
- 输入:训练数据集,特征集,阈值;
- 输出:决策树.
- 第一步:若中所有实例属于同一类,则为单结点树,并将类作为该结点的类标记,返回;
- 第二步:若,则为单结点树,并将中实例数最多的类,作为该结点的类标记,返回;
- 第三部:计算中各特征对的信息增益比,选择信息增益最大的特征
- 第四部:如果的信息增益比小于阈值,则置为单结点树,并将中实例数最多的类,作为该结点的类标记,返回;
- 第五部:如果的信息增益比大于阈值,对的每一可能取值,依将分割为若干非空子集,将中实例数最大的类作为标记,构建子结点,由该结点及其子结点构成树,返回;
- 第六部:对第个子结点,以为训练集,以为特征集,递归地调用步(1)~步(5),得到子树,返回.
四、决策树的剪枝:
- 设树的叶结点个数为,假设是树的叶结点,该叶结点有个样本点,其中类的样本点有个,,为叶结点上的经验熵,为参数,则决策树学习的损失函数可以定义为:其中经验熵为:在损失函数中,令:则有:表示模型对训练数据的预测误差,即模型与训练数据的拟合程度,表示模型复杂度,参数控制两者之间的影响.较大的促使选择较简单的模型,较小的促使选择较复杂的模型(树).意味着只考虑模型与训练数据的拟合程度,不考虑模型的复杂度.
- 这样剪枝就是当确定时,选择损失函数最小的模型,即损失函数最小的子树,这个子树的含义是:剪枝只在使用生成算法已经生成好的决策树和该树的子树中间选择损失最小的模型。子树越大,往往与训练数据的拟合越好,但是模型的复杂度就越高;相反,子树越小,模型的复杂度就越低,但是往往与训练数据的拟合不好.损失函数正好表示了对两者的平衡.
-
经过上面分析我们可以这样理解:
- 决策树生成阶段:使用生成算法生成决策树,这时使用的损失函数是,这样生成一颗很大和复杂的决策
- 剪枝阶段:我们可以将这一阶段理解为,我们将上一阶段的生成的决策树进行随机的剪枝,生成很多上一阶段生成的决策树的子树。然后使用作为损失函数来选择一颗该损失函数最小的子树作为最后的决策树
-
C4.5算法:
- 输入:生成算法产生的整个树,参数;
- 输出:修剪后的子树,.
- 第一步:计算每个结点的经验熵.
- 第二步:递归地从树的叶结点向上回缩.
- 当回溯到某个节点将其下面的子树剪掉,将没剪之前的树和剪了之后的树分别记为:和。如果,就直接剪掉,反之将还原到原来的树。
- 第三步:重复第二步直到回溯到根节点,得到损失函数最小的子树.
五、CART算法:
- CART树又叫分类与回归树。
- CART算法假设决策树是二叉树,内部结点特征的取值为“是”和“否”,左分支是取值为“是”的分支,右分支是取值为“否”的分支.这样的决策树等价于递归地二分每个特征,将输入空间即特征空间划分为有限个单元,并在这些单元上确定预测的概率分布,也就是在输入给定的条件下输出的条件概率分布.
-
CART算法由以下两步组成:
- 决策树生成:基于训练数据集生成决策树,生成的决策树要尽量大;
- 决策树剪枝:用验证数据集对已生成的树进行剪枝并选择最优子树,这时用损失函数最小作为剪枝的标准.
1、CART 生成:
-
特征选择:
- 对回归树用平方误差最小化准则,对分类树用基尼指数最小化准则,进行特征选择,生成二叉树.
-
回归树的生成:
- 假设与分别为输入和输出变量,并且是连续变量,给定训练数据集:其中
- 一个回归树对应着输入空间(即特征空间)的一个划分以及在划分的单元上的输出值.假设将输入空间划分为个单元,并且在每个单元上有一个固定的输出值,于是回归树模型可表示为:
- 损失函数:均方误差
- 输入空间划分方法:
- 采用启发式的方法,选择第j个属性变量和它取的值,作为切分变量和切分点,将数据切分为两个区域:
- 然后寻找最优切分变量和最优切分点:
- 若确切分变量可以通过上面式子找到最优切分点.并且上式中和为:遍历所有切分变量,找到最优的切分变量和划分点.再将输入空间划分为两个区域。两个区域的输出为:,。接着对每个区域重复上述划分过程,直到满足停止条件为止。
- 这样就生成一棵回归树;通常称为最小二乘回归树
-
最小二乘回归树生成算法:
- 输入:训练数据集;
- 输出:回归树.
- 第一步:选择最优切分变量与切分点,求解:遍历所有属性变量,对固定的切分变量扫描切分点,选择使式上述达到最小值的对.
- 第二步:用选定的对划分区域并决定相应的输出值:对应输出为:
- 第三步:继续对两个子区域调用步骤一和二,直至满足停止条件.
- 第四步:将输入空间划分为个单元,生成决策树:
-
分类树的生成::
- 分类树用基尼指数选择最优特征,同时决定该特征的最优二值切分点.
-
基尼指数:
- 在分类问题中,假设有个类,样本点属于第k类的概率为,则概率分布的基尼指数定义为:
- 对于给定的样本集合,其基尼指数为:这里,是中属于第类的样本子集,是类的个数.
- 如果样本集合根据特征A是否取某一可能值被分割成和两部分,即:则在特征的条件下,集合的基尼指数定义为:
- 基尼指数表示集合的不确定性,基尼指数表示经分割后集合的不确定性.
- 基尼指数值越大,样本集合的不确定性也就越大,这一点与熵相似.
- 下图是二类分类问题中基尼指数、熵(单位比特) 之半一和分类误差率的关系.横坐标表示概率,纵坐标表示损失.
可以看出基尼指数和熵之半的曲线很接近,都可以近似地代表分类误差率.
-
CART生成算法:
- 输入:训练数据集,停止计算的条件;
- 输出:CART决策树.
- 停止计算的条件:一般是节点的样本数小于某个阈值,或基尼指数小于某各阈值。
- 第一步:假设当前结点的训练数据集为,计算现有特征对该数据集的基尼指数.即对每一个特征,对其可能取的每个值,利用式下式计算时的基尼指数.
- 第二步:在所有可能的特征以及它们所有可能的切分点中,选择基尼指数最小的特征及其对应的切分点作为最优特征与最优切分点.依最优特征与最优切分点,使用下面公式从该结点训练集切分成两个子集,并生成两个子结点,将训练子集分别分配到两个子结点中去.
- 第三部:对两个子节点递归的调用第一步和第二步,直到满足停止条件。
2、CART 剪枝:
- CART剪枝算法由两步组成:
- 首先从生成算法产生的决策树底端开始不断剪枝,直到的根结点,形成一个子树序列;
- 然后通过交叉验证法在独立的验证数据集上对子树序列进行测试,从中选择最优子树.
-
剪枝形成一个子树序列:::
- 在剪枝过程中,计算子树的损失函数:其中,为任意子树,为对训练数据的预测误差(如基尼指数),为子树的叶结点个数,为参数,为参数是时的子树的整体损失.参数权衡训练数据的拟合程度与模型的复杂度.
- 对固定的α,一定存在使损失函数最小的子树,将其表示为。在损失函数最小的意义下是最优的.容易验证这样的最优子树是唯一的.当大的时候,最优子树偏小;当小的时候,最优子树偏大。极端情况,当时,整体树是最优的(整体树是指生成算法生成的决策树).当时,根结点组成的单结点树是最优的.
- 我们将逐渐增大,并将每个对树进行剪枝,将剪枝生成的子树相同的组成一个个区间。这样就会得到个区间:,其中每个区间中的剪枝得到的子树是一样的,并产生一个最优子树序列
-
具体做法:
- 从整体树开始剪枝。对的任意内部结点,以为单结点树的损失函数是:以为根结点的子树的损失函数是:当及充分小时,有不等式:当增大时,在某一有:可以得到:当再增大时,有不等式:这样可以得到:当时,比更可取,可以对进行剪枝
- 然后,对中每一内部结点,计算:
- 在中剪去)最小的,将得到的子树作为,同时将最小的设为, 为区间的最优子树.按照这个方法依次确定:;其中是是只有根节点的决策树
- 交叉验证选取最优子树.
- 利用独立的验证数据集,测试子树序列中各棵子树的平方误差或基尼指数.平方误差或基尼指数最小的决策树被认为是最优的决策树.
-
CART剪枝算法::
- 输入:CART算法生成的决策树;
- 输出:最优决策树
- 第一步:设。·
- 第二步:设。
- 第三步:自下而上地对各内部结点t计算以及
- 第四步:自上而下地访问内部结点t,如果有,进行剪枝,并对叶结点t以多数表决法决定其类,得到树.
- 第五步:设.
- 第六步:如果T不是由根结点单独构成的树,则回到第四步.
- 第七步:采用交叉验证法在子树序列中选取最优子树.