数据挖掘算法之决策树算法总结

机器学习中,决策树是一个预测模型;它代表的是对象属性值与对象值之间的一种映射关系。树中每个节点表示某个对象,每个分叉路径则代表的某个可能的属性值,而每个叶结点则对应具有上述属性值的子对象。决策树仅有单一输出;若需要多个输出,可以建立独立的决策树以处理不同输出。

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

决策树同时也可以依靠计算条件概率来构造。决策树如果依靠数学的计算方法可以取得更加理想的效果。1986Quinlan提出了著名的ID3算法。在ID3算法的基础上,1993Quinlan又提出了C4.5算法。为了适应处理大规模数据集的需要,后来又提出了若干改进的算法,其中SLIQ (super-vised learning in quest)SPRINT (scalable parallelizableinduction of decision trees)是比较有代表性的两个算法。

决策树的工作原理

决策树一般都是自上而下的来生成的。 选择分割的方法有多种,但是目的都是一致的,即对目标类尝试进行最佳的分割。

从根节点到叶子节点都有一条路径,这条路径就是一条“规则”。决策树可以是二叉的,也可以是多叉的。对每个节点的衡量:

  1. 通过该节点的记录数;
  2. 如果是叶子节点的话,分类的路径;
  3. 对叶子节点正确分类的比例。

 (1) ID3算法

ID3算法的核心是:在决策树各级结点上选择属性时,用信息增益(information gain)作为属性的选择标准,以使得在每一个非叶结点进行测试时,能获得关于被测试记录最大的类别信息。其具体方法是:检测所有的属性,选择信息增益最大的属性产生决策树结点,由该属性的不同取值建立分支,再对各分支的子集递归调用该方法建立决策树结点的分支,直到所有子集仅包含同一类别的数据为止。最后得到一棵决策树,它可以用来对新的样本进行分类。

ID3算法的优点是:算法的理论清晰,方法简单,学习能力较强。其缺点是:只对比较小的数据集有效,且对噪声比较敏感,当训练数据集加大时,决策树可能会随之改变。

(2) C4.5算法

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

  1. 用信息增益率来选择属性,克服了用信息增益选择属性时偏向选择取值多的属性的不足;
  2. 在树构造过程中进行剪枝;
  3. 能够完成对连续属性的离散化处理;
  4. 能够对不完整数据进行处理。

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

(3) SLIQ算法

SLIQ算法对C4.5决策树分类算法的实现方法进行了改进,在决策树的构造过程中采用了“预排序”和“广度优先策略”两种技术。

  1. 预排序。对于连续属性在每个内部结点寻找其最优分裂标准时,都需要对训练集按照该属性的取值进行排序,而排序是很浪费时间的操作。为此,SLIQ算法采用了预排序技术。所谓预排序,就是针对每个属性的取值,把所有的记录按照从小到大的顺序进行排序,以消除在决策树的每个结点对数据集进行的排序。具体实现时,需要为训练数据集的每个属性创建一个属性列表,为类别属性创建一个类别列表。
  2. 广度优先策略。在C4.5算法中,树的构造是按照深度优先策略完成的,需要对每个属性列表在每个结点处都进行一遍扫描,费时很多,为此,SLIQ采用广度优先策略构造决策树,即在决策树的每一层只需对每个属性列表扫描一次,就可以为当前决策树中每个叶子结点找到最优分裂标准。

SLIQ算法由于采用了上述两种技术,使得该算法能够处理比C4.5大得多的训练集,在一定范围内具有良好的随记录个数和属性个数增长的可伸缩性。然而它仍然存在如下缺点:

  1. 由于需要将类别列表存放于内存,而类别列表的元组数与训练集的元组数是相同的,这就一定程度上限制了可以处理的数据集的大小。
  2. 由于采用了预排序技术,而排序算法的复杂度本身并不是与记录个数成线性关系,因此,使得SLIQ算法不可能达到随记录数目增长的线性可伸缩性。

(4) SPRINT算法

为了减少驻留于内存的数据量,SPRINT算法进一步改进了决策树算法的数据结构,去掉了在SLIQ中需要驻留于内存的类别列表,将它的类别列合并到每个属性列表中。这样,在遍历每个属性列表寻找当前结点的最优分裂标准时,不必参照其他信息,将对结点的分裂表现在对属性列表的分裂,即将每个属性列表分成两个,分别存放属于各个结点的记录。

SPRINT算法的优点是在寻找每个结点的最优分裂标准时变得更简单。其缺点是对非分裂属性的属性列表进行分裂变得很困难。解决的办法是对分裂属性进行分裂时用哈希表记录下每个记录属于哪个孩子结点,若内存能够容纳下整个哈希表,其他属性列表的分裂只需参照该哈希表即可。由于哈希表的大小与训练集的大小成正比,当训练集很大时,哈希表可能无法在内存容纳,此时分裂只能分批执行,这使得SPRINT算法的可伸缩性仍然不是很好。


 下面以ID3和C4.5为例说明:

