作者简介

浩彬老撕,R语言中文社区特邀作者。

个人公众号:探数寻理

决策树算法概述


决策树算法,顾名思义,就一颗用于分类的树状决策结构。事实上,决策树算法在业界中的应用是十分的广泛,这不仅仅是因为该算法其具有良好的分类能力更重要的是它具有较强的可解释性,并且直观易懂等特点。实际上,基于决策树的逻辑结构是与人类在现实社会环境中的决策逻辑十分的类似,例如浩彬老撕就在某天在思考一个人生三大问:

该思考过程可以以如下的文字简单表达:

(1)  今天是否周末?如果不是周末则不去,如果是周末则继续思考下一个问题;

(2)  本周的工作是否完成?如果还没有完成则不去,如果已经完成则继续思考下一个问题;

(3)  今天是晴天吗?如果不是晴天则不去,如果是晴天则继续思考下一个问题;

(4)  今天能不能在电影院找到好位置?如果不能找到好位置则不去,如果能找到好位置则决定去电影院看电影;

该思考过程假如以一颗决策树的形式来表达的话就是如下形式:

在这个看电影的决策逻辑中,实际上是浩彬老撕通过自己的历史多次看电影的的经历总结而成。决策树算法这种形式实际上是一种根据训练数据集,通过一系列测试问题(形如“今天是周末吗?”)从而输出分类目标进行判断的过程。

决策树这样的表达形式非常的直观且容易理解,一般地,一颗决策树是由一个根节点,若干个内部节点以及若干个叶子节点组成,根节点和内部节点代表相应的测试条件,而叶子节点则代表最终输出结果:

(1)  根节点:根节点位于最上层,代表第一个测试条件,一颗决策树有且只有一个根节点,根节点没有入边,拥有零条或以上的出边;

(2)  内部节点:位于根节点之下,代表一种测试条件。中间节点有一条入边,拥有两条或以上的出边;

(3)  叶子节点:决策树的终端节点,代表决策树的判定结果。叶子节点只有一条入边而没有出边;

可以看到,这种树状的表达形式实际上与前面提到的If-Then规则可以进行相互转换的,其中从根节点出发,到任意一个叶子节点,将形成一条规则:If“今天是周末吗”=“False”,Then“不去”。值得注意的是,通过决策树所形成的规则应当是互斥且完备的,即对于任意一个样本数据,有且只有一条规则与其一一对应输出分类结果。

决策树的生成


在实际应用过程中,我们不仅仅只针对一个样本,我们是希望从大量的数据中找到规律,因此接下来的问题是我们如何通过对大量样本的数据,借助于决策树算法把内在的蕴含逻辑归纳出来。回想一下,决策树是通过测试条件进行属性划分的方法,因此决策树的生成首先需要回答的两个问题:

(1)  如何选择测试条件进行分裂?

(2)  什么情况下可以选择结束分裂?

一般而言,我们分类的目标就是希望“一是一,二是二”,因此我们希望原始数据集在通过一个测试条件的划分为两个或以上的数据集时,划分后的数据集能够显得更加的“纯”,即划分后的任一子集都尽可能地属于同一个类别。

关于子集的“纯度”,我们可以通过如下例子理解:

在1936年,我们的“渔夫”(R.A.Fisher)提供了一个可能是机器学习领域中最著名的分类数据集——鸢尾花数据集。

分别从山鸢尾花以及多色鸢尾中各取13个样本,分别利用X(花瓣长度)以及Y(萼片宽度)进行划分,可以看到利用花瓣长度这个特征可以完全准确地把两种类型的鸢尾花分辨出来,而利用萼片宽度这个特征进行划分后,还是存在混合的情况。我们可以认为利用特征X划分后的子集,“纯度”更高.

显然,在树模型生成的过程中,对于每一次的划分,我们应该选择可以到令子集纯度更高的划分条件进行。而随着数据集的不断划分,我们的子集纯度越来越高,直至该节点下的样本都属于同一类别。那么什么时候应该终止分裂?一个直觉性的答案显然可以是“该节点下的所有样本都属于同一类别(不需要再进行划分)”或“该节点下的所有样本属性都一样(继续划分下去也不能改善结果)”。下图展示了决策树的生长过程:

从上面的决策树生长流程图我们可以发现,决策树的生长重点在于其中的“纯度”计算公式,也就是怎么选择最优特征过程,接下啦,我们将简单介绍各个不同决策树算法的划分方法。

(1)ID3系列算法:使用信息熵作为集合纯度的评估

假设我们的样本集合D中含m类样本,其中每一类样本的比例分别为

则集合D的信息熵我们定义为:

计算时,定义有0log0=0.

ENT(D)越大,集合D的不纯程度越高越小;ENT(D)越小 集合D的纯度越高。因此也有一些文献中提到信息熵用以衡量样本集合的“不纯”纯度。

关于信息熵的通俗介绍,可查看文章:如何通俗地理解决策树中的信息熵

(2)CART算法:使用GINI系数作为集合纯度的评估

对于集合 D,其纯度的对应计算公式为:

其中m为目标变量的类别个数。与信息熵类似,基尼指数越低,代表集集合的纯度越高。当该节点只含有一个类别时,基尼指数取得最小值0.

由于每个算法的内容比较多,本期只简单介绍一下决策树概念性问题,在下一期,将为大家详细介绍决策树中最为经典的ID3系列算法。

 往期精彩内容整理合集 

2017年R语言发展报告(国内)

R语言中文社区历史文章整理(作者篇)

R语言中文社区历史文章整理(类型篇)

公众号后台回复关键字即可学习

