决策树是一个树形结构,类似下面这样:

上图除了根节点外,有三个叶子节点和一个非叶子节点。

在解决分类问题的决策树中,叶子节点就表示所有的分类,比如这里的分类就有3种:无聊时阅读的邮件、需及时处理的邮件、无需阅读的邮件。

使用决策树来分类某个样本数据,就是利用根节点选取的特征,将当前输入样本划分到根节点下的某个子节点上,然后再利用子节点表示的特征来将当前样本划分到该子节点下的某个子节点上,以此继续,直到到达某个叶子节点,那么这个叶子节点表示的类别就是当前决策树对该样本数据所属的类别的预测。

对于上图,因为各个节点表示的特征和各个叶子节点表示的分类都已经给出了,所以给定一个数据很容易就能预测出对应的类别,但是在实际的分类场景中,我们手上有了标注好的训练样本数据后,要如何来构建一颗能够预测新样本类别的决策树呢?换句话说就是,我们如何知道这颗决策树的各个节点选取什么特征来划分数据才最合适呢?ok,你可能听过一些算法的名字,比如ID3、C4.5、CART等,它们其实就是用来解决这个问题的。

这里我们将介绍ID3算法。

我们选取划分数据集的特征的时候,需要考虑的标准是什么特征可以更好的将数据集分开,比如判断是男人还是女人,那么【是否穿高跟鞋】要比【是否带耳钉】更容易将人群划分开,或者说更能划分出纯度高的数据子集。

然而,其实很多时候我们都无法轻易的看出哪种特征能划分出更纯的数据子集,所以就需要一种方法能够帮助我们量化每种特征划分出的数据子集的信息纯度,以便筛选出更纯的划分方式。而其中一种方法就是使用信息论,信息论是量化处理信息的分支科学,可以用来度量信息,比如度量我们刚才说的数据子集的纯度。

所以阅读下面的内容之前,建议先了解一下信息论中的相关知识,包括信息量、信息熵,可以参考这篇文章:《信息熵为什么要定义成-Σp * log(p)》。

ID3决策树使用信息熵度量数据子集的纯度,信息熵越大,数据越混乱,纯度越低。

从ID3决策树的第一层开始,如果每一层的信息熵都是按照最大化的方式递减的,才能最快划分出纯度较高的数据子集(就像我们人工做分类,一定是从最显著的特征开始划分物品,才是最大程度利用了显著特征的优势,所以以这种方式做分类最快),然后根据叶子节点划分出的数据子集中的最多出现的类别来确认对应叶子节点的所属分类,从而得到一颗完整的分类决策树。

那么如何保证每一层的信息熵以最大化的方式递减呢?这就要说到信息增益了。

在划分数据集之前之后信息发生的变化称为信息增益, 所以计算出每个特征划分数据集获得的信息增益,然后获得信息增益最高的特征就是最好的选择。

信息增益的计算方式如下:

按某个特征划分当前节点数据集将得到的信息增益 =
 当前节点数据集的信息熵    -    按该特征划分出来的各个数据子集的信息熵总和 

ok,对ID3决策树总结一下:

遍历每个特征,找出使得信息增益最大的特征,做为当前节点下数据子集的划分特征,直到所有属性遍历完毕,或者某个数据子集的所有数据都已经具有相同的分类,此时ID3决策树构建完成,可以用来预测新样本的类别了。

然而,ID3还是有缺陷的,比如会偏向选择特征值比较多的特征来划分数据子集,然而如果训练数据中符合这个特征值的数据只出现过很少,甚至是一次,那么将导致构建出的决策树对这个特征的偏见。另外,ID3无法处理含有连续型数值的特征以及处理回归问题,这类场景下,决策树需要另一种算法——CART,下一篇文章会具体介绍。

ok,本篇就这么多内容啦~,感谢阅读O(∩_∩)O。