ID3算法

      信息论知识中我们直到,期望信息越小,信息增益越大,从而纯度越高。所以ID3算法的核心思想就是以信息增益度量属性选择,选择分裂后信息增益最大的属性进行分裂。下面先定义几个要用到的概念。

      D为用类别对训练元组进行的划分,则Dentropy)表示为:      

数据挖掘算法之决策树算法总结

      其中pi表示第i个类别在整个训练元组中出现的概率,可以用属于此类别元素的数量除以训练元组元素总数量作为估计。熵的实际意义表示是D中元组的类标号所需要的平均信息量。

      现在我们假设将训练元组D按属性A进行划分,则AD划分的期望信息为:      

数据挖掘算法之决策树算法总结

      而信息增益即为两者的差值:      

数据挖掘算法之决策树算法总结

      ID3算法就是在每次需要分裂时,计算每个属性的增益率,然后选择增益率最大的属性进行分裂。下面我们继续用SNS社区中不真实账号检测的例子说明如何使用I

D3算法构造决策树。为了简单起见,我们假设训练集合包含

10个元素:

数据挖掘算法之决策树算法总结

      其中sml分别表示小、中和大。

      LFHR表示日志密度、好友密度、是否使用真实头像和账号是否真实,下面计算各属性的信息增益。      

数据挖掘算法之决策树算法总结

      


数据挖掘算法之决策树算法总结


 数据挖掘算法之决策树算法总结

      因此日志密度的信息增益是0.276

      用同样方法得到HF的信息增益分别为0.0330.553

      因为F具有最大的信息增益,所以第一次分裂选择F为分裂属性,分裂后的结果如下图表示:

 

数据挖掘算法之决策树算法总结

 

      在上图的基础上,再递归使用这个方法计算子节点的分裂属性,最终就可以得到整个决策树。

      上面为了简便,将特征属性离散化了,其实日志密度和好友密度都是连续的属性。对于特征属性为连续值,可以如此使用ID3算法:

      先将D中元素按照特征属性排序,则每两个相邻元素的中间点可以看做潜在分裂点,从第一个潜在分裂点开始,分裂D并计算两个集合的期望信息,具有最小

期望信息的点称为这个属性的最佳分裂点,其信息期望作为此属性的信息期望。

3.3.2、C4.5算法

      ID3算法存在一个问题,就是偏向于多值属性,例如,如果存在唯一标识属性ID,则ID3会选择它作为分裂属性,这样虽然使得划分充分纯净,但这种划分对分类几乎毫无用处。ID3的后继算法C4.5使用增益率gain ratio)的信息增益扩充,试图克服这个偏倚。

      C4.5算法首先定义了“分裂信息”,其定义可以表示成:      

数据挖掘算法之决策树算法总结

      其中各符号意义与ID3算法相同,然后,增益率被定义为:

      

数据挖掘算法之决策树算法总结

 

      C4.5选择具有最大增益率的属性作为分裂属性,其具体应用与ID3类似,不再赘述。

参考来源:

 

http://www.cnblogs.com/kidoln/archive/2012/01/05/2312679.html

 

http://www.cnblogs.com/leoo2sk/archive/2010/09/19/1831151.html

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/293203.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微软职位内部推荐-SDEII

微软近期Open的职位:JD如果你想试试这个职位,请跟我联系,我是微软的员工,可以做内部推荐。发你的中英文简历到我的邮箱:Nicholas.lu.mail(at)gmail.com转载于:https://www.cnblogs.com/DotNetNuke/p/3891832.html

win7升级win10正式版_win7告退在即,如何升级到win10?

Win7即将停更,小伙伴们也差不多要进行自己系统的更新啦,今天小白就教大家如何将Win7升级到Win10第一步:首先在官网 www.xiaobaixitong.com 下载“小白软件”第二步:选好我们要下载的系统,然后安装即可。第三步&#xf…

C++容器的insert()函数有以下三种用法: 最终*it=val;

C容器的insert()函数有以下三种用法: 最终*itval; //用法1:在指定位置it前“插入”值为val的元素,返回指向这个元素的迭代器, iterator insert( iterator it, const TYPE &val ); //用法2:在指定位置it前“插入”num个值为val的元素 void insert( iterator it, si…

在24小时内学完所有的数学是种什么体验?我们做了这个大胆的尝试……

全世界只有3.14 % 的人关注了爆炸吧知识人还好就是没了而已其实,在此时,还有一件事情发生了。22:00,我们发出了这篇文章,不仅将2600多年的数学简史浓缩成24小时,还将2600多年数学简史浓缩成54张卡牌。每张卡牌背后都有…

Server Develop (八) IOCP模型

IOCP模型 IOCP全称I/O Completion Port,中文译为I/O完成端口。IOCP是一个异步I/O的Windows API,它可以高效地将I/O事件通知给应用程序,类似于Linux中的Epoll。 简介 IOCP模型属于一种通讯模型,适用于Windows平台下高负载服务器的一…

理解RESTful架构

