机器学习算法之生成树

一、什么是决策树?

决策树(Decision Tree)是一种基本的分类和回归的方法。

分类决策树模型是一种描述对实例进行分类的树形结构。决策树由结点(node)和有向边(directed edge)组成。结点有两种形式:内部结点和叶节点。

一句话概括:通过信息增益,采用递归的方式生成树(找出最合适的节点顺序以及叶子对应的类标签)

1.1 决策树直观理解

通过一个例子来理解决策树,若我们有以下数据,要求通过以下数据,判断某用户是否能够偿还债务。

è¿éåå¾çæè¿°

1.2 构建过程简述

用决策树分类,从根节点开始,对实例的某一特征进行测试,根据测试结果将实例分配到其子结点;这时,每一个子结点对应着该特征的一个值。如此递归地对实例进行测试分配,直到达到叶节点。最后将实例分到叶节点的类中。

1.3 根据构建方法构建决策树

 

根据数据,我们主观上觉得年收入对于是否能够偿还债务最重要,所以将年收入作为根结点。年收入大于等于97.5千元的可以偿还,对于小于97.5的,再用是否拥有房产进行划分,最后根据婚姻情况进行划分,直到到达叶节点为止。

当构建好一个决策树后,新来一个用户后,可以根据决策好的模型直接进行判断,比如新用户为:无房产、单身、年收入55K,那么根据判断得出该用户无法偿还债务。

二、一些概念

比特化(bits)

假设存在一组随机变量x,各个值出现的概率关系如下:

现在有一组由x变量组成的序列:BACADDCBAC......;如果现在希望这个序列转换为二进制来进行网络传输,那么我们就得到一个这样的序列:01001000111110010010......

在这情况下,我们可以使用两个比特位来表示一个随机变量。

而当X变量出现的概率值不一样的时候,对于一组序列信息来讲,每个变量平均需要多少个比特位来描述呢?

计算得:

也可以使用下列方法计算

一般化的比特化(Bits)

假设现在随机变量X具有m个值,分别为V1,v2,...vm;并且各个值出现的概率如下表所示:那么对于一组列信息来讲,每个变量平均需要多少个比特位来描述呢?

可以使用这些变量的期望来表示每个变量需要多少个比特位来描述信息:

信息熵(Entropy)

公式:

信息量:指的是一个样本/事件所蕴含的信息,如果一个事件的概率越大,那么就可以认为该事件所蕴含的信息越少。极端情况下,比如:“太阳从东方升起”,因为是确定事件,所以不携带任何信息量

信息熵:1948年,香农引入信息熵;一个系统越是有序,信息熵就越低,一个系统越是混乱,信息熵就越高,所以信息熵被认为是一个系统有序程度的度量。

信息熵就是用来描述系统信息量的不确定度。

High Entropy(高信息熵):表示随机变量X是均匀分布的,各种取值情况是等概率出现的。

Low Entropy(低信息熵):表示随机变量X各种取值不是等概率出现。可能出现有的事件概率很大,有的事件概率很小。

条件熵H(Y|X)

给定条件 X 的情况下,随机变量 Y 的信息熵就就叫做条件熵。

当专业(X)为数学的时候,Y的信息熵的值为:H(Y|X=数学)

给定条件X的情况下,所有不同x值情况下Y的信息熵的平均值叫做条件熵

给定条件X的情况下,所有不同x值情况下Y的信息熵的平均值叫做条件熵。另外一个公式如下所示:

事件(X,Y)发生所包含的熵,减去事件X单独发生的熵,即为在事件X发生的前提下,Y发生“新”带来的熵,这个也就是条件熵本身的概念,验证如下:

三、决策树

决策树(Decision Tree)是在已知各种情况下发生概率的基础上,通过构建决策树来进行分析的一种方式,是一种直观应用概率分析的一种图解法;决策树是一种预测模型,代表的是对象属性与对象值之间的映射关系;决策树是一种树形结构,其中每个内部节点表示一个树形的测试,每个分支表示一个测试输出,每个叶子节点代表一种类别;决策树是一种非常常用的有监督的分类算法。

决策树的决策过程就是从根节点开始,测试待分类项中对应的特征属性,并按照其值选择输出分支,知道叶子节点,将叶子节点的存放类别作为决策结果。

