决策树学习总结

1.概述

决策树归纳是从有类标号的训练元组中学习决策树。

决策树是一种类似于流程图的树结构,其中,每个内部结点(非叶子结点)表示在一个属性上的测试,每个分支代表该测试的一个输出,而每个树叶结点存放一个类的类标号。

树的最顶层结点是根结点。

有些决策树只能产生二叉树,而有些决策树可能产生非二叉树。

决策树以自顶向下递归的分治方法构造

2.算法归纳

a.用三个参数D,attribute_list和Attribute_selection_method调用该算法。我们称D为数据分区,开始时,它是训练元组和它们相应类标号的完全集。参数attribute_list是描述元组属性的列表。Attribute_selection_method指定选择属性的启发式过程,用了选择可以按类“最好的”区分给定运足的属性。

b.树从单个结点N开始,N代表D中的训练元组。

c.如果D中的元组都为同一类,则结点N变成树叶,并用该类标记它。

d.否则,算法调用Attribute_selection_method确定分裂准则。分裂准则指定分裂属性,并且也指出分裂点或分裂子集。理想情况下,分裂准则这样确定,使得每个分支上的输出分区都竟可能“纯”。一个分区时纯的,如果它的所有元组都属于同一类。换言之,如果根据分裂准则的互斥输出划分D中的元组,则希望结果分区尽可能纯。

e.结点N用分裂准则标记作为结点上的测试。

3.算法描述

算法:Generate_decision_tree.由数据分区D中的训练元组产生决策树

输入:数据分区D,训练元组和它们对应类标号的集合

     attribute_list,候选属性的集合

     Attribute_selection_method,一个确定“最好的”划分数据元组为个体类的分裂准则的过程,这个准则由分裂属性(splitting_attribute)和分裂点或划分子集组成

输出:一个决策树

方法:

  创建一个结点N;

  if  D中的元组都在同一类C中  then

    返回N作为叶结点,以类C标记;

  if attribute_list为空   then

    返回N作为叶子结点,标记中为D中的多数类;    //多数表决

  使用Attribute_selection_method(D,attribute_list),找出“最好的”splitting_criterion;    //这里有多种方法作为"最好的"指标,下面会介绍

  用splitting_criterion标记结点N;

  if splitting_attribute是离散值的,并且允许多路划分 then

    attribute_list  <-- attribute_list -splitting_attribute;

  for splitting_criterion的每个输出j

   //划分元组并对每个分区产生子树

    设Dj是D中满足输出j的数据元组的集合;

    if  Dj为空 then

      加一个树叶到结点N,标记为D中的多数类;

    else

      加一个由Generate_decision_tree(D,attribute_list)返回的结点到N;

  end for

  返回N;