2019独角兽企业重金招聘Python工程师标准>>> 原文:http://www.ruanyifeng.com/blog/2011/09/restful.html?20160826000527 越来越多的人开始意识到,网站即软件,而且是一种新型的软件。 这种"互联网软件"采用客户端/服务…

凡是过往,皆为序章。

凡是过往,皆为序章今天是元旦假期的最后一天,这三天我一直在想,21年的年终总结应该如何下笔。其实心里面想表达和记录的事情很多,可当真正坐在电脑前时,却发现没有头绪。贵有恒,何必三更起五更眠。最无益&a…

大数求和

描述: 给定两个非常大的正整数A和B,位数在50至100之间。求C=A+B; 题目类别: 字符串 难度: 中级 运行时间限制: 10Sec 内存限制: 128MByte 输入: 因为A和B很大,从高位到低位,以字符串的形式输入两行数字A和B。A和B的位数在50至100之间。 输出: 以字符串形式,输出…

[转]Myeclipse9引入easy_ui时,其中的部分js文件报错

博客原文http://blog.csdn.net/simplty/article/details/7661504转载于:https://www.cnblogs.com/Bird-Man/p/3897045.html

《SAS编程与数据挖掘商业案例》学习笔记之八

十:file语句 file中的option选项: Dlm 指定列表输出文件的分隔符,默认是空格 Dropover 规定当输出数据行长度超过指定值时,忽略超出部分 Flowover 规定当输出数据行长度超过指定值时,超过部分在下…

查看操作系统版本linux_LINUX操作系统常用操作收录(二):查看文件内容命令小结...

先整体了解一下如何查看文件内容的命令vi 兼有修改功能的查看方式,会单独打开整个文件vim 可修改文件内容并且显示当前查看位置在文件中的%多少cat 由第一行开始显示内容,并将所有内容输出tac 从最后一行倒序显示内容,并将所有内容输出more…

crond定时任务详细分析

一、定时任务crond的介绍 crond是linux系统中用来定期执行命令或指定程序任务的一种服务或软件。一般情况下,我们安装文成系统之后,默认变回启动crond任务调度服务,crond服务会定期(默认每分钟检查一次)检查系统中是否有要执行的任务工作。…

分解字符串

题目 按要求分解字符串,输入两个数M,N;M代表输入的M串字符串,N代表输出的每串字符串的位数,不够补0。例如:输入2,8, “abc” ,“123456789”,则输出为“abc00000”,“12345678“,”90000000” 代码 #include<iostream> #include<string> #include<ve…

OCS2007R2升级LyncSrv2013 PART4:关联边缘

完成拓扑的合并后&#xff0c;由于边缘服务器尚未做迁移和升级&#xff0c;所以此时我们的Lync Server没有边缘服务、联盟路由等。我们就可以把OCS的边缘服务器与Lync Server前端进行关联&#xff0c;暂时使用OCS的联盟路由和边缘服务。要关联OCS边缘服务器&#xff0c;需要打开…

2021技术文大盘点 | 打包过去,​面向未来

先用四句诗词快速描述 一下我的写作心得1. 只在此山中&#xff0c;云深不知处作为开发人员&#xff0c;常执着于机器0,1代码&#xff0c;非假既真&#xff1b;真实世界是很主观的&#xff0c;需要精致细节&#xff0c;更多时候需要全局把控。带着问题写作&#xff0c;对事物理解…

Ansible 一步一步从入门到精通(一)

一&#xff1a;安装ansiblemac&#xff1a;1. 安装 Homebrew (get the installation command from the Homebrew website).2. 安装Python 2.7.x ( brew install python ).3. 安装 Ansible ( sudo pip install ansible ).linux&#xff1a;如果系统中安装了python-pip和python-d…

客户细分总结

随着营销方式的多变、客户需求各异、营销增长受阻等多方面影响&#xff0c;企业的营销面临前所未有的挑战和机遇&#xff0c;精准化营销似乎已成为很多公司的选择&#xff0c;本文针对以下客户细分五大模块进行总结&#xff1a; 一&#xff1a;客户细分的必要性&#xff1a; 顾…

Linux操作系统备份之二:通过tar拷贝分区实现Linux操作数据的在线备份

http://www.tektea.com/archives/2163.html。 在《Linux操作系统备份之一&#xff1a;使用LVM快照实现Linux操作系统数据的在线备份》文章中&#xff0c;我们介绍了使用LVM快照实现操作性系统在线备份的方法&#xff0c;LVM快照可以实现在线操作系统数据的备份&#xff0c;在线…

cad快捷命令大全_最全CAD快捷键命令大全(图文版、文字版、键盘版)

在 CAD操作中我们常用一些快捷键来代替鼠标操作从而提高绘图效率&#xff0c;以下是小编为大家整理的常用快捷键大全&#xff0c;涵盖图文版、文字版、键盘版。图文版&#xff1a;文字版&#xff1a;一、常用功能键F1: 获取帮助F2:实现作图窗和文本窗口的切换F3:控制是否实现对…