决策树

由于我们是使用sklearn对决策树代码进行实现,所以并不是很关心其原理部分。但我仍需要对其进行一定的了解。通过查询资料,去学习了下决策树的原理,这里对其原理进行简要介绍。

注:这里决策树的原理是通过这个网站来学习的,这里只做记录。

机器学习实战教程(二):决策树基础篇之让我们从相亲说起 (cuijiahua.com)

决策树原理

决策树是一种基本的分类与回归方法。决策树可以这样理解为:由决策树的根结点到叶结点的每一条路径构建一条规则,路径上内部结点的特征对应着规则的条件,而叶结点的类对应规则的结论。

分类决策树

分类决策树模型是一种描述对实例进行分类的树形结构。

决策树构成

决策树由结点和有向边组成。

结点类型

有两种类型内部结点和叶结点

内部结点

表示一个特征或者属性

叶结点

表示一个类

构造决策树

一般可以分为特征选择、决策树生成、决策树修剪

特征选择

特征选择在于选取对训练数据具有分类能力的特征。这样可以提高决策树学习的效率。通常特征选择的标准是信息增益或信息增益比。

信息增益

信息增益是在划分数据集后信息发生的变化。那么如何计算信息增益?

信息增益的计算,需要引入这个名词,全称为香农熵,是集合信息的度量方式。数学上的解释是:信息的期望值。在信息论和概率统计中,熵是表示随机变量不确定性的度量。

香农熵

在计算事物的信息期望值之前,我们需要先计算事物的类别信息。设p(xi)是选择该分类的概率,可以通过这个公式,计算得到所有类别的信息。

为了计算熵,我们需要计算所有类别所有可能值包含的信息期望值(数学期望)。公式是

其中n是分类的数目,熵越大,随机变量的不确定性就越大。当熵中的概率由数据估计(最大似然估计)得到时,所对应的熵被称为经验熵。这个概率事可以通过数据数出来的。我们假设训练数据集为D,则训练数据集D的经验熵为H(D),|D|表示样本容量,即样本个数。假设分为K个类Ck=1,2,3,…K,|Ck|为属于类Ck的样本个数,因此经验熵就可以写作:

根据此公式,我们可以计算出经验熵。经验熵可以用来分析样本数据中的数据,从而进行分类。

比如:假设有15个样本数据的数据集。9个数据属于类别A,6个数据属于类别B,通过上面的公式我们可以对该数据集进行经验熵的计算。

对上面计算公式的解释:K=2、ck的值在类别A时等于9,在类别B时等于6、D是样本个数15、Ck的值在属于类别A时是类别A的样本个数9,在属于类别B时是类别B的样本个数6。

构建代码

具体的代码编写计算经验熵(香农熵)的过程可以看上面的博客,讲的很好,或者参考《统计学习方法》这本书在github上的实现代码。

条件熵

上面我们详细解释了香农熵,但是还有个定义是条件熵。条件熵是什么?条件熵一般用H(Y|X)来表示,表示在已知随机变量X的条件下,随机变量Y的不确定性。也叫做随机变量X给定的条件下随机变量Y的条件熵。定义为X给定条件下Y的条件概率分布的熵对X的数据期望

其中

同理,当条件熵中的概率由**数据估计(极大似然估计)**得到时,所对应的熵就被叫做条件经验熵。

讲了这么多条件熵、条件经验熵能用来干什么?

可以用来计算信息增益。信息增益是相对于特征而言的,信息增益越大,特征对分类结果的影响就越大,用来分类效果就会越好。

信息增益计算

特征A对训练集D的信息增益g(D,A),可以定义为,集合D的经验熵H(D)与特征A给定条件下的条件经验熵H(D|A)之差。即

一般地,熵H(D)与条件熵H(D|A)之差称为互信息。

比如:假设特征A有n个不同的取值{a1,a2,···,an},我们可以根据特征A的不同取值把数据集D划分成n个子集{D1,D2,···,Dn}。其中|Di|表示Di的样本个数。

根据上面的H(Y|X)计算公式,我们可以计算H(D|A)就等于

而又根据上面计算H(D)的公式,我们可以计算H(Di)的值,为

其中Dik表示Di中属于Ck的样本集合,即Dik = Di ∩ Ck,|Dik|表示样本个数。

