分类算法之决策树介绍

实习了一段时间,接触了一些数据挖掘、机器学习的算法,先记录下来方便以后的复习回顾:

 

一:决策树概念

  决策树可以看做一个树状预测模型,它是由节点和有向边组成的层次结构。树中包含3中节点:根节点内部节点叶子节点。决策树只有一个根节点,是全体训练数据的集合。树中每个内部节点都是一个分裂问题:指定了对实例的某个属性的测试,它将到达该节点的样本按照某个特定的属性进行分割,并且该节点的每一个后继分支对应于该属性的一个可能值。每个叶子节点是带有分类标签的数据集合即为实例所属的分类。

  决策树算法很多,例如:ID3、C4.5、CART等。这些算法均采用自上而下的贪婪算法,每个内部节点选择分类效果最好的属性来分裂节点,可以分成两个或者更多的子节点,继续此过程直到这棵决策树能够将全部的训练数据准确的分类,或所有属性都被用到为止。该算法的简化版本是在使用了全部样本的假设来构建决策树的。具体步骤如下:

  (1):假设T为训练样本集。

  (2):从属性集合Attributes中选择一个最能区别T中样本的属性。

  (3):创建一个树节点,它的值为所选择的属性。创建此节点的子节点,每个子链代表所选属性的一个唯一值(唯一区间),使用子链的值进一步将样本细分为子类。

      对于每一个分支继续重复(2)(3)的过程,直到满足以下两个条件之一:

      (a):所有属性已经被这条路径包括。

      (b):与这个节点关联的所有训练样本都具有相同的目标属性(熵为0)。

  下面借用《数据挖掘概念与技术》书中的一个列子来方便理解:

  

                              图1-1

  图1-1是一个典型的决策树,它表示概念buys_computer,即它目的是预测顾客是否可能购买计算机。内部节点用矩形表示,叶子节点用椭圆表示。

  为了对未知的样本分类,样本的属性值在决策树上测试。我们用一些训练样本构造了图1-1中的决策树,每个内部节点表示一个属性上的测试,每个叶子节点代表一个分类(buys_computer = yes, buys_computer = no ).

 

二:决策树的适用情况

  通常决策树学习最适合具有以下特征的问题:

  (1):实例是由“属性-值”对表示的。

  (2):目标函数具有离散的输出值。例如上面的yes和no

  (3):实例的所有属性都是离散值。如果是连续值或者离散值种类太多,可以把它分为不同的区间,例如上面的age分为了3个区间而不是每个独立的值为一个判断分支。

 

三:决策属性的选择

  建树算法中属性的选择非常重要。属性选择方法很多种,例如信息增益(information gain)、信息增益比(information gain ratio)、Gini 指标(Gini Index)等方法。

  ID3算法依据的是信息增益来选择属性,每次计算所有剩余候选属性的信息增益,然后根据信息增益最大的一个作为此次的分类属性。信息增益是用熵作为尺度,是衡量属性对训练数据分类能力的标准。

  假设表3-1为图1-1中的训练样本集:共有14条数据,属性有:age、income、student、credit_rating,目标属性是:buys_computer

  

                            表3-1  

下面根据表3-1和图1-1的例子来讲解某具体属性的信息增益的计算过程:

  对于某个具体的属性A,它的信息增益计算表达式是:

 

  (1)是对给定样本分类所需的期望信息,计算过程如下:

  设Ss个训练样本的集合,S也就是对于表3-1中的数据,s = 14。假定类标号属性有m个不同值,定义m个不同类Ci(i=1,2,...m).设si是类Ci中的样本数,对应表3-1和图1-1实例中m=2,其中 C1 = yes C2 = no s1 = 9 s2 = 5 。

  则:

  其中pi是任意样本属于Ci的概率,pi = si/s .公式中的对数函数以2为底,因为信息用二进位编码。

    在该实例中     

 

 

  (2)是根据A划分子集的熵或期望值,计算过程如下:

    设属性A有v个不同的值{a1,...av},对应实例中的数据,例如属性age,分为3个不同的值:

    a1为 <=30

    a2为 30..40

    a3为 >40 ;

      

    属性A把训练样本集合S划分为v个子集{S1,...Sv};其中Sj包含训练样本集S中在属性A上有值aj的样本。Sij是子集Sj中属于类Ci的样本数。

    

    其中充当第j个子集的权值,等于子集(即A值为aj)的样本总数除以S中的样本总数 即 Sj/S。

    对于给定的子集Sj有

    其中,Pij=Sij/Sj  ,是Sj中的样本属于Ci的概率。

    

    该实例中:

        

        因此属性age的信息增益为:Gain(age)= I(s1,s2) - E(age) = 0.246

    类似的我们可以计算出Gain(income)=0.029 Gain(student)=0.151 Gain(credit_rating)=0.048.由于age在属性中具有最高信息增益,因此它被选作为第一个测试属性。

    图1-1是最终生成的决策树。

 

