关于决策树的purity的计算方法可以参考:

决策树purity/基尼系数/信息增益 Decision Trees

如果有不懂得可以私信我,我给你讲。

ID3

用下面的例子来理解这个算法:


下图为我们的训练集。总共有14个训练样本,每个样本中有4个关于天气的属性,这些属性都是标称值。输出结果只有2个类别,玩(yes)或者不玩(no):

首先先计算整个数据集的熵Entropy:

  • 因为整个数据集只有两个类别,他们的分布概率分别是\(\frac{9}{14}\)和\(\frac{5}{14}\),所以根据Entropy是:\(Entropy(S)=-(\frac{9}{14}*log_2(\frac{9}{14})+\frac{5}{14}*log_2(\frac{5}{14}))=0.94\)

然后我们要考虑根据哪一个属性进行分裂,假设根据Outlook属性进行分裂,我们可以发现Outlook中有三个值,分别是:Sun,Rain,Overcast,分别计算他们的熵:

\(Entropy(S_{sun})=-(\frac{2}{5}*log_2(\frac{2}{5})+\frac{3}{5}*log_2(\frac{3}{5}))=0.971\)

\(Entropy(S_{overcast})=-(\frac{4}{4}*log_2(\frac{4}{4})+\frac{0}{4}*log_2(\frac{0}{4}))=0\)

\(Entropy(S_{rain})=-(\frac{3}{5}*log_2(\frac{3}{5})+\frac{2}{5}*log_2(\frac{2}{5}))=0.971\)

计算完三个Entropy后,来计算信息增益Information Gain:

\(IG(S,Outlook)=Entropy(S)-(\frac{5}{14}*Entropy(S_{sun})+\frac{5}{14}*Entropy(S_{overcast})+\frac{5}{14}*Entropy(S_{rain}))=0.246\)

用同样的道理,我们可以求出来剩下的几个特征的信息增益:

\(IG(S,Wind)=0.048\)

\(IG(S,Temperature)=0.0289\)

\(IG(S,Humidity)=0.1515\)

因为outlook这个作为划分的话,可以得到最大的信息增益,所以我们就用这个属性作为决策树的根节点,把数据集分成3个子集,然后再在每一个子集中重复上面的步骤,就会得到下面这样的决策树:

ID3的缺点

  1. 如果样本中存在一个特征,这个特征中所有值都不相同(比方说是连续值的特征),这样可以想想的出假设用这个特征作为划分,那么信息增益一定是非常大的,因为所有的划分中都只会包含一个样本;对于具有很多值的属性它是非常敏感的,例如,如果我们数据集中的某个属性值对不同的样本基本上是不相同的,甚至更极端点,对于每个样本都是唯一的,如果我们用这个属性来划分数据集,它会得到很大的信息增益,但是,这样的结果并不是我们想要的。
  2. ID3不能处理连续值属性;
  3. ID3算法不能处理具有缺失值的样本;
  4. 非常容易过拟合。

C4.5

对于有很多值得特征,ID3是非常敏感的,而C4.5用增益率Gain ratio解决了这个问题,先定义内在价值Intrinsic Value:

\[IV(S,a)=-\sum_{v\in values(a)}{\frac{|x\in S|value(x,a)=v|}{|S|}*log_2(\frac{|x\in S|value(x,a)=v|}{|S|})}
\]

这个公式怎么理解呢?

  • S就是数据集样本,\(|S|\)就是样本数量;
  • a是某一个特征,比方说Outlook或者是Wind,然后\(v\in values(a)\)就是v就是a这个特征中的某一个值;
  • \(|x\in S|value(x,a)=v|\)这个就是某一个特征a是v的样本数量;

    然后决策树之前使用信息增益Information Gain来作为分裂特征的选择,现在使用增益率IG rate:

\[IGR(S,a)=\frac{IG(S,a)}{IV(S,a)}
\]

可想而知,如果存在一个特征,比方说一个学生的学号(每一个学生的学号都不相同),如果用ID3选择学号进行分裂,那么一定可以达到非常大的信息增益,但是其实这是无意义过拟合的行为。使用C4.5的话,我们要计算IGR,这个学号的特征的内在价值IV是非常大的,所以IGR并不会很大,所以模型就不会选择学号进行分裂。

