`
wbj0110
  • 浏览: 1604712 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

决策树算法总结

阅读更多

参考:《机器学习》Tom版 以及http://blog.csdn.net/v_july_v/article/details/7577684

一、简介

决策树是一个预测模型;他代表的是对象属性与对象值之间的一种映射关系。树中每个节点表示某个对象,而每个分叉路径则代表的某个可能的属性值,而每个叶结点则对应从根节点到该叶节点所经历的路径所表示的对象的值。决策树仅有单一输出,若欲有复数输出,可以建立独立的决策树以处理不同输出。 数据挖掘中决策树是一种经常要用到的技术,可以用于分析数据,同样也可以用来作预测(就像上面的银行官员用他来预测贷款风险)。

从数据产生决策树的机器学习技术叫做决策树学习, 通俗说就是决策树

一个决策树包含三种类型的节点: 1.决策节点——通常用矩形框来表式 2.机会节点——通常用圆圈来表式 3.终结点——通常用三角形来表示 Decision-Tree-Elements.png

决策树学习也是资料探勘中一个普通的方法。在这里,每个决策树都表述了一种树型结构,它由它的分支来对该类型的对象依靠属性进行分类。每个决策树可以依靠对源数据库的分割进行数据测试。这个过程可以递归式的对树进行修剪。 当不能再进行分割或一个单独的类可以被应用于某一分支时,递归过程就完成了。另外,随机森林分类器将许多决策树结合起来以提升分类的正确率。

二、决策树算法

1.ID3算法

  ID3算法是一个由Ross Quinlan发明的用于决策树的算法。这个算法便是建立在上述所介绍的奥卡姆剃刀的基础上:越是小型的决策树越优于大的决策树(be simple简单理论)。尽管如此,该算法也不是总是生成最小的树形结构,而是一个启发式算法。

汤姆.米歇尔《机器学习》中对ID3算法的描述:

 ID3算法思想描述:(个人总结 仅供参考

a.对当前例子集合,计算属性的信息增益;

b.选择信息增益最大的属性Ai(关于信息增益后面会有详细叙述)

c.把在Ai处取值相同的例子归于同于子集,Ai取几个值就得几个子集

d.对依次对每种取值情况下的子集,递归调用建树算法,即返回a,

e.若子集只含有单个属性,则分支为叶子节点,判断其属性值并标上相应的符号,然后返回调用处。

 

2.最佳分类属性

判断测试哪个属性为最佳的分类属性是ID3算法的核心问题,那么这里就要介绍两个比较重要的概念:信息增益的度量标准:熵和信息增益Gain(S,A)

以下为《机器学习》和援引处的内容 有修改

1)信息增益的度量标准:熵

为了精确地定义信息增益,我们先定义信息论中广泛使用的一个度量标准,称为entropy),它刻画了任意样例集的纯度(purity)。给定包含关于某个目标概念的正反样例的样例集S,那么S相对这个布尔型分类的熵为:

上述公式中,p+代表正样例,比如在本文开头第二个例子中p+则意味着去打羽毛球,而p-则代表反样例,不去打球(在有关熵的所有计算中我们定义0log0为0)。

相关代码实现:(代码有些晦涩难懂,如欲详加了解 请看:http://blog.csdn.net/yangliuy/article/details/7322015 里面有ID3完整的代码)

复制代码
//根据具体属性和值来计算熵   
double ComputeEntropy(vector <vector <string> > remain_state, string attribute, string value,bool ifparent){  
    vector<int> count (2,0);  
    unsigned int i,j;  
    bool done_flag = false;//哨兵值   
    for(j = 1; j < MAXLEN; j++){  
        if(done_flag) break;  
        if(!attribute_row[j].compare(attribute)){  
            for(i = 1; i < remain_state.size(); i++){  
                if((!ifparent&&!remain_state[i][j].compare(value)) || ifparent){//ifparent记录是否算父节点   
                    if(!remain_state[i][MAXLEN - 1].compare(yes)){  
                        count[0]++;  
                    }  
                    else count[1]++;  
                }  
            }  
            done_flag = true;  
        }  
    }  
    if(count[0] == 0 || count[1] == 0 ) return 0;//全部是正实例或者负实例   
    //具体计算熵 根据[+count[0],-count[1]],log2为底通过换底公式换成自然数底数   
    double sum = count[0] + count[1];  
    double entropy = -count[0]/sum*log(count[0]/sum)/log(2.0) - count[1]/sum*log(count[1]/sum)/log(2.0);  
    return entropy;  
}  
复制代码


举例来说,假设S是一个关于布尔概念的有14个样例的集合,它包括9个正例和5个反例(我们采用记号[9+,5-]来概括这样的数据样例),那么S相对于这个布尔样例的熵为:

Entropy([9+,5-])=-(9/14)log2(9/14)-(5/14)log2(5/14)=0.940。

    注意,如果S的所有成员属于同一类,Entropy(S)=0,例如,如果所有的成员是正的(p+=1),那么p-就是0,于是Entropy(S)=-1*log2(1)-(0)log2(0)=0; 另外S的正反样例数量相等,Entropy(S)=1;S的正反样例数量不等,熵介于0,1之间,如下图所示:
  信息论中对熵的一种解释,熵确定了要编码集合S中任意成员的分类所需要的最少二进制位数。更一般地,如果目标属性具有c个不同的值,那么S相对于c个状态的分类的熵定义为:
    
其中pi是S属于类别i的比例,需要注意的是底数仍然为2,原因熵是以二进制位的个数来度量编码长度,同时注意,如果目标属性具有c个可能值,那么熵最大可能为log2(c)。
 
2)信息增益Gain(S,A)定义和信息增益度量期望的熵降低
 已经有了熵作为衡量训练样例集合纯度的标准,现在可以定义属性分类训练数据的效力的度量标准。这个标准被称为“信息增益(information gain)”。简单的说,一个属性的信息增益就是由于使用这个属性分割样例而导致的期望熵降低(或者说,样本按照某属性划分时造成熵减少的期望,个人结合前面理解,总结为用来衡量给定的属性区分训练样例的能力)更精确地讲,一个属性A相对样例集合S的信息增益Gain(S,A)被定义为:
其中 Values(A)是属性A所有可能值的集合,Sv是S中属性A的值为v的子集,注意上式第一项就是原集合S的熵,第二项是用A分类S后的熵的期望值,第二项描述的期望熵就是每个子集的熵的加权和,权值为属性Sv的样例占原始样例S的比例|Sv|/|S|,所以Gain(S,A)是由于知道属性A的值而导致的期望熵减少,换句话来讲,Gain(S,A)是由于给定属性A的值而得到的关于目标函数值的信息。当对S的一个任意成员的目标值编码时,Gain(S,A)的值是在知道属性A的值后可以节省的二进制位数。
 那么综上,我们就可以得出两个基本公式:
从中可以看出第一个Entropy(S)是熵定义,第二个则是信息增益Gain(S,A)的定义,而Gain(S,A)由第一个Entropy(S)计算出
下面仍然以《机器学习》一书中叙述的内容举例
假定S是一套有关天气的训练样例,描述它的属性包括可能是具有Weak和Strong两个值的Wind。像前面一样,假定S包含14个样例,[9+5-]。在这14个样例中,假定正例中的6个和反例中的2个有Wind =Weak其他的有Wind=Strong。由于按照属性Wind分类14个样例得到的信息增益可以计算如下。
信息增益正是ID3算法增长树的每一步中选取最佳属性的度量标准下图(网上拷下可惜没有清晰版) 计算了两个不同属性:湿度(humidity)和风力(wind)的信息增益,以便决定对于训练样例哪一个属性更好

通过以上的计算,相对于目标,Humidity比Wind有更大的信息增益

下图仍摘取自《机器学习》 是ID3第一步后形成的部分决策树 其中经比较OutLook的信息增益最大 选作root

上图中分支Overcast的所有样例都是正例,所以成为目标分类为Yes的叶结点。另两个结点将被进一步展开,方法是按照新的样例子集选取信息增益最高的属性。

以上完整代码参见http://blog.csdn.net/yangliuy/article/details/7322015

3.另一种决策树算法C4.5

这里仅作简单介绍

1)概览:

由于ID3算法在实际应用中存在一些问题,于是Quilan提出了C4.5算法,严格上说C4.5只能是ID3的一个改进算法。

C4.5算法继承了ID3算法的优点,并在以下几方面对ID3算法进行了改进:

  • 用信息增益率来选择属性,克服了用信息增益选择属性时偏向选择取值多的属性的不足;有关信息增益率的定义可以参考栾丽华和吉根林的论文《决策树分类技术研究》1.2节。
  •  在树构造过程中进行剪枝;
  •  能够完成对连续属性的离散化处理;
  •  能够对不完整数据进行处理。

C4.5算法有如下优点:产生的分类规则易于理解,准确率较高。其缺点是:在构造树的过程中,需要对数据集进行多次的顺序扫描和排序,因而导致算法的低效。此外,C4.5只适合于能够驻留于内存的数据集,当训练集大得无法在内存容纳时程序无法运行。

2)主要步骤:

a. 读取文件信息,统计数目

b. 建立决策树

    • 如果样本集为空,则生成一个信息数目都为0的树节点返回
    • 如果样本均为同一类别,则生成一个叶子节点返回
    • 计算节点正负样本的数目
    • 如果属性值只有那个类别的属性,则生成一个叶子节点,并赋值类型索引
    • 如果以上都不是,则选择一个增益率最大的属性(连续属性要用增益率离散化),按那个属性的取值情况从新定义样本集和属性集,建造相关子树

c. 事后剪枝(采用悲观错误率估算)

d. 输出决策树

e. 移除决策时

主要重点有:信息增益率的计算、事后剪枝使用悲观错误率衡量、树的建造(分治思想)

信息增益率的计算相关公式:

 

 

悲观错误剪枝PEP算法:(以下知识简单引导一下 如需详加了解 请阅览相关剪枝算法的书籍 ,笔者没有对此作深入的研究,so不做细讲)

所用来剪枝的度量的基本思想可以概述为以下几点:
  • 假设训练数据集生成原始树为T,某一叶子结点的实例个数为nt(t为右下标,以下同),其中错误分类的个数为et;
  • 我们定义训练数据集的误差率如下公式所示:                   

由于训练数据集既用来生成决策树又用来修剪树,所以是有偏倚的,利用它来修剪的决策树树并不是最精确,最好的;
  • 为此,Quinlan在误差估计度量中增加了连续性校正,将误差率的公式修改为如下公式所示
  • 那么,同样的,我们假设s为树T的子树的其中一个子节点,则该子树的叶子结点的个数为ls ,Tt的分类误差率如下公式所示:

在定量的分析中,为简单起见,我们用误差总数取代上面误差率的表示,即有公式:

那么,对于子树Tt,它的分类误差总数如下公式所示:

 

 

http://www.cnblogs.com/biyeymyhjob/archive/2012/07/23/2605208.html

 

分享到:
评论

相关推荐

    决策树算法总结.docx

    决策树算法是一种广泛应用的机器学习方法,主要用于分类和回归任务。它通过构建一棵树状模型来做出决策,每个内部节点代表一个特征或属性测试,每个分支代表一个测试输出,而叶子节点则代表最终的决策结果。以下是...

    决策树算法及其实现

    总结起来,决策树算法的核心在于递归地选择最优特征对数据集进行分裂,直到达到停止条件。它能够很好地处理各种类型的特征,包括数值型和分类型,并且模型直观易于解释。尽管决策树在某些情况下可能会出现过拟合,...

    实验三 决策树算法实验实验报告.pdf

    本实验报告主要关注的是决策树算法的实践应用,旨在帮助学生理解其分类原理和实现过程。 实验原理基于决策树学习和分类,决策树通过不断选择最优属性进行划分,以最大化信息增益或基尼指数,直到所有样本属于同一...

    决策树算法原理详解

    ### 决策树算法原理详解 #### 一、信息熵(Entropy) 信息量是指一个样本或事件所包含的信息量。若一个事件的发生概率较高,则该事件携带的信息量相对较少。例如,“太阳从东方升起”这一事件是确定性的,因此不...

    论文研究-基于决策树算法的设计模式抽取 .pdf

    根据提供的文件内容,本文讨论了基于决策树算法的设计模式抽取的重要性与实现方法。设计模式是软件开发中应用广泛的一种经验总结,它能指导开发者更高效地解决软件设计中常见的问题。设计模式不仅包括架构层面,而且...

    机器学习算法总结_决策树.doc

    【决策树算法详解】 决策树是一种在机器学习领域广泛应用的监督学习算法,它主要用于分类问题。决策树构建的模型能够直观地表示出特征与类别之间的关系,使得模型解释性极强。以下是关于决策树的详细知识: 1. **...

    决策树算法在分析客户价值中的应用

    总结来说,决策树算法在客户价值分析中扮演着重要角色,它为企业提供了一种有效的方法来理解和预测客户行为,实现精准营销。然而,实际应用时需注意其局限性,并通过适当的优化策略来提升模型的表现。

    决策树算法

    总结来说,这个资源包提供了决策树算法的完整工作流程,从构建和训练模型到测试和应用实例,再到结果的可视化。通过学习和实践这些代码,你可以深入了解决策树的工作原理,并掌握如何将其应用于实际问题,比如隐形...

    3.3+决策树算法_决策树_决策树算法_

    总结,决策树算法是一种强大的工具,广泛应用于各种领域,如金融风险评估、医疗诊断系统和市场细分等。了解其基本原理并掌握如何在Python中运用,可以帮助我们有效地解决问题并提供可解释的预测模型。在实际应用中,...

    C语言实现的决策树算法

    总结以上,C语言实现决策树算法涉及到数据预处理、决策树模型的选择与构建、递归编程、剪枝策略、内存管理等多个方面。通过这个项目,不仅可以深入理解决策树的工作原理,还能锻炼C语言编程技巧。

    决策树算法及应用拓展_教程.ppt

    总结来说,决策树算法是一种强大的工具,它通过构建直观的树状模型来进行分类预测。在实际应用中,我们需要结合决策树生成、剪枝以及对数据变化的敏感性来构建稳健且有效的模型。通过理解和掌握这些知识点,我们可以...

    决策树_决策树_水仙花_决策树算法_复杂网络_

    总结起来,"决策树_水仙花_决策树算法_复杂网络"这一主题涵盖了决策树算法在处理分类问题上的应用,通过水仙花数据集提供了一个直观的学习案例,同时强调了决策树在理解复杂网络中的潜在应用。通过对决策树的深入...

    机器学习C++源码解析-决策树cart算法-源码+数据

    总结来说,"机器学习C++源码解析-决策树cart算法-源码+数据"这个资源提供了从理论到实践学习决策树CART算法的全面材料。通过阅读和理解C++源码,开发者可以深入掌握决策树的实现细节,同时也可以通过实际数据运行...

    论文研究-数据挖掘中决策树算法的最新进展.pdf

    论文《论文研究-数据挖掘中决策树算法的最新进展》总结了决策树算法在数据挖掘中的基础原理和优势,同时指出了其在大数据环境下的局限性,并从五个主要方面综述了决策树算法的最新进展,最后探讨了该领域所面临的...

    决策树C45算法总结课件(PPT 41).pptx

    C4.5算法是基于ID3算法的一种分类决策树算法,由JR Quinlan于1993年提出。该算法的核心思想是从训练样本中学习出决策规则,自动构造出决策树。C4.5算法的输入是带类标的数据,输出是树形的决策规则。 C4.5算法的...

    基于分布式运算的决策树算法的研究与实现.pdf

    1. 分布式计算与决策树算法结合的研究背景: 随着互联网、物联网以及智能设备的广泛应用,产生了大量的数据资源,这就是大数据的来源。在高科技时代,数据挖掘成为了热门技术,其目的是从海量数据中提取有价值的信息...

    决策树算法分析报告.doc

    总结来说,决策树算法在数据挖掘中扮演着至关重要的角色。不同算法有其独特优势,选择哪种算法取决于具体任务的需求和数据特性。通过深入研究和比较,我们可以更好地理解和应用这些算法,以解决实际问题并发掘数据的...

    一个简单的ID3决策树算法实现

    总结,ID3算法是决策树学习的基础,虽然存在一些限制,但其简单直观的性质使得它在教育和研究中依然占有重要地位。通过理解ID3算法,我们可以更好地掌握决策树的构建原理,并为理解和实现更复杂的算法如C4.5和CART...

    决策树,决策树算法,Python

    总结来说,Python中的决策树算法主要依赖`sklearn`库,通过选择合适的特征、构建和剪枝决策树,以及调整参数来实现高效的数据分类。在实际项目中,理解决策树的工作原理和优化技巧,能够帮助我们构建出更精准、鲁棒...

    基于《统计学习方法》的决策树算法原理总结

    内容概要:本文根据李航老师的著作《统计学习方法》,全面系统地阐述了决策树模型的核心知识点,包括不确定性衡量、特征筛选标准、损失函数以及决策树构造和优化的方法论,并剖析了决策树算法的实际应用效果。...

Global site tag (gtag.js) - Google Analytics