四:决策树的剪枝

  为了防止决策树和训练样本集的过度拟合,需要对决策树进行剪枝。剪枝通常有事先剪枝法事后剪枝法。

  事先剪枝法: 是建树过程中判断当前节点是否需要继续划分的剪枝方法。通常是通过重要性检测判断是否停止分裂节点。

   事后剪枝法: 是让树充分生长之后,再判断是否将某些分支变成节点。常用方法是根据错误分裂率(或者决策树编码长度)进行决策树的事后修剪。

 

参考资料:机器学习  Mitchell T.M

     数据挖掘:概念与技术 第三版  Jiawei Han  

 

 

 

 

 

 

 

 

 

 

   

转载于:https://www.cnblogs.com/justcxtoworld/p/3346271.html

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

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

相关文章

C#调用Couchbase中的Memcached缓存

安装服务端 服务端下载地址&#xff1a;http://www.couchbase.com/download 选择适合自己的进行下载安装就可以了,我这里选择的是Win7 64。 服务端安装完后&#xff0c;如果成功了&#xff0c;那么在浏览器中可以看到。如果没有那么需要手动进行访问http://localhost:8091/ind…

Windows10安装Anaconda和Pytorch(CPU版,无GPU加速)

1.Anaconda安装 Anaconda的安装网上的教程非常非常多&#xff0c;很简单&#xff0c;下面这篇博客写的很详细&#xff0c;看我写的也可以。 地址&#xff1a;https://blog.csdn.net/u014546828/article/details/80334448 注意&#xff1a;不建议从 官网下载&#xff0c;官网…

云计算的发展及应用--演讲用PPT

最近在几个客户处进行了关于云计算的普及培训。主要是让用户了解什么是云计算&#xff0c;云计算的框架以及对我们的影响。我将自己手中的几本相关资料&#xff0c;结合自己的经验和理解&#xff0c;整合成了一篇演示用的PPT。 虽然演示用的PPT简洁些&#xff0c;但用来理解一下…

nodejs Error: request entity too large解决方案

错误如图&#xff1a; 解决方案&#xff1a; app.js添加 var bodyParser require(body-parser);app.use(bodyParser.json({limit: 50mb}));app.use(bodyParser.urlencoded({limit: 50mb, extended: true}));

閱讀10大優點:為什麼你應該每天閱讀

閱讀10大優點&#xff1a;為什麼你應該每天閱讀當是你最後一次讀一本書&#xff0c;或主要雜誌上的文章&#xff1f;你的日常的閱讀習慣圍繞推特&#xff0c;Facebook的更新或速溶燕麥片包上的指示&#xff1f;如果你是其中之一&#xff0c;無數的人誰不經常閱讀的習慣&#xf…

Node出错导致运行崩溃的解决方案

许多人都有这样一种映像&#xff0c;NodeJS比较快&#xff1b; 但是因为其是单线程&#xff0c;所以它不稳定&#xff0c;有点不安全&#xff0c;不适合处理复杂业务&#xff1b; 它比较适合对并发要求比较高&#xff0c;而且简单的业务场景。 在Express的作者的TJ Holowaychuk…

nodejs基于art-template模板引擎生成