回复 R                  R语言快速入门及数据挖掘 
回复 Kaggle案例  Kaggle十大案例精讲(连载中)
回复 文本挖掘      手把手教你做文本挖掘
回复 可视化          R语言可视化在商务场景中的应用 
回复 大数据         大数据系列免费视频教程 
回复 量化投资      张丹教你如何用R语言量化投资 
回复 用户画像      京东大数据,揭秘用户画像
回复 数据挖掘     常用数据挖掘算法原理解释与应用
回复 机器学习     人工智能系列之机器学习与实践
回复 爬虫            R语言爬虫实战案例分享

算法|决策树算法究竟说的是什么?相关推荐

  1. 机器学习算法——决策树算法详细介绍,并使用sklearn实现案例预测,可视化决策树

    目录 一.决策树算法简介 二.决策树分类原理 1.熵 1.1 概念 1.2 案例 2.决策树的划分依据一:信息增益 2.1 概念 2.2 案例: 3.决策树的划分依据二:信息增益率 3.1 概念 3. ...

  2. 机器学习算法:决策树算法

    1.基本定义   决策树(Decision Tree)是一种基本的分类和回归算法.该算法模型呈树形结构,主要由结点和有向边组成.结点又分为两种类型:内部结点和叶子结点.内部结点表示在一个属性或特征上的 ...

  3. Python机器学习--算法--决策树算法

    决策树算法 决策树算法类型: 决策树是一系列算法,而不是一个算法. 决策树包含了 ID3分类算法,C4.5分类算法,Cart分类树算法,Cart回归树算法. 决策树既可以做分类算法,也可以做回归算法. ...

  4. 分类算法——决策树算法及其R实现

    决策树定义 以鸢尾花为例子来说明: 观察上图,判决鸢尾花的思考过程可以这么来描述:花瓣的长度小于2.4cm的是setosa(图中绿色的分类),长度大于2.4cm的呢?可以通过宽度来判别,宽度小于1.8 ...

  5. 决策树算法——选择困难症的“良药”

    "To be , or not to be:that is the question"(生存还是毁灭:这是一个问题),这是著名的莎士比亚悲剧<哈姆雷特>中的主人公一句非 ...

  6. 【机器学习入门】(4) 决策树算法理论:算法原理、信息熵、信息增益、预剪枝、后剪枝、算法选择

    各位同学好,今天我向大家介绍一下python机器学习中的决策树算法的基本原理.内容主要有: (1) 概念理解:(2) 信息熵:(3) 信息增益:(4) 算法选择:(5) 预剪枝和后剪枝. python ...

  7. 最常用的决策树算法!Random Forest、Adaboost、GBDT 算法

    点击上方"Datawhale",选择"星标"公众号 第一时间获取价值内容 本文主要介绍基于集成学习的决策树,其主要通过不同学习框架生产基学习器,并综合所有基学习 ...

  8. 分析决策树算法和逻辑回归算法的不同之处

    首先我们导入一组airplan.xlsx数据. 数据表中的age表示年龄.FLIGHT_COUNT表示飞行次数.BASE_POINTS_SUM表示飞行里程.runoff_flag表示流失与否,定义1为 ...

  9. 最常用的决策树算法(二)Random Forest、Adaboost、GBDT 算法

    决策树是一个非常常见并且优秀的机器学习算法,它易于理解.可解释性强,其可作为分类算法,也可用于回归模型.本文将分三篇介绍决策树,第一篇介绍基本树(包括 ID3.C4.5.CART),第二篇介绍 Ran ...

  10. ML之监督学习算法之分类算法一 ——— 决策树算法

    一.概述 决策树(decision tree)的一个重要任务是为了数据中所蕴含的知识信息,因此决策树可以使用不熟悉的数据集合,并从中提取出一系列规则,在这些机器根据数据创建规则时,就是机器学习的过程. ...

最新文章

  1. 一文全览机器学习建模流程(Python代码)
  2. MySQL 表分区详解MyiSam引擎和InnoDb 区别(实测)
  3. gcc动态链接库基本知识
  4. java 删除桌面快捷方式_能否在桌面创建快捷方式运行java程序?
  5. 加泰罗尼亚理工大学 计算机 排名,西班牙加泰罗尼亚理工大学排名
  6. 键值 keyCode事件属性
  7. UVA12897 - Decoding Baby Boos
  8. python怎么打印路径,python 打印路径的几种结果
  9. 麦子学院3天带你学会Apple Watch开发
  10. vue 利用科大讯飞实现实时语音转写
  11. 华为android是什么文件夹,华为手机里的文件夹代表什么?哪些可以清除?看完秒懂!...
  12. CSS中设置单机按钮,实现按下效果
  13. airtest获取手机分辨率,通过相对坐标定位元素
  14. 全球及中国丝蛋白行业研究及十四五规划分析报告
  15. 测试人员的KPI考核指标
  16. android Tether 分析
  17. 系统出现“预体验成员内版本遇到 问题”错误的处理(亲身经历)
  18. 更新wlan.bin文件
  19. Axure8.0基础教程 一
  20. legoloam系列算法之点云处理与特征提取

热门文章

  1. 【个人笔记】Vue+ElementUI后台模板配置动态路由
  2. 劲爆!Java 通用泛型要来了。。
  3. 10小时,就能吃透Kafka源码?
  4. Elasticsearch 最佳实践!
  5. 苹果发布会预示了什么?
  6. 你的工资基础决定你的前途
  7. Activity生命周期详解二
  8. java simpledateformat 中文_[转载]java中Date,SimpleDateFormat
  9. shell初学之nginx(域名)
  10. OJ 21658::Monthly Expense(二分搜索+最小化最大值)