关于决策树的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. 【Linux常见命令】ifconfig命令:配置与查看网络信息

    ifconfig(interfaces config).通常需要以root身份登录或使用sudo来使用ifconfig工具 ifconfig 命令用来查看和配置网络设备.当网络环境发生改变时可通过此命 ...

  2. Android Room SQLite持久层框架

    原文链接 前言 Android中提供了SQLite数据库进行数据的持久化 ,并提供了对应API访问数据库,而Room框架提供了SQLite数据访问抽象层,为高效的数据库访问层带来便捷 APP可以缓存用 ...

  3. 一句话教你分清楚UML组合聚合和联系!

    组合:组合后的实体消失,则所有构成实体的部件都无意义,可以理解为不能独立存在 定义: 与聚合相比,组合描述的是这样的关联关系,部分离开整体后就没有实际意义了.所以我们说组合是一种很强的关联关系. 例子 ...

  4. 图论--最长路--洛谷P1807 最长路_NOI导刊2010提高(07)

    题目描述 设G为有n个顶点的有向无环图,G中各顶点的编号为1到n,且当为G中的一条边时有i < j.设w(i,j)为边的长度,请设计算法,计算图G中<1,n>间的最长路径. 输入格式 ...

  5. 题目分享V

    题意:现在两个人做游戏,每个人刚开始都是数字1,谁赢了就能乘以k^2,输的乘以k(k可以是任意整数,每次不一定相同)现在给你最终这两个人的得分,让你判断是否有这个可能,有可能的话Yes,否则No. 分 ...

  6. MySQL 入门(2):索引

    摘要 在这篇文章中,我会先介绍一下什么是索引,索引有什么作用. 之后会介绍一下索引的数据结构是什么样的,有什么优点,又会带来什么样的问题. 在分析完数据结构后,我们可以根据这个数据结构,研究索引的用法 ...

  7. go 模板详说

    模板是我们常用的手段用于动态生成页面,或者用于代码生成器的编写等.比如把数据库的表映射成go语言的struct,这些体力活,写个代码生成器是最合适不过的了. 示例例把表转成 struct : 当然这篇 ...

  8. python 读取矢量文件

    #导入包 from osgeo import ogr #打开文件(False - read only, True - read/write) filename = "文件名.shp" ...

  9. Spark离线日志分析,连接Spark出现报错

    首先,我的代码是这样的 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} object ...

  10. 关于fromdata的上传文件问题

    <div <label>上传pdf</label> <input id="fileId" type="file" accep ...