机器学习系列文章-决策树
决策树
由于我们是使用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进行载入即可。
以上,便是决策树的原理,包括了其数学介绍和代码构建思路。当然,决策树可做的不仅仅只有这么多。这里只是对其的简要介绍。也没有添加代码这样。大家凑合看吧。
机器学习系列文章-决策树相关推荐
- svm多分类代码_跟我一起机器学习系列文章知识点与代码索引目录,持续更新…...
<跟我一起机器学习> 系列文章知识点与代码索引目录 0 环境配置 如何才能入门机器学习? 优雅的安装和使用Anaconda 使用Conda来进行环境的创建与管理 Pycharm安装与使用 ...
- 【机器学习系列文章】第1部分:为什么机器学习很重要 ?
目录 路线图 谁应该读这个? 为什么机器学习很重要 语义树:人工智能和机器学习 强大的AI将永远改变我们的世界; 要了解如何,学习机器学习是一个很好的起点 如何阅读这个系列 关于作者 简单,简单的解释 ...
- 机器学习系列文章——算法的实现(knn,朴素贝叶斯,决策树,模型评估)
一.机器学习算法分类: 机器学习算法可分为两大类,即分类与回归.其中分类是针对离散型数据,比如判定一直动物是猫是狗,判断一个人的信用等级:而回归问题为针对连续型数据,如预测淘宝店铺销量,预测明天气温等 ...
- 机器学习系列文章(chapter two)——数据特征分析处理
一.数据来源 用机器学习来分析数据.获取客观规律,首先我们要能有海量数据去进行分析,才有可能得出相对准确的结论.如果数据量不够大,则很可能得出误导性的结论.比如去高端住宅区调查人均存款情况,得出的结论 ...
- 【机器学习系列文章】第2.2部分:监督学习II
目录 分类:预测标签 Logistic回归:0还是1? 支持向量机(SVM) 成功! 练习材料和进一步阅读 使用逻辑回归和支持向量机(SVM)进行分类. 分类:预测标签 这封电子邮件是垃圾邮件吗?借款 ...
- 机器学习算法 04 —— 决策树(ID3、C4.5、CART,剪枝,特征提取,回归决策树)
文章目录 系列文章 决策树 1 决策树算法简介 2 决策树分类的原理 2.1 信息熵 2.2 决策树划分依据-信息增益(ID3) 2.3 决策树划分依据-信息增益率(C4.5) 2.4 决策树划分依据 ...
- 【机器学习系列】概率图模型第三讲:深入浅出无向图中的条件独立性和因子分解
作者:CHEONG 公众号:AI机器学习与知识图谱 研究方向:自然语言处理与知识图谱 阅读本文之前,先注意一下两点: 1. 机器学习系列文章常含有大量公式推导证明,为了更好理解,文章在最开始会给出本文 ...
- 机器学习系列(10)_决策树与随机森林回归
注:本篇文章接上一篇文章>>机器学习系列(9)_决策树详解01 文章目录 一.决策树优缺点 二.泰坦尼克号幸存者案例 三.随机森林介绍 1.随机森林的分类 2.重要参数 [1]n_esti ...
- 机器学习框架ML.NET学习笔记【1】基本概念与系列文章目录
一.序言 微软的机器学习框架于2018年5月出了0.1版本,2019年5月发布1.0版本.期间各版本之间差异(包括命名空间.方法等)还是比较大的,随着1.0版发布,应该是趋于稳定了.之前在园子里也看到 ...
最新文章
- MyEclipse中运行环境jre、编译级别、tomcat运行环境区别
- Equinox P2的学习
- 软考 - 可靠性和可用性
- linux下mysql 有双机_在Linux环境下配置mysql cluster双机集群
- auto_ptr scoped_ptr shared_ptr weak_ptr unique_ptr
- PHP漏洞全解(三)-客户端脚本植入
- 控制标记符分水岭分割算法 此博文包含图片
- python语言的赋值语句可以改变变量的类型吗_python 数据类型和变量
- 《Using OpenRefine》翻译~17
- 【C语言入门】四人火柴游戏
- 这么简单的道理,猩猩都懂,我们却忘了
- 修改植物大战僵尸数据
- JAVA——请输入打印一个倒99乘法口诀
- iOS二维码生成、识别、扫描等
- Ribbon负载均衡策略初步解读
- 【完整记录】使用kubeadm部署kubernetes集群踩坑记录及解决方案
- STM32L152RE实现串口发送及接收数据
- 1000:Calculate A + B
- webpack:url-loader打包后找不到图片、字体路径问题
- 手机电子名片html,个人简历/电子名片 HTML模板
热门文章
- 数数字(找规律+模拟)
- 系统动力学专拓考试重点总结
- 半路接手项目,做好“沟通”很重要
- 庄子:当你一事无成,感到茫然无助时,读懂这几句话,会让你重新看待人生
- 消费者满意度调查方案
- mfc利用SQL、DAO调用access数据库
- n-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter convertView
- 【程序9】题目:要求输出国际象棋棋盘
- php memcache内存大小,PHP memcache 内存缓存 数据库查询 应用 高洛峰 细说PHP
- 末位淘汰!985高校硕士毕业拟新规:强制20%不通过或需大改?