此外。C4.5可以处理连续值得划分,下面,我举例说明一下它的解决方式。假设训练集中每个样本的某个属性为:{65, 70, 70, 70, 75, 78, 80, 80, 80, 85, 90, 90, 95, 96}。现在我们要计算这个属性的信息增益。我们首先要移除重复的值并对剩下的值进行排序:{65, 70, 75, 78, 80, 85, 90, 95, 96}。接着,我们分别求用每个数字拆分的信息增益(比如用65做拆分:用≤65和>65≤65和>65做拆分,其它数字同理),然后找出使信息增益获得最大的拆分值。因此,C4.5算法很好地解决了不能处理具有连续值属性的问题。

C4.5如何处理缺失值

  • 如果是训练数据中出现了缺失数据,那么就会考虑这个缺失数据所有可能的值。比方说一开始的数据库中,D1的Outlook变成了缺失值,那么D1的Outlook就会有\(\frac{4}{13}\)的概率是Sun,有\(\frac{4}{13}\)的概率是Overcast,有\(\frac{5}{13}\)的概率是Rain,然后其实也可以理解为这个样本就会变成3个样本,这三个样本有着不同的权重。
  • 如果是在预测数据中出现了缺失数据,那么同样的,认为这个数据的这个缺失数据可能是任何可能的值,这个概率就是看决策树中Outlook划分的子集的样本数量。这个地方可能有点难懂,不理解的可以看这个博文:

    机器学习笔记(7)——C4.5决策树中的缺失值处理

C4.5对决策树的剪枝处理

有两种剪枝处理方法,一个是预剪枝,一个是后剪枝,两者都是比较验证集精度,区别在于:

  • 预剪枝:从上到下进行剪枝,如果精度没有提升,那么就剪掉,这个处理在训练模型的过程中进行;
  • 后剪枝:从下到上进行剪枝,如果剪掉精度可以提升,就剪掉,这个处理过程是在模型训练结束之后再进行的。

    通常来说后者会比前者保留更多的分支,欠拟合的风险小,但是训练时间的开销会大一些。

    更具体地内容推荐这篇博文,讲的清晰易懂(没有必要看懂这个博文中的Python实现过程,毕竟现在sklearn库中都封装好了):

    机器学习笔记(6)——C4.5决策树中的剪枝处理和Python实现

CART

分类回归树Classification and Regression Trees与C4.5的算法是非常相似的,并且CART支持预测回归任务。并且CART构建的是二叉树。