决策树分为两大类:分类树和回归树,前者用于分类标签值,后者用于预测连续值,常用算法ID3、C4.5、CART等。

决策树构建过程

决策树构建的重点就是决策树的构造。决策树的构造就是进行属性选择度量,确定各个特征属性之间的拓扑结构(树结构),构建决策树的关键就是分裂属性,构建决策树的关键步骤就是分裂属性,分裂属性是指在某个节点按照某一特征属性的不同划分构建不同的分支,其目标就是让哥哥分裂子集尽可能的“纯”(让一个分裂子类的项尽可能的属于同一类别)

构建步骤如下:

  1. 将所有的特征看成一个一个的节点;
  2. 遍历每个特征的每一种分割方式,找到最好的分割点;将数据划分为不同的子节点,eg: n_{1}n_{2} ....n_{m} ;计算划分之后所有子节点的'纯度'信息;
  3. 对第二步产生的分割,选择出最优的特征以及最优的划分方式;得出最终的子节点: n_{1}n_{2} ....n_{m}
  4. 对子节点 n_{1}n_{2} ....n_{m} 分别继续执行2-3步,直到每个最终的子节点都足够'纯'。

决策树特征属性类型

根据特征属性的类型不同,在构建决策树的时候,采用不同的方式,具体如下:

  1. 属性是离散值,而且不要求生成的是二叉决策树,此时一个属性就是一个分支
  2. 属性是离散值,而且要求生成的是二叉决策树,此时使用属性划分的子集进行测试,按照“属于此子集”和“不属于此子集”分成两个分支
  3. 属性是连续值,可以确定一个值作为分裂点split_point,按照 >split_point 和 <=split_point 生成两个分支

决策树分割属性选择

决策树算法是一种“贪心”算法策略,只考虑在当前数据特征情况下的最好分割方式,不能进行回溯操作。

对于整体的数据集而言,按照所有的特征属性进行划分操作,对所有划分操作的结果集的“纯度”进行比较,选择“纯度”越高的特征属性作为当前需要分割的数据集进行分割操作,持续迭代,直到得到最终结果。决策树是通过“纯度”来选择分割特征属性点的。

 决策树量化纯度

决策树的构建是基于样本概率和纯度进行构建操作的,那么进行判断数据集是否“纯”可以通过三个公式进行判断,分别是Gini系数、熵(Entropy)、错误率,一般情况使用熵公式。

当计算出各个特征属性的量化纯度值后使用信息增益度来选择出当前数据集的分割特征属性;如果信息增益度的值越大,表示在该特征属性上会损失的纯度越大 ,那么该属性就越应该在决策树的上层,计算公式为:

Gain为A为特征对训练数据集D的信息增益,它为集合D的经验熵H(D)与特征A给定条件下D的经验条件熵H(D|A)之差。

决策树的停止条件

一般情况有两种停止条件:

  • 当每个子节点只有一种类型的时候停止构建。
  • 当前节点中记录数小于某个阈值,同时迭代次数达到给定值时,停止构建过程,此时使用max(p(i))作为节点的对应类型。

方式一可能会使树的节点过多,导致过拟合(Overfiting)等问题;比较常用的方式是使用方式二作为停止条件。

决策树算法效果的评估

决策树的效果评估和一般的分类算法一样,采用混淆矩阵来进行计算准确率、召回率、精确率等指标。

也可以采用叶子节点的纯度值总和来评估算法的效果,值越小,效果越好。

决策树的损失函数(该值越小,算法效果越好)。

四、决策树直观理解结果计算

 

1、计算原来的信息熵

2、对数据特征进行分割

该数据的特征共有三个,分别计算每个特征的条件熵

按照是否拥有房产分别计算,然后算出条件熵

同理可以计算Gain(D,婚姻)=0.205

只保留80和97.5。 如果选择67.5,它将60和75分开了,但是60和75的Y都是否,标签相同,最好还是分到一个类中

Gain(D,年收入=97.5)=0.395

Gain(D,年收入=80)=0.116

按照Gain越小,分割后的纯度越高,因此第一个分割的特征属性为年收入,并按照97.5进行划分。

左子树的结果集够纯,因此不需要继续划分。接下来,对右子树年收入<97.5的数据,继续选择特征进行划分,且不再考虑收入这个特征,注意需要重新计算Gain(D,婚姻),Gain(D,房产),重复上述步骤,至到满足结束条件