因此我们就可以计算出来这个特征A对于数据集D的条件经验熵为

得到条件经验熵,根据上面的公式我们就可以计算其信息增益值为

构建代码

具体的代码,依然可以看上面的博客。讲的很好,或者参考《统计学习方法》这本书在github上的实现代码。这里就不写了。

根据上面的解释,我们就可以计算出对于数据集D来说的各项特征数据的信息增益值。选取其中信息增益值最大的特征来作为分类的特征。

计算了这么多,到底有什么用呢?

可以用来构造决策树。其工作原理是:当得到一份数据集时,我们可以基于其属性堆数据集进行划分,由于特征值可能多于两个,因此可能存在大于两个分支的数据集划分,第一次划分之后,数据集被向下传到树的分支的下一个结点,在这个结点我们可以再次进行数据划分,通过递归的原则对数据集进行处理,即可构建决策树。

构建决策树的算法有很多。比如C4.5、ID3和CART。

决策树生成算法递归地产生决策树,直到不能继续下去未为止。这样生成的决策树对训练数据的分类会很好,但是对于未知数据的分类就会出现过拟合。过拟合的原因是在学习时过多地考虑如何提高训练数据的正确分类,而使得构建的决策树过于复杂,这时候就需要进行决策树剪枝。

构造决策树-ID3算法

这里采用的算法是ID3算法进行实现的。这个算法的核心是在决策树各个结点上对应信息增益准则选择特征,递归地构建决策树。跟我们上面所描述的很契合。ID3相当于用极大似然法进行概率模型的选择。

具体构建方法

从根节点开始,对结点计算所有可能的特征的信息增益,选择信息增益最大的特征作为其结点的特征,由该特征的不同取值建立子节点。再对子节点递归地调用以上方法,构建决策树,直到所有特征地信息增益均很小或者没有特征可以选择为止。最后得到一颗决策树。

构建代码

代码部分还是去参考这个博客或者《统计学习方法》这本书在github上的实现代码。

在递归构建决策树时,递归有两个终止条件:第一个停止条件是所有的类标签完全相同,则直接返回该类标签;第二个停止条件是使用完了所有特征,仍然不能将数据划分仅包含唯一类别的分组,即决策树构建失败,特征不够用。此时说明数据纬度不够,由于第二个停止条件无法简单地返回唯一的类标签,这里挑选出现数量最多的类别作为返回值。

决策树做预测

流程

收集数据→准备数据→分析数据→训练算法→测试算法→使用算法

使用算法进行分类

依靠训练数据构造了决策树之后,我们可以将它用于实际数据的分类。在执行数据分类时,需要决策树以及用于构造树的标签向量。然后,程序比较测试数据与决策树上的数值,递归执行该过程直到进入叶子结点;最后将测试数据定义为叶子结点所属的类型。在用决策树做预测的时候,我们按顺序输入需要的分类结点的属性值即可。

决策树的存储

我们可以通过使用Python模块pickle序列化对象的方式,把训练的模型进行存储。使用pickle.dump存储决策树。在使用时使用pickle.load进行载入即可。

以上,便是决策树的原理,包括了其数学介绍和代码构建思路。当然,决策树可做的不仅仅只有这么多。这里只是对其的简要介绍。也没有添加代码这样。大家凑合看吧。