理解ID3决策树的更多相关文章

  1. Python3实现机器学习经典算法(三)ID3决策树

    一.ID3决策树概述 ID3决策树是另一种非常重要的用来处理分类问题的结构,它形似一个嵌套N层的IF…ELSE结构,但是它的判断标准不再是一个关系表达式,而是对应的模块的信息增益.它通过信息增益的大小 ...

  2. ID3决策树预测的java实现

    刚才写了ID3决策树的建立,这个是通过决策树来进行预测.这里主要用到的就是XML的遍历解析,比较简单. 关于xml的解析,参考了: http://blog.csdn.net/soszou/articl ...

  3. python ID3决策树实现

    环境:ubuntu 16.04 python 3.6 数据来源:UCI wine_data(比较经典的酒数据) 决策树要点: 1. 如何确定分裂点(CART ID3 C4.5算法有着对应的分裂计算方式 ...

  4. 理解CART决策树

    CART算法 原理 CART全称为Classification and Regression Tree. 回归树 相比ID3,CART遍历所有的特征和特征值,然后使用二元切分法划分数据子集,也就是每个 ...

  5. ID3决策树的Java实现

    package DecisionTree; import java.io.*; import java.util.*; public class ID3 { //节点类 public class DT ...

  6. ID3决策树

    决策树 优点:计算复杂度不高,输出结果易于理解,对中间值的缺少不敏感,可以处理不相关特征数据 缺点:过拟合 决策树的构造 熵:混乱程度,信息的期望值 其中p(xi)是选择分类的概率 熵就是计算所有类别 ...

  7. ID3决策树---Java

    1)熵与信息增益: 2)以下是实现代码: //import java.awt.color.ICC_ColorSpace; import java.io.*; import java.util.Arra ...

  8. java编写ID3决策树

    说明:每个样本都会装入Data样本对象,决策树生成算法接收的是一个Array<Data>样本列表,所以构建测试数据时也要符合格式,最后生成的决策树是树的根节点,通过里面提供的showTre ...

  9. 决策树-ID3

    id3:无法直接处理数值型数据,可以通过量化方法将数值型数据处理成标称型数据,但涉及太多特征划分,不建议 决策树:的最大优点在于可以给出数据的内在含义,数据形式非常容易理解: 决策树介绍:决策树分类器 ...

  10. 决策树模型 ID3/C4.5/CART算法比较

    决策树模型在监督学习中非常常见,可用于分类(二分类.多分类)和回归.虽然将多棵弱决策树的Bagging.Random Forest.Boosting等tree ensembel 模型更为常见,但是“完 ...

随机推荐

  1. web移动端屏幕适配方案

    因为手机屏幕的分辨率大小不一 ,如果使用传统的静态布局,把每个元素的宽高样式写死,在不同的屏幕中就有各种各样的显示效果.这显然不是我们想要的结果.我们需要的是根据屏幕分辨率的不同,来适配不同的样式大小 ...

  2. 德承工控机DA-1000 RS-485串口设置

    由于一般情况下调试串口常使用RS-485转USB接口来进行调试,但是USB接口在长时间的调试下,接口容易松动,通讯也比较不稳定容易中断,所以改为DB9接口的RS-485来调试,稳固不松脱.抗干扰能力强 ...

  3. Visual Studio 使用IISprofile进行远程部署

      ​

  4. 04C++顺序结构(3)

    一.设置域宽setw() 教学视频1 输出的内容所占的总宽度成为域宽,有些高级语言中称为场宽.使用setw()前,必须包含头文件iomanip,即#include.头文件iomanip,用来声明一些& ...

  5. 叮咚~ 你的Techo大会云存储专场邀请函到了!

    12月19日至20日,由腾讯主办的2020 Techo Park开发者大会将于北京召开.Techo Park 开发者大会是由腾讯发起的面向全球开发者和技术爱好者的年度盛会,作为一个专注于前沿技术研讨的 ...

  6. 【C#】【平时作业】习题-4-流程控制

    T1 创建一个Windows应用程序,先输入年龄值,再判断是否大于18,最后显示判断结果,运行效果如图所示. 提示: 注意保持逻辑完整: 引用数据需要明确出处. [程序代码] private void ...

  7. gitlab runner install

    gitlab-runner install -d /home/gitlab-runner/ --syslog --user gitlab-runner

  8. spring boot 启动原理解析

    https://www.cnblogs.com/xiaoxi/p/7999885.html 我们开发任何一个Spring Boot项目,都会用到如下的启动类 1 @SpringBootApplicat ...

  9. Python爬虫requests判断请求超时并重新post/get发送请求

    Python爬虫requests判断请求超时并重新post/get发送请求在使用Python爬虫中,你可以使用requests库来发送网络请求.为了判断请求超时并重新发送请求,你可以设置一个超时时间, ...

  10. Qt开源作品43-超级图形字体

    一.前言 对于众多的Qter程序员来说,美化UI一直是个老大难问题,毕竟这种事情理论上应该交给专业的美工妹妹去做,无奈在当前整体国际国内形式之下,绝大部分公司是没有专门的美工人员的,甚至说有个兼职的美 ...