五、算法

ID3算法

ID3算法是决策树的一个经典的构造算法,内部使用信息熵以及信息增益来进行构建;每次迭代选择信息增益最大的特征属性作为分割属性。

信息熵

信息增益

优点:

决策树构建速度快;实现简单;
缺点:

  1. 计算依赖于特征数目较多的特征,而属性值最多的属性并不一定最优
  2. ID3算法不是递增算法
  3. ID3算法是单变量决策树,对于特征属性之间的关系不会考虑
  4. 抗噪性差
  5. 只适合小规模数据集,需要将数据放到内存中

C4.5算法

在ID3算法的基础上,进行算法优化提出的一种算法;使用信息增益率来取代ID3算法中的信息增益,在树的构造过程中会进行剪枝操作进行优化;能够自动完成对连续属性的离散化处理;C4.5算法在选中分割属性的时候选择信息增益率最大的属性,涉及到的公式为:

优点

  1. 产生的规则易于理解
  2. 准确率较高
  3. 实现简单

缺点:

  1. 对数据集需要进行多次顺序扫描和排序,所以效率较低
  2. 只适合小规模数据集,需要将数据放到内存中。

CART算法

使用基尼系数作为数据纯度的量化指标来构建的决策树算法就叫做CART(Classification And Regression Tree,分类回归树)算法。CART算法使用GINI增益作为分割属性选择的标准,选择GINI增益最大的作为当前数据集的分割属性;可用于分类和回归两类问题。强调:CART构建是二叉树

基尼系数

基尼增益

ID3、C4.5、CART分类树算法总结

  • ID3和C4.5算法均只适合在小规模数据集上使用
  • ID3和C4.5算法都是单变量决策树
  • 当属性值取值比较多的时候,最好考虑C4.5算法,ID3得出的效果会比较差
  • 决策树分类一般情况只适合小数据量的情况(数据可以放内存)
  • CART算法是三种算法中最常用的一种决策树构建算法。
  • 三种算法的区别仅仅只是对于当前树的评价标准不同而已,ID3使用信息增益、
  • C4.5使用信息增益率、CART使用基尼系数。
  • CART算法构建的一定是二叉树,ID3和C4.5构建的不一定是二叉树。
算法支持模型树结构特征选择连续值处理缺失值处理剪枝特征属性多次使用
ID3分类多叉树信息增益不支持不支持不支持
C4.5分类多叉树信息增益率支持支持支持
CART分类、回归二叉树基尼系数、均方差支持支持支持

六、分类树和回归树


分类树采用信息增益、信息增益率、基尼系数来评价树的效果,都是基于概率值进行判断的;而分类树的叶子节点的预测值一般为叶子节点中概率最大的类别作为当前叶子的预测值。

回归树中,叶子节点的预测值一般为叶子节点中所有值的均值来作为当前叶子节点的预测值。所以在回归树中一般采用MSE作为树的评价指标,即均方差。一般情况,使用CART算法构建回归树。

七、决策树的优化策略

剪枝优化:决策树过渡拟合一般情况是由于节点太多导致的,剪枝优化对决策树的正确率影响是比较大的,也是最常用的一种优化方式。

Random Forest:利用训练数据随机产生多个决策树,形成一个森林。然后使用这个森林对数据进行预测,选取最多结果作为预测结果。

剪枝优化

决策树的剪枝是决策树算法中最基本、最有用的一种优化方案,主要分为两大类:

前置剪枝:在构建决策树的过程中,提前停止。结果是决策树一般比较小,实践证明这种策略无法得到比较好的结果。

后置剪枝:在决策树构建好后,然后再开始裁剪,一般使用两种方式:1、用单一叶子节点代替整个子树,叶节点的分类采用子树中最主要的分类;2、将一个子树完全替代另外一棵子树;后置剪枝的主要问题是计算效率问题,存在一定的浪费情况。

后置剪枝过程

对于给定的决策树T0

  1. 计算所有内部非叶子节点的剪枝系数;
  2. 查找最小剪枝系数的节点,将其子节点进行删除操作,进行剪枝得到决策树Tk;如果存在多个最小剪枝系数节点,选择包含数据项最多的节点进行剪枝操作;
  3. 重复上述操作,直到产生的剪枝决策树Tk只有1个节点;
  4. 得到决策树T0 T1 T2....Tk;
  5. 使用验证样本集选择最优子树Ta(使用原始损失函数考虑)。

