关于决策树的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. 标准SQL语句大全【持续更新】(navicat12版亲测有效)

    提示:用ctrl+F快速查找相关指令哦 -- 创建数据库 create database test_sql; -- 修改数据库名称(只有 sysadmin 和 dbcreator 固定服务器角色的成员 ...

  2. 详解Linux 安装 JDK、Tomcat 和 MySQL(图文并茂)

    https://www.jb51.net/article/120984.htm

  3. 数据库SQL语言从入门到精通--Part 6--单表查询(快来PICK)

    数据库从入门到精通合集(超详细,学习数据库必看) 查询操作是SQL语言中很重要的操作,我们今天就来详细的学习一下. 一.数据查询的语句格式 SELECT [ALL|DISTINCT] <目标列表 ...

  4. swupdate 之 readback handler

    背景 使用 swupdate 作为 OTA 方案 ,有项目要求在写入数据到分区之后需要再次读出校验. 初步实现:readout-verify attribute 初步分析有两种方式 方案一 在每一笔数 ...

  5. Z - New Year Tree CodeForces - 620E 线段树 区间种类 bitset

    Z - New Year Tree CodeForces - 620E 这个题目还没有写,先想想思路,我觉得这个题目应该可以用bitset, 首先这个肯定是用dfs序把这个树转化成线段树,也就是二叉树 ...

  6. Bootstrap初识

    目录 概述 快速入门 响应式布局 CSS样式和JS插件 全局CSS样式 组件 插件 案例:黑马旅游网 概述 概念:一个前端开发的框架,Bootstrap是美国Twitter公司的设计师Mark Ott ...

  7. 如何在Windows下安装MySQL5和MySQL8的多实例

    MySQL5和MySQL8多实例安装方法: 1.首先下载MySQL5和MySQL8 官方下载链接:https://dev.mysql.com/downloads/mysql/  下载旧版本: 下载好后 ...

  8. python学习之列表的定义以及增删改查

    列表定义: >>> name['lily','lucy','tom'] >>> nums = [11,22,33,'100','lily'] #python中的列表 ...

  9. 07_CSS入门和高级技巧(5)

    超级链接美化 1.伪类 同一个超级链接,根据用户的点击情况,有自己样式: 超级链接根据用户点选情况,有4种状态: a:link 没有访问的超级链接 a:visited 已经访问的超级链接 a:hove ...

  10. Coursera课程笔记----C程序设计进阶----Week 5

    指针(二) (Week 5) 字符串与指针 指向数组的指针 int a[10]; int *p; p = a; 指向字符串的指针 指向字符串的指针变量 char a[10]; char *p; p = ...