4.找出“最好的”splitting_criterion的各种指标方法(属性选择度量)

  a.信息增益

     来源:应用信息熵的概念,选择具有最高信息增益的塑像作为结点N的分裂属性。

   目的:该属性使结果分区中对元组分类所需要的信息量最小,并反映这些分区中的最小随机性或“不纯性”。

    优点:这种方法使得对一个对象分裂所需要的期望测试数目最小,并确保找到一颗简单的(但不必是最简单的)树。 

   对D中的元组分类所需要的期望信息由下式给出:

        Info(D)=-Σpi*log2(pi) ;i=1,2,...,m

    其中,pi是D中任意元组属于类Ci的非零概率,并用|C(i,D)|/|D|估计。使用以2为底的对数函数是因为信息用二进位编码。

    Info(D)是识别D中元组的类标号所需要的平均信息量。注意,此时我们所有的信息只是每个类的元组所占的百分比。Info(D)又称为D的熵(entropy).

    现在,假设我们要按某属性A划分D中的元组,其中属性根据训练数据的观测具有v个不同值{a1,a2,...,av}.如果A是离散值的,则这些值直接对应于A上测试的v个输出。可以用属性A将D划分为v个分区或子集{D1,D2,...,Dv},其中,Dj包含D中的元组,它们的A值为aj。这些分区对应于从结点N生长出来的分支。理想情况下,我们希望该划分产生元组的准确分类。即我们希望每个分区都是纯的。然而,这些分区多半是不纯的。(在此划分之后)为了得到准确的分类,我们还需要多少信息?这个量由下式度量:

          Info_A(D)=Σ(|Dj|/|D|*Info(Dj)); 其中|Dj|为第j分区中元组的数目,|D|为总元组数目,|Dj|/|D|充当第j个分区的权重。

    Info_A(D)是基于按A划分对D 的元组分类所需要的期望信息。需要的期望信息越小,分区的纯度越高。

    信息增益定义为原来的信息需求(仅基于类比例)与新的信息需求(对A划分后)之间的差。即   Gain(A)=Info(D)-Info_A(D)

        换言之,Gain(A)告诉我们通过A上的划分我们得到了多少。它是指定A的值而导致的信息需求的期望减少。选择具有最高信息增益Gain(A)的属性A作为结点N的分裂属性。这等价于在“能做最佳分类”的属性A上划分,使得完成元组分类还需要的信息最小(即最小化Info_A(D)).

    PS:读者有兴趣可以去百度看看信息熵和热熵的概念,就会明白为何要去信息熵的线性组合的和最小作为分类指标。

  b.增益率

    信息增益度量偏向于具有许多输出的测试。换句话说,它倾向于选择具有大量值的属性。ID3的后继C4.5使用一种称为信息率(gain ratio)的信息增益扩充,试图克服这种偏倚。

        它用“分裂信息(split information)”的值将信息增益规范化。分裂信息类似于Info(D),定义如下

          SplitInfo_A(D)=-Σ{(|Dj|/|D|)*log2(|Dj|/|D|)};j=1,2,...,v

    该值代表有训练数据集D划分成对应于属性A测试的v个输出的v个分区产生的信息。注意,对于每个输出,它相对于D中元组的总数考虑具有该输出的元组数。它不同于信息增益,信息增益度量关于分类基于同样划分的所获得的信息。增益率定义为  

          GrianRate(A)=Grain(A)/SplitInfo_A(D)  ;

    选择具有最大增益率的属性作为分类属性。然而需要注意的是,随着划分信息趋向于0,该比率变得不稳定。为了避免这种情况,增加一个约束:选取的测试的信息增益必须较大,至少与考察的所有测试的平均增益一样大。

  c.基尼指数

    基尼指数(Gini index)在CART中使用。基尼指数度量数据分区或训练元组集D的不纯度,定义为

        Gini(D)=1-Σ(pi^2) ;   i=1,2,...,m

    其中,pi是D中元组属于Ci类的概率,并用|C(i,D)|/|D|估计。对m个类计算和。

    基尼指数考虑每个属性的二元划分。

    首先考虑A是离散值属性的情况:

      其中A具有v个不同值{a1,a2,...,av}出现在D中。为了确定A上最好的二元划分,考虑使用的已知值形成的所有可能子集。每个子集S_A可以看做属性A的一个形如“A€S_A?”的二元测试。给定一个元组,如果该元组A的值出现在S_A列出的值中,则该测试满足。

      当考虑二元划分裂时,计算每个结果分区的不纯度的加权和。例如,如果A的二元划分将D划分成D1和D2,则给定该划分,D的基尼指数为  Gini_A(D)=|D1|/|D|*Gini(D1)+|D2|/|D|*Gini(D2);

          对于每个属性,考虑每种可能的二元划分。对于离散值属性,选择该属性产生最小基尼指数的子集作为它的分裂子集。

    对于连续值属性,必须考虑每个可能的分裂点。其策略类似于上面介绍的信息增益所使用的策略,其中将每对(排序列后的)相邻值的中点作为可能的分裂点。对于给定的(连续值)属性,选择产生最小基尼指数的点作为该属性的分裂点。注意,对于A的可能分裂点split_point,D1是D中满足A《=split_point的元组集合,而D2是D中满足A>split_point的元组集合。

    对于离散或连续值属性A的二元划分导致的不纯度降低为  ΔGini(A)=Gini(D)-Gini_A(D) 最大化不纯度降低(或等价地,具有最小基尼指数) 的属性选为分裂属性。该属性和他的分裂子集(对于离散值的分裂属性)或分裂点(对于连续值的分裂属性)一起形成分裂准则。

    d.其他属性选择度量

      如基于最小描述长度(Minimum Description Length,MDL)原理的属性选择度量。

5.最后内容

    决策树后面还有关于 树剪枝、可伸缩性与决策树归纳、决策树归纳的可视化挖掘  等等内容,笔者也没搞明白,就先写到这里,搞明白了再续写。

采摘至《数据挖掘概念与技术》第3版。

时间: 2024-08-09 06:19:57

决策树学习总结的相关文章

决策树学习(ID3)

参考:<机器学习实战> 优点:计算复杂度不高, 输出结果易于理解,对中间值的缺失不敏感,可以处理不相关特 征数据. 缺点:可能会产生过度匹配问题. 适用数据类型:数值型和标称型. 创建分支的伪代码(createBranch): 图1 1.信息熵: 图1中划分数据集的原则是:将无序的数据变得有序.在划分数据集之前之后信息发生的变化称为信息增益,划分数据集获得的信息增益最高的特征就是最好的选择.(书中对为什么用最大信息熵作为度量的原因并作解释). 信息的定义: 熵:            在Pyt

决策树学习

在学习决策树学习之前,我想先问问几个问题,以便好好梳理思路. 1. 决策树是什么?干啥用的?决策树学习又是什么? 2. 信息增益,纯度,熵是什么?在决策树中是干啥用的? 3. 构建一个决策树包含哪几个步骤?如何构建? 回答: 1. 决策树是一棵用来进行决策的树(哈哈,有点在说废话的赶脚).一旦决策树生成,往里面送入未知的数,都可以推测出结论来,所以他的作用是用来进行分类或推测的.决策树学习就是这棵决策树的学习过程,即他的构造过程.这里详细的解释一下这棵树.这棵树和普通的数据结构里面的树不一样,决