使用验证集选择最优子树的标准,可以使用原始损失函数来考虑:

八、决策树剪枝损失函数及剪枝系数

原始损失函数

叶节点越多,决策树越复杂,损失越大;修正添加剪枝系数,修改后的损失函数为

考虑根节点为r的子树,剪枝前后的损失函数分别为loss(R)和loss(r),当这两者相等的时候,可以求得剪枝系数

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/454355.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习算法之集成学习

集成学习的思想是将若干个学习器(分类器&回归器)组合之后产生一个新学习器。弱分类器(weak learner)指那些分类准确率只稍微好于随机猜测的分类器(errorrate < 0.5)。 集成算法的成功在于保证弱分类器的多样性(Diversity)。而且集成不稳定的算法也能够得到一个比较明显…

常用的方法论-NPS

转载于:https://www.cnblogs.com/qjm201000/p/7687510.html

controller调用controller的方法_SpringBoot 优雅停止服务的几种方法

转自&#xff1a;博客园&#xff0c;作者&#xff1a;黄青石www.cnblogs.com/huangqingshi/p/11370291.html 在使用 SpringBoot 的时候&#xff0c;都要涉及到服务的停止和启动&#xff0c;当我们停止服务的时候&#xff0c;很多时候大家都是kill -9 直接把程序进程杀掉&#x…

机器学习之聚类概述

什么是聚类 聚类就是对大量未知标注的数据集&#xff0c;按照数据 内部存在的数据特征 将数据集划分为 多个不同的类别 &#xff0c;使 类别内的数据比较相似&#xff0c;类别之间的数据相似度比较小&#xff1b;属于 无监督学习。 聚类算法的重点是计算样本项之间的 相似度&…

qt release打包发布_几种解决Qt程序打包后无法连接数据库问题的方法

Qt是一个跨平台C图形用户界面应用程序开发框架&#xff0c;使用它不仅可以方便地开发GUI程序&#xff0c;也可以开发非GUI程序&#xff0c;可以一次编写&#xff0c;处处编译。今天遇到的问题比较怪异&#xff0c;我开发的是一个桌面版订单管理系统&#xff0c;整体架构就是一个…

机器学习之拉格朗日乘子法和 KKT

有约束的最优化问题 最优化问题一般是指对于某一个函数而言&#xff0c;求解在其指定作用域上的全局最小值问题&#xff0c;一般分为以下三种情况(备注&#xff1a;以下几种方式求出来的解都有可能是局部极小值&#xff0c;只有当函数是凸函数的时候&#xff0c;才可以得到全局…

pmp思维导图 第六版_PMP考试技巧攻略(上)

PMP考试需要有保证足够的时间投入&#xff1a;获得PMP 考试并拿到5A 成绩&#xff0c;并且还需要理解性记忆&#xff1a;PMP 指定教材PMBOK第六版&#xff08;教材为必看三遍以上&#xff09;&#xff0c;学习起来是有趣的&#xff0c;同时也是痛苦的。因为看书时字面的字我们认…

浅谈MVC MVP MVVM

复杂的软件必须有清晰合理的架构&#xff0c;否则无法开发和维护。 MVC&#xff08;Model-View-Controller&#xff09;是最常见的软件架构之一&#xff0c;业界有着广泛应用。 它本身很容易理解&#xff0c;但是要讲清楚&#xff0c;它与衍生的 MVP 和 MVVM 架构的区别就不容易…

商务搜索引擎_外贸研修 | 世界各国常用搜索引擎,开发客户必备!

我们平时生活中也好&#xff0c;开发客户也好&#xff0c;搜索引擎是我们离不开的工具。最佳没有之一的当属谷歌了。谷歌网址&#xff1a;www.google.com谷歌高级搜索&#xff1a;https://www.google.com/advanced_search (通过设置/排除一些字词缩小精确搜索范围)作为普通使用…

HaProxy+Keepalived+Mycat高可用群集配置

概述 本章节主要介绍配置HaProxyKeepalived高可用群集&#xff0c;Mycat的配置就不在这里做介绍&#xff0c;可以参考我前面写的几篇关于Mycat的文章。 部署图&#xff1a; 配置 HaProxy安装 181和179两台服务器安装haproxy的步骤一致 --创建haproxy用户 useradd haproxy--…