【面试考】【入门】决策树算法ID3,C4.5和CART的更多相关文章

  1. 决策树算法——ID3

    决策树算法是一种有监督的分类学习算法.利用经验数据建立最优分类树,再用分类树预测未知数据. 例子:利用学生上课与作业状态预测考试成绩. 上述例子包含两个可以观测的属性:上课是否认真,作业是否认真,并以 ...

  2. 决策树算法(C4.5)

    ID3具有一定的局限性,即信息增益倾向于选择取值比较多的特征(特征越多,条件熵(特征划分后的类别变量的熵)越小,信息增量就越大),C4.5通过选择最大的信息增益率 gain ratio 来选择节点可以 ...

  3. 数据挖掘 决策树算法 ID3 通俗演绎

    决策树是对数据进行分类,以此达到预測的目的.该决策树方法先依据训练集数据形成决策树,假设该树不能对全部对象给出正确的分类,那么选择一些例外添�到训练集数据中,反复该过程一直到形成正确的决策集.决策树代 ...

  4. ID3,C4.5和CART三种决策树的区别

    ID3决策树优先选择信息增益大的属性来对样本进行划分,但是这样的分裂节点方法有一个很大的缺点,当一个属性可取值数目较多时,可能在这个属性对应值下的样本只有一个或者很少个,此时它的信息增益将很高,ID3 ...

  5. [转]机器学习——C4.5 决策树算法学习

    1. 算法背景介绍 分类树(决策树)是一种十分常用的分类方法.它是一种监管学习,所谓监管学习说白了很简单,就是给定一堆样本,每个样本都有一组属性和一个类别,这些类别是事先确定的,那么通过学习得到一个分 ...

  6. 机器学习算法总结(二)——决策树(ID3, C4.5, CART)

    决策树是既可以作为分类算法,又可以作为回归算法,而且在经常被用作为集成算法中的基学习器.决策树是一种很古老的算法,也是很好理解的一种算法,构建决策树的过程本质上是一个递归的过程,采用if-then的规 ...

  7. 决策树(ID3,C4.5,CART)原理以及实现

    决策树 决策树是一种基本的分类和回归方法.决策树顾名思义,模型可以表示为树型结构,可以认为是if-then的集合,也可以认为是定义在特征空间与类空间上的条件概率分布. [图片上传失败...(image ...

  8. 2. 决策树(Decision Tree)-ID3、C4.5、CART比较

    1. 决策树(Decision Tree)-决策树原理 2. 决策树(Decision Tree)-ID3.C4.5.CART比较 1. 前言 上文决策树(Decision Tree)1-决策树原理介 ...

  9. 决策树算法原理--good blog

    转载于:http://www.cnblogs.com/pinard/p/6050306.html (楼主总结的很好,就拿来主义了,不顾以后还是多像楼主学习) 决策树算法在机器学习中算是很经典的一个算法 ...

随机推荐

  1. OOM的起点到终点

    前言 1.问题及现象 线上日志反馈内存溢出问题.根据用户反馈,客户操作一段时间之后,APP 内存溢出崩溃. 2.分析过程 (1) 分析线上日志,发现主要分两种: 第一种如下,可能是某个死循环导致内存不 ...

  2. DFS--POJ 1190 生日蛋糕

    Description 7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为Nπ的M层生日蛋糕,每层都是一个圆柱体. 设从下往上数第i(1 <= i <= M)层蛋糕是半径为Ri ...

  3. USACO Training Section 1.1 贪婪的送礼者Greedy Gift Givers

    P1201 [USACO1.1]贪婪的送礼者Greedy Gift Givers 题目描述 对于一群(NP个)要互送礼物的朋友,GY要确定每个人送出的钱比收到的多多少.在这一个问题中,每个人都准备了一 ...

  4. POJ 2136 Vertical Histogram(当时写的比较恶心,优化一下)

    Vertical Histogram Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 21223 Accepted: 10048 ...

  5. 在Jetson TX2上捕获、显示摄像头视频

    参考文章:How to Capture and Display Camera Video with Python on Jetson TX2 与参考文章大部分都是相似的,如果不习惯看英文,可以看看我下 ...

  6. Linux 上搭建 Snort+BASE 入侵检测系统

    配置实验环境 由于本人电脑的存储空间不足,无法再承担安装一个虚拟机的开销,因此在阿里云上申请了一个云服务器进行本次实验.服务器配置如下: 1 核 - 2GB 内存 - 40GB 系统盘 操作系统:Ub ...

  7. 编程坑太多,Map 集合怎么也有这么多坑?一不小心又踩了好几个!

    点赞再看,养成习惯,微信搜索『程序通事』,关注就完事了! 点击查看更多历史文章 上一篇 List 踩坑文章中,我们提到几个比较容易踩坑的点.作为 List 集合好兄弟 Map,我们也是天天都在使用,一 ...

  8. P2764 最小路径覆盖问题 网络流重温

    P2764 最小路径覆盖问题 这个题目之前第一次做的时候感觉很难,现在好多了,主要是二分图定理不太记得了,二分图定理 知道这个之后就很好写了,首先我们对每一个点进行拆点,拆完点之后就是跑最大流,求出最 ...

  9. Spring源码阅读 之 配置的读取,解析

    在上文中我们已经知道了Spring如何从我们给定的位置加载到配置文件,并将文件包装成一个Resource对象.这篇文章我们将要探讨的就是,如何从这个Resouce对象中加载到我们的容器?加载到容器后又 ...

  10. SQL语言概况(4.1)

    SQL语言概况(4.1) 目录 SQL语言概况(4.1) 4.1 SQL语言概况 4.1.1 历史及标准简介 4.1.2 SQL语言定义及特点 4.1.3 使用说明 参考资料: 数据库原理及设计(第3 ...