机器学习系列文章-决策树相关推荐

  1. svm多分类代码_跟我一起机器学习系列文章知识点与代码索引目录,持续更新…...

    <跟我一起机器学习> 系列文章知识点与代码索引目录 0 环境配置 如何才能入门机器学习? 优雅的安装和使用Anaconda 使用Conda来进行环境的创建与管理 Pycharm安装与使用 ...

  2. 【机器学习系列文章】第1部分:为什么机器学习很重要 ?

    目录 路线图 谁应该读这个? 为什么机器学习很重要 语义树:人工智能和机器学习 强大的AI将永远改变我们的世界; 要了解如何,学习机器学习是一个很好的起点 如何阅读这个系列 关于作者 简单,简单的解释 ...

  3. 机器学习系列文章——算法的实现(knn,朴素贝叶斯,决策树,模型评估)

    一.机器学习算法分类: 机器学习算法可分为两大类,即分类与回归.其中分类是针对离散型数据,比如判定一直动物是猫是狗,判断一个人的信用等级:而回归问题为针对连续型数据,如预测淘宝店铺销量,预测明天气温等 ...

  4. 机器学习系列文章(chapter two)——数据特征分析处理

    一.数据来源 用机器学习来分析数据.获取客观规律,首先我们要能有海量数据去进行分析,才有可能得出相对准确的结论.如果数据量不够大,则很可能得出误导性的结论.比如去高端住宅区调查人均存款情况,得出的结论 ...

  5. 【机器学习系列文章】第2.2部分:监督学习II

    目录 分类:预测标签 Logistic回归:0还是1? 支持向量机(SVM) 成功! 练习材料和进一步阅读 使用逻辑回归和支持向量机(SVM)进行分类. 分类:预测标签 这封电子邮件是垃圾邮件吗?借款 ...

  6. 机器学习算法 04 —— 决策树(ID3、C4.5、CART,剪枝,特征提取,回归决策树)

    文章目录 系列文章 决策树 1 决策树算法简介 2 决策树分类的原理 2.1 信息熵 2.2 决策树划分依据-信息增益(ID3) 2.3 决策树划分依据-信息增益率(C4.5) 2.4 决策树划分依据 ...

  7. 【机器学习系列】概率图模型第三讲:深入浅出无向图中的条件独立性和因子分解

    作者:CHEONG 公众号:AI机器学习与知识图谱 研究方向:自然语言处理与知识图谱 阅读本文之前,先注意一下两点: 1. 机器学习系列文章常含有大量公式推导证明,为了更好理解,文章在最开始会给出本文 ...

  8. 机器学习系列(10)_决策树与随机森林回归

    注:本篇文章接上一篇文章>>机器学习系列(9)_决策树详解01 文章目录 一.决策树优缺点 二.泰坦尼克号幸存者案例 三.随机森林介绍 1.随机森林的分类 2.重要参数 [1]n_esti ...

  9. 机器学习框架ML.NET学习笔记【1】基本概念与系列文章目录

    一.序言 微软的机器学习框架于2018年5月出了0.1版本,2019年5月发布1.0版本.期间各版本之间差异(包括命名空间.方法等)还是比较大的,随着1.0版发布,应该是趋于稳定了.之前在园子里也看到 ...

最新文章

  1. MyEclipse中运行环境jre、编译级别、tomcat运行环境区别
  2. Equinox P2的学习
  3. 软考 - 可靠性和可用性
  4. linux下mysql 有双机_在Linux环境下配置mysql cluster双机集群
  5. auto_ptr scoped_ptr shared_ptr weak_ptr unique_ptr
  6. PHP漏洞全解(三)-客户端脚本植入
  7. 控制标记符分水岭分割算法 此博文包含图片
  8. python语言的赋值语句可以改变变量的类型吗_python 数据类型和变量
  9. 《Using OpenRefine》翻译~17
  10. 【C语言入门】四人火柴游戏
  11. 这么简单的道理,猩猩都懂,我们却忘了
  12. 修改植物大战僵尸数据
  13. JAVA——请输入打印一个倒99乘法口诀
  14. iOS二维码生成、识别、扫描等
  15. Ribbon负载均衡策略初步解读
  16. 【完整记录】使用kubeadm部署kubernetes集群踩坑记录及解决方案
  17. STM32L152RE实现串口发送及接收数据
  18. 1000:Calculate A + B
  19. webpack:url-loader打包后找不到图片、字体路径问题
  20. 手机电子名片html,个人简历/电子名片 HTML模板

热门文章

  1. 数数字(找规律+模拟)
  2. 系统动力学专拓考试重点总结
  3. 半路接手项目,做好“沟通”很重要
  4. 庄子:当你一事无成,感到茫然无助时,读懂这几句话,会让你重新看待人生
  5. 消费者满意度调查方案
  6. mfc利用SQL、DAO调用access数据库
  7. n-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter convertView
  8. 【程序9】题目:要求输出国际象棋棋盘
  9. php memcache内存大小,PHP memcache 内存缓存 数据库查询 应用 高洛峰 细说PHP
  10. 末位淘汰!985高校硕士毕业拟新规:强制20%不通过或需大改?