决策树

决策树,顾名思义,即以建树的形式来做决策。

  •  决策树策略:自上向下,分而治之。
  • 基本结构根节点、父节点、子节点和叶子节点。子节点由父节点根据某一规则分裂而来,然后子节点作为新的父亲节点继续分裂,直至不能分裂为止。而根节点是没有父节点的节点,即初始分裂节点,叶子节点是没有子节点的节点。

  • 树的构建

步骤1:将所有的数据看成是一个节点(根节点),进入步骤2

步骤2:根据划分准则,从所有属性中挑选一个对节点进行分割,进入步骤3

步骤3:生成若干个子节点,对每一个子节点进行判断,如果满足停止分裂的条件,进入步骤4;否则,进入步骤2

步骤4:设置该节点是叶子节点,其输出的结果为该节点数量占比最大的类别。

注:在决策树基本算法中,有三种情形会导致递归返回:

1) 当前结点包含的样本全属于同一类别,无需划分;

2) 当前属性集为空,或是所有样本在所有属性上取值相同,无法划分;

3) 当前结点包含的样本集合为空,不能划分。

  • 表示属性的方法

1二元属性:两个输出

2标量属性:具有多个属性值,比如婚姻状况={单身、已婚、离异},两种划分方法:多路划分:(a);二元划分:(b)

3有序属性:同样可以产生二元或多路划分,要求是不违背有序性。例如:

4连续属性:二元或区间形式输出,例如:

  • 划分准则:

一般而言,随着划分过程不断进行,我们希望决策树的分支结点所包含的样本尽可能属于同一类别,即结点的"纯度"越来越高。

1、信息增益

首先了解信息熵的概念

信息熵:假设样本集合D中第k类样本所占的比例为D的信息熵定义为:

Ent(D)越小,则D的纯度越高。

1)约定p=0时,plog(p)=0

2)D只含一类时(纯度最高),此时EntD=0(最小值)

3)当D中所有类所占比例相同(纯度最低),此时EntD=(最大值)

 

假设离散属性aV个不同的取值,若使用a来对样本集D进行划分,则会产生V个分支节点,每个分支节点上的样本在a上的取值都相同

记第v个分支节点上样本为 则可计算其相应的信息熵,再根据每个节点上的样本占比给分支节点赋予权重可计算出以属性a作为划分属性所获得的“信息增益”为:

注:

1)一般而言,信息增益越,则意味着用属性a来进行划分所获得的"纯度提升"越大,因此,我们可用信息增益来进行决策树的划分属性选择。

2)著名的ID3 决策树学习算就是以信息增益为准则来选择划分属性。

 

2、增益率

实际上,信息增益准则对可取值数目较多的属性有所偏好,可以试想,选择一个唯一对应一个样本的属性进行分类,每一类都是最纯的,对应的信息增益也是最大的,然而这样的划分无疑是不具备泛化能力的。

基于此,著名的C4.5决策树算法不直接使用信息增益,而是使用“增益率”来选择最优划分属性:

其中,IVa)称为a的“固有值”,a的可能取值数目越多,IVa)的值通常越大。

需注意的是,增益率准则对可取值数目较少的属性有所偏好,因此, C4.5算法并不是直接选择增益率最大的候选划分属性,而是使用了一个启发式:先从候选划分属性中找出信息增益高于平均水平的属性,再从中选择增益率最高的。

 

3基尼指数

CART决策树使用“基尼指数”来选择划分属性:

显然,Gini反映了从数据集D中随机抽取两个样本,其类别标记不一样的概率,因此,Gini越小,则D的纯度越高。

属性a的基尼指数定义为:

选择使上式最的属性a作为划分属性。

  • 剪枝处理

剪枝是决策树学习算法对付"过拟合"的主要手段。

过拟合原因:

1)噪声导致的过拟合:拟合了被误标记的样例,导致误分类。

2)缺乏代表性样本导致的过拟合:缺乏代表性样本的少量训练集作出的决策会出现过拟合。

3)多重比较造成的过拟合:复杂模型。

基本策略有"预剪枝" "后剪枝"

预剪枝是指在决策树生成过程中,对每个结点在划分前先进行估计,若当前结点的划分不能带来决策树泛化性能提升,则停止划分并将当前结点标记为叶结点;

后剪枝则是先从训练集生成一棵完整的决策树,然后自底向上地对非叶结点进行考察,若将该结点对应的子树替换为叶结点能带来决策树泛化性能提升,则将该子树替换为叶结点。

判断决策树泛化性能是否提升:留出法,即预留一部分数据用作"验证集"以进行性能评估。

例如:在预剪枝中,对于每一个分裂节点,对比分裂前后决策树在验证集上的预测精度,从而决定是否分裂该节点。而在后剪枝中,考察非叶节点,对比剪枝前后决策树在验证集上的预测精度,从而决定是否对其剪枝。

两种方法对比

1)预剪枝使得决策树的很多分支都没有"展开”,不仅降低过拟合风险,而且显著减少训练/测试时间开销;但,有些分支的当前划分虽不能提升泛化性能,但在其基础上进行的后续划分却有可能导致性能显著提高,即预剪枝基于"贪心"本质禁止这些分支展开,给预剪枝决策树带来了欠拟含的风险。