基础核心代码 var template require(art-template);var tName new Date().getTime();var htmlT <!DOCTYPE html><html lang"en"><head><meta charset"UTF-8"><title></title></head><body><h1>{…

Pyalgotrade量化交易回测框架

现在就开始干活了。先要测试一下pyalgotrade回测数据对不对。我找了个参照标准:在聚宽上开通了个账号&#xff0c;按入门教程写了个策略:2016-2018年每个交易日买入100股平安银行(000001)&#xff0c;回测结果如下: 现在用pyalgotrade来实现一下这个策略。先用tushare下载平安银…

1.4三态缓存(tristate buffer)与 多路复用器(Multiplexers)

首先解释名词。由于想了好多例子&#xff0c;结果发现没有太好的。于是换一种办法&#xff0c;直接上图和真值表。。这个东西就是多路复用器&#xff08;MUX&#xff09;从图中和真值表可以总结出&#xff1a;当s为0选择D0通过&#xff0c;也就是YD0&#xff0c;而不在乎D1上的…

art-template用户注册方法

应用场景nodejs Express框架&#xff0c;使用art-template模板引擎。 后台注册方法代码&#xff1a; var template require(art-template);template.helper(myRegFunc, function (str1, str2) {return "我是后台方法: " str1 str2;}); 前台使用&#xff1a; <…

如何导出已安装的安卓app为apk包

下载 “夜神模拟器” &#xff0c; 鼠标长安应用&#xff0c;拖拽到 “apk导出”处 即可

easyui-datagrid行数据field原样输出html标签

easyui-datagrid 绑定的行 field 原样输出html标签。处理效果如图&#xff1a; Html页面代码如下&#xff1a; ...<tr><th field"id" width"5" align"center">编号</th><th field"name" width"20" ali…

Python爬虫淘宝商品详情页价格、类似数据

在讲爬取淘宝详情页数据之前&#xff0c;先来介绍一款 Chrome 插件&#xff1a;Toggle JavaScript (它可以选择让网页是否显示 js 动态加载的内容)&#xff0c;如下图所示&#xff1a; 当这个插件处于关闭状态时&#xff0c;待爬取的页面显示的数据如下: 当这个插件处于打开状态…

微信公众号开发(—)接口与服务器关联

微信公众号开发(—) 以下都是借鉴的微信公众平台的文档加老师指点和自行的理解。 1.一台有微信的手机.(别问我老人机可以不 有微信就可以&#xff01;&#xff01;&#xff01;) 2.需要有一个微信公众平台的测试号&#xff08;订阅号,服务号也可以按自己需求来&#xff09;. 3.…

nodejs支持ssi实现include shtml页面

express 对于include的代码默认不处理&#xff0c;直接输出&#xff0c;没办法执行include的内容&#xff0c;但可以通过Nginx实现。 1、 配置nginx设置开启ssi模式。 server {…ssi on;ssi_silent_errors on;ssi_types text/shtml;… 2、添加include页面 <!--# include vi…

Windows PC软件反编译逆向破解

文章目录 一.OllyDbg工具简介二.OllyDbg分析Crakeme示例1三.OllyDbg分析Crakeme示例2四.总结作者的github资源&#xff1a; 系统安全&#xff1a;https://github.com/eastmountyxz/SystemSecurity-ReverseAnalysis网络安全&#xff1a;https://github.com/eastmountyxz/Networ…

微信公众号天气与聊天机器人小功能

微信公众号小功能 以下都是借鉴的微信公众平台的文档加老师指点和自行的理解。 &#xff08;1&#xff09;微信公众号发送地区回复现在和未来五天天气情况 &#xff08;2&#xff09;发送语音和智能机器人聊天 一、调用天气预报接口 实现微信公众号发送地区回复现在和未来五天…

安卓app逆向破解脱壳教程

From&#xff1a;Hook 神器家族的 Frida 工具使用详解&#xff1a;https://blog.csdn.net/FlyPigYe/article/details/90258758 详解 Hook 框架 frida ( 信抢红包 )&#xff1a;https://www.freebuf.com/company-information/180480.html APP逆向神器之Frida【Android初级篇】…

关注微信公众号使其自动发送欢迎你关注消息

关注微信公众号使其自动发送欢迎你关注消息 一般我们关注微信公众号时。他都会自动推送一条消息。欢迎您关注了某公众号。而今天我们所做的就是这个功能。 关注公众号时我们需要获取到用户的一些个人基本信息。 而获取基本信息就要看他的运行原理。到底是怎么运行。 当我们申请…

微信公众号——永久素材的上传

微信公众号永久素材的上传 思路&#xff1a;1.需要上传到本地&#xff08;因为后面需要用的本地的绝对路径 2.上传到微信服务器 3.添加信息到本地数据库 一、上传图片到本地 文件上传的方法 以下是我的代码 首先更改文件上传的配置 而后写我们的文件上传方法 if (request…