奇怪的bug,不懂Atom在添加markdown-themeable-pdf,在配置好phantomjs的情况下报错

本来打算用一下atom但是导出pdf报错&#xff0c;可是在预览的情况下就没有问题&#xff0c;顺便吐槽一下谷歌浏览器自己的markdown在线预览插件无法适配&#xff0c;用搜狗搭载谷歌的插件才能导出pdf&#xff0c;一下感觉逼格少了很多&#xff0c;等忙完这阵再来看一下。先贴出…

Python 面试题

Python面试315道题第一部 Python面试题基础篇&#xff08;80道&#xff09;1、为什么学习Python&#xff1f;2、通过什么途径学习的Python&#xff1f;3、Python和Java、PHP、C、C#、C等其他语言的对比&#xff1f;PHPjavacc#c4、简述解释型和编译型编程语言&#xff1f;编译型…

bzoj1038500AC!

序列dp 先开始想了一个类似区间dp的东西...少了一维 然后发现似乎不太对&#xff0c;因为女生的最大差和男生的最大差并不相等 dp[i][j][x][y]表示当前有i个人&#xff0c;j个男生&#xff0c;男生和女生的后缀最大差是x&#xff0c;女生和男生最大差是y&#xff0c;x,y>0,转…

android生命周期_Android开发 View的生命周期结合代码详解

咱们以TextView控件为例&#xff1a;/*** Created by SunshineBoy on 2020/9/23.*/public class TestTextView extends android.support.v7.widget.AppCompatTextView {public TestTextView(Context context) {super(context);Log.e("TestTextView","TestTextVi…

机器学习算法之支持向量机 SVM

距离知识 点到直线/平面的距离公式&#xff1a; 1、假定点p(x0,y0)&#xff0c;平面方程为f(x,y)AxByC&#xff0c;那么点p到平面f(x)的距离为&#xff1a; 2、从三维空间扩展到多维空间中&#xff0c;如果存在一个超平面f(X)θXb; 那么某一个点X0到这个超平面的距离为: 参考…

VMware Horizon虚拟桌面工具箱2.0-审计,远程协助,控制台,电源

各位朋友,大家好,VMware Horizon 虚拟桌面工具箱2.0版本,已经面世啦!在2.0 版本中我们添加了vSphere虚拟机控制台访问、开机策略和图形化安装这三个新功能&#xff0c;并改进了部分老的功能。老版本即1.5版本的相关知识可以参考我的博文VMware Horizon虚拟桌面工具箱之审计与远…

python词云改颜色_一种用Python生成词云

一种用Python生成词云 我们在阅读一篇很长的文章时&#xff0c;总先看看文章的关键词来获知文章的大概内容。今天我们就来制作一个词云程序&#xff0c;将文章中出现次数较多的词语提取出来&#xff0c;生成一张词云图。词云图的生成原理&#xff1a; 程序会将这篇文章中的所有…

机器学习之 朴素贝叶斯、贝叶斯网络

目录 贝叶斯定理 朴素贝叶斯算法 高斯朴素贝叶斯 伯努利朴素贝叶斯 多项式朴素贝叶斯 贝叶斯网络 最简单的贝叶斯网络 全连接贝叶斯网络 一般化的贝叶斯网络 引子 参赛者会看见三扇关闭了的门&#xff0c;其中一扇的后面有一辆汽车&#xff0c;选中后面有车的那扇门可…

attention机制_简析Attention机制—优缺点,实现,应用

什么是Attention机制&#xff1f;Attention机制的本质来自于人类视觉注意力机制。人们在看东西的时候一般不会从到头看到尾全部都看&#xff0c;往往只会根据需求观察注意特定的一部分。简单来说&#xff0c;就是一种权重参数的分配机制&#xff0c;目标是协助模型捕捉重要信息…

pycharm Debug问题

pycharm Debug问题 参考链接:https://blog.csdn.net/weixin_43472408/article/details/85072640 Debug的调试方式如下所示&#xff1a; 1.show execution point (F10) 显示当前所有断点 2.step over(F8) 单步调试。 若函数A内存在子函数a时&#xff0c;不会进入子函数a内执…