2)后剪枝决策树通常比预剪枝决策树保留了更多的分支。一般情形下,后剪枝决策树的欠拟合风险很小,泛化性能往往优于预剪枝决策树,但后剪枝过程是在生成完全决策树之后进行的,并且要自底向上地对树中的所有非叶结点进行逐一考察,因此其训练时间开销比未剪枝决策树和预剪枝决策树都要大得多。

  • 特殊值处理

1连续值

以上都是基于离散属性进行讨论,而连续属性的可取值数目不再有限, 因此,不能直接根据连续属性的可取值来对结点进行划分。此时需要进行连续属性离散化,最简单的策略是采用二分法对连续属性进行处理(C4 . 5)。 

给定样本集D和连续属性a,假设aD上出现了n个不同的取值,升序排列后记为:基于划分点t可将D分为D-(不大于t)和D+(大于t)两个子集,而对于相邻的属性取值t之间取任何值对分类结果(D-D+)都是一样的,可直接取其中位点进行考虑。

故,对连续属性a,可考察包含n-1个元素的候选划分点t集合:

于是,我们就可像离散属性值一样来考察这些划分点,选取最优的划分点进行样本集合的划分,例如,使用信息增益:

即选择使信息增益最大的划分点进行划分。

注:

1)可将划分点设为该属性在训练集中出现的不大于中位点的最大值,从而使得最终决策树使用的划分点都在训练集中出现过。

2)与离散属性不同,若当前结点划分属性为连续属性,该属性还可作为其后代结点的划分属性。

2缺失值

缺失问题:即样本的某些属性值缺失。

面临问题

1)如何在属性值缺失的情况下进行划分属性选择?

2)给定划分属性,若样本在该属性上的值缺失,如何对样本进行划分?

解决方法:(C4.5

给定训练集D和属性a,仅对D中在属性a上没有缺失值的样本子集来判断属性a的优劣。假定我们为每个样本x赋予一个权重w(x)(初始化为1),定义:

由以上定义,将信息增益推广为:

其中,

对于问题2),若样本xa上的取值缺失,则将x同时划入所有子节点,且样本权值对应于属性值调整为即让同一个样本以不同概率划入不同的子节点中去。

 

以西瓜数据集为例:

以属性“色泽”为例,根节点包含全部17个样例,各样本初始权重为1,该属性上无缺失的样例子集包含编号为{2 3 46 789 1011 12 14151617}14个样例,其信息熵为:

对应的属性取值为“青绿”,“乌黑”,“浅白”的样本子集的信息熵分别为:

因此,非缺失样本子集的信息增益为:

从而,计算得所有样本集的信息增益为:

类似地可计算出其他所有属性在D上的信息增益:

选择信息增益最大对应的属性“纹理”进行划分,划分结果为:

“清晰”分支:编号为{1 ,2 ,3 ,4, 5 ,6 ,15}的样本

“稍糊”分支:编号为{7 ,9, 13, 14, 17}的样本

“模糊”分支:编号为{11 ,12, 16}的样本

缺失样本:{8},同时进入三个分支中,权重分别调整为7/155/153/15;编号{10}类似。

  • 泛化误差估计

1、再代入估计

再代入估计方法假设训练数据集可以很好地代表整体数据,因此,可以使用训练误差(再代入误差)提供对泛化误差的乐观估计。此情形下,决策树算法将简单地选择产生最低训练误差的模型作为最终的模型,尽管,使用训练误差通常是泛化误差的一种很差的估计。

2、结合模型复杂度

根据奥卡姆剃刀原则:“给定两个具有相同泛化误差的模型,较简单的模型比较复杂的模型更可取”,复杂模型中的附加成分很大程度上是基于对偶然的拟合。

以下是把模型复杂度与模型评估结合在一起的方法:

悲观误差评估

使用训练误差与模型复杂度罚项的和来计算泛化误差,如:

n(t)是结点t分类的训练记录数,e(t)是被误分类的记录数,则决策树T的悲观误差可表示为:

其中,k是决策树的叶结点数,e(T)是决策树的总训练误差,是每个叶结点对应的罚项。

 

例:假设有如下决策树,已知其误分类率为6/24,每个结点的惩罚项设为0.5,则其悲观误差为:

注:关于惩罚项的理解:对于二叉树来说,0.5的惩罚项意味着只要至少能够改善一个训练记录的分类,结点就应该分裂,因为分裂一个结点等价于总误差增加0.5,代价比犯一个训练错误小。而如果令惩罚项为1,说明除非能减少一个以上训练记录的误分类,否则结点不应当分裂。

3、使用验证集

此方法中,不使用训练集来估计泛化误差,而是把原始数据集分为训练集和验证集,验证集用于估计泛化误差。通常是通过对算法进行调参,直到算法产生的模型在验证集上达到最低的错误率。

 

posted @ 2018-06-01 15:06  文刀煮月  阅读(18221)  评论(0编辑  收藏  举报