从决策树学习谈到贝叶斯分类算法、EM、HMM

从决策树学习谈到贝叶斯分类算法.EM.HMM 引言 近期在面试中,除了基础 &  算法 & 项目之外,经常被问到或被要求介绍和描写叙述下自己所知道的几种分类或聚类算法(当然,这全然不代表你将来的面试中会遇到此类问题,仅仅是由于我的简历上写了句:熟悉常见的聚类 & 分类算法而已),而我向来恨对一个东西仅仅知其皮毛而不得深入,故写一个有关数据挖掘十大算法的系列文章以作为自己备试之用,甚至以备将来经常回想思考.行文杂乱,但侥幸若能对读者起到一点帮助,则幸甚至哉. 本文借鉴和參考了两本书,

决策树学习基决策树学习基本算法

决策树学习基本算法 输入:训练集; ???? 属性集. 过程:函数 1: 生成结点node; 2: if 中样本全属于同一类别 then 3: ????将node标记为类叶结点; return 4: end if 5: if 中样本在上取值相同 then 6: 将node标记为叶结点,其类别标记为中样本数最多的类; return 7: end if 8: 从中选择最优化分属性 9: for 的每一个值 do 10: 为node生成一个分支; 令表示中在上取值为的样本子集; 11:???? if

机器学习二 -- 决策树学习

决策树学习 从今天开始,坚持每天学习一个机器学习的新知识,加油! 决策树学习是应用最广的归纳推理算法之一,是一种逼近离散值目标函数的方法,在这种方法中学习到的函数被表示为一颗决策树. 决策树表示法 决策树通过把实例从根结点排列到某个叶子结点来分类实例,叶子结点即为实例所属的分类.树上的每一个结点指定了对实例的某个属性的测试,并且该结点的每一个后继分支对应于该属性的一个可能值.分类实例的方法是从这棵树的根节点开始,册数这个结点指定的属性,然后按照给定实例的该属性对应的树枝向下移动,然后这个过程再以

《机器学习》第三章 决策树学习 笔记加总结

<机器学习>第三章 决策树学习 决策树学习方法搜索一个完整表示的假设空间,从而避免了受限假设空间的不足.决策树学习的归纳偏置是优越选择较小的树. 3.1.简介 决策树学习是一种逼近离散值目标函数的方法,在这种方法中学习到的函数被表示为一棵决策树. 决策树(Decision Tree)是一种简单但是广泛使用的分类器.通过训练数据构建决策树,可以高效的对未知的数据进行分类. 决策数有两大优点: 1)决策树模型可以读性好,具有描述性,有助于人工分析: 2)效率高,决策树只需要一次构建,反复使用,每一

从决策树学习谈到贝叶斯分类算法、EM、HMM --别人的,拷来看看

从决策树学习谈到贝叶斯分类算法.EM.HMM 引言 最近在面试中,除了基础 &  算法 & 项目之外,经常被问到或被要求介绍和描述下自己所知道的几种分类或聚类算法(当然,这完全不代表你将来的面试中会遇到此类问题,只是因为我的简历上写了句:熟悉常见的聚类 & 分类算法而已),而我向来恨对一个东西只知其皮毛而不得深入,故写一个有关数据挖掘十大算法的系列文章以作为自己备试之用,甚至以备将来常常回顾思考.行文杂乱,但侥幸若能对读者起到一点帮助,则幸甚至哉. 本文借鉴和参考了两本书,一本是T

决策树学习笔记(Decision Tree)

什么是决策树? 决策树是一种基本的分类与回归方法.其主要有点事模型具有可得性,分类速度快.学习时,利用训练数据,根据损失函数最小化原则建立决策树模型:预测时,对新数据,利用决策树模型进行分类. 决策树学习通常包含以下三个步骤: 选择特征 决策树生成 剪枝 决策树的改进路线: ID3--->C4.5--->CART (1)其中ID3是基于信息增益来选择划分属性 (2)C4.5不直接使用增益率来选择划分属性,而是使用了一个启发式:先从候选划分属性中选取信息增益高于平局水平的属性,再从中选择增益率最

《机器学习实战》第3章 决策树 学习笔记

决策树从数据集合中提取出一系列的规则,这些规则可以用流程图表示,其数据形式非常容易理解:专家系统中就经常使用决策树. 1.决策树的构造:①采用ID3算法(最高信息增益)划分数据集:②递归创建决策树. 2.使用matplotlib的注解功能,可以将存储的树结构转化为容易理解的图形. 3.使用python的pickle模块可用于存储决策树的结构. 4.对于过度匹配的问题,可以通过裁剪树的手段来消除. 5.ID3算法适合处理标称型数据,如果是数值型数据,必须离散化. 6.还有其他的决策树算法,最流行的