分而治之—利用决策树和规则进行分类

当在几个具有不同薪资和福利水平的工作机会之间做出选择时,很多人会从列出利弊开始,并基于简单的规则来排除选项。比如,“如果我上下班的时间超过1小时,那么我会不高兴”。通过这种方式,通过这种方式,预测一个人未来幸福的既复杂又困难的决定就可以简化为一系列简单的决定。在机器学习算法中,同样有两种算法可以根据简单的选择集做出复杂的决策,即决策树和规则学习,今天大家跟着图图一起来了解下这两种算法的概念及应用过程。

一、理解决策树

决策树学习是强大的分类器,他利用树形结构对特征和潜在结果之间的关系建立模型;如下图所示,从树干到树叶。例:预测工作机会是否被接受:

图片

       要考虑的工作机会从根节点开始,随后遍历决策节点,决策节点要求基于工作的属性做出选择,这些选择通过用指示决策潜在结果的分支来划分数据。决策树在叶节点终止,叶节点表示因一系列决策而采取的行动,即预期结果/终点事件。决策树算法的巨大好处是类似流程图的树形结构不一定专为学习算法内部使用。在模型被创建后,许多决策树算法以人类可读的形式输出产生的结构,这为模型如何以及为什么对干特定任务能否很好地运行提供了深人了解。

决策树的建立使用一种称为递归划分的探索法。这种方法也通常称为分而治之,因为它将数据分解成子集,然后反复分解成更小的子集,以此类推,直到当算法决定数据内的子集足够均匀或者另一种停止准则已经满足时,该过程才停止。停止的情况如下:

  • 节点上所有的案例均属于同一类

  • 没有剩余的特征来分辨案例之间的区别

  • 决策树已经达到预先定义的大小限制

为了说明决策树的建立过程,我们考虑一个简单的例子。想象你在一家好莱坞电影制片厂工作,你的角色是决定工作室是否应该推进生产由有前途的新作家投递的剧本。你通过研究一个决策树算法来预测一部有潜力的电影是否会落入十分成功、受主流欢迎和票房崩溃这三大类中。为了建立决策树,你转向工作室的档案去研究导致公司最近30个版本的电影成功和失败的因素。发现电影的估计拍摄预算和一线明星的数量与电影成功密切相关,并制作散点图如下:

图片

由上图可以看出,我们通过两个切分条件(明星数量和预算)将电影结果分为三类。如果需要我们可以继续分而治之,根据越来越具体的预算范围和名人数量划分数据,直到每一种当前被错误分类的值都分配到它自己微小的分区,被正确分类,但这种方式并不可取。过度具体的决策树并不能够更广泛的概括,为了避免过拟合,当每组中超过80%样本为同一类时,我们就停止分类。根据上述例子,我们可以构建决策树:

图片

由于在现实世界的数据包含的不仅仅是两个特征,所以决策树很快就会变得比上图更复杂,会有更多的节点、分支和叶子。

二、C5.0决策树算法

C5.0决策树算法是最常用的决策树算法,所建立的决策树一般表现的与其他先进的模型几乎一样好。让我们来研究探索下该算法是如何运作的:

图片

1. 选择最优的分割:

决策树面临的第一个挑战就是需要确定根据哪个特征进行分割。在前面的例子中,我们寻找一种方式来分割数据,以使得到的分区主要包含来源于一个单一类的案例。一个案例子集仅包含单个类的程度称为纯度,由单个类构成的任意子集都认为是纯的。C5.0算法在一个类值集合中使用熵,熵是一个从量化随机性或者无序性的信息论中借用的概念。具有高熵值的集合是非常多样化的,且提供的关于可能属于这些集合的其他项的信息很少,因为没有明显的共同性。决策树希望找到可以降低熵值的分割,最终增加组内的同质性。

通常情况下,熵以位(bit)为单位。如果只有两个可能的类,那么熵值的范围为0~1;对于n个类,熵值的范围为0~log2(n)。在每一个案例中,最小值表示样本是完全同质的,而最大值表示数据是尽可能多样化的,甚至没有组具有最小的相对多数。根据数学概念,熵定义为:

图片

我们可以考察所有可能的两个类划分的熵。如果我们知道在一个类中案例的比例为x,那么在另一个类中的比例就是1-x。使用函数curve()我们就可以绘制关于x的所有可能值的熵的图形: 

图片

结果如下图所示:

图片

如图所示,熵的峰值在x=0.5时,一个50-50分类导致最大熵值。当一个类相对于其他类越来越占据主导地位时,熵值会逐渐减少到0。

2. 信息增益:

为了使用熵来确定最优特征以进行分割,决策树计算由每个可能特征的分割所引起的同质性(均匀性)变化,该计算称为信息增益(informationgain)。对于特征F,信息增益的计算方法是分割前的数据分区(S)的熵值减去由分割产生的数据分区(S)的熵值,即  InfoGain(F)=Entropy(S1)-Entropy(S2)。

复杂之处在于,一次分割后,数据被划分到多个分区中,因此计算Entropy(S2)的函数需要考虑所有分区熵值的总和。这可以通过记录落人每一个分区的比例来计算每一个分区的权重,可以用如下的公式来表示:

图片

简单地说,从一个分割得到的总熵值就是根据案例落入分区中的比例w加权的n个分区的熵值的总和。

•信息增益越高,根据某一特征分割后创建的分组越均匀

•如果信息增益为零,那么根据该特征进行分割后的熵值就不会减少

•最大信息增益等于分割前的熵值,这意味着分割后熵值为零,即分割结果是在完全同质的分组中

3. 修剪决策树:

一棵决策树可以继续无限制地增长,选择需要分割的特征,分割成越来越小的分区直到每一个案例完全归类,或者算法中再也没有可用于分割的特征。然而,如果决策树增长得过大,将使许多决策过于具体,模型将过度拟合训练数据。而修剪一棵决策树的过程涉及减小它的大小,以使决策树能更好地推广到未知数据。

解决这个问题的一种方法就是一旦决策树达到一定数量的决策,或者当决策节点仅含有少量的案例时,我们就停止树的增长,这叫作提前停止法。该方法的一个不足之处是没有办法知道决策树是否会错过细微但很重要的模式,这种细微模式只有决策树生长到足够大时才能学习到。

另一种方法称为后剪枝决策树法,如果一棵决策树生长得太大,就修剪叶节点将决策树减小到更合适的大小。该方法通常比预剪枝法更有效,因为如果没有事先生成决策树,那么确定一棵决策树生长的最优程度是相当困难的,而事后修剪决策树肯定可以使算法发现所有重要的数据结构。

4. C5.0算法:

C5.0算法的优点之一就是它可以自动修剪,即它关注许多决策,能自动使用相当合理的默认值。该算法的总体策略就是事后修剪决策树,它先生成一个过度拟合训练数据的大决策树,然后删除对分类误差影响不大的节点和分枝。在某些情况下,整个分枝会被进一步向上移动或者被一些简单的决策所取代,这两种移植分枝的过程分别称为子树提升和子树替换。该算法在R中可通过C5.0()函数实现。

图片

三、理解分类规则

分类规则代表的是逻辑if-else语句形式的知识,可用来对无标记的案例指定一个分类。无标记的案例依据前件和后件的概念来指定,而前件和后件就构成了一个假设,即“如果这种情况发生,那么那种情况就会发生。”一个简单的规则或许会这样描述:“如果硬盘发出咔嗒声,那么硬盘出现故障了。”前件是由特征值的特定组合构成的,当规则的条件被满足时,后件描述用来指定的分类值。

规则学习经常以一种类似于决策树学习的方式被使用。对于某些任务,规则学习相对于决策树有明显的优势。与决策树不同的是决策树必须从上至下通过一系列决策应用,而规则是可以被被阅读的命题,很像事实的陈述。

规则学习分类算法使用了一种称为独立而治之的探索法。这个过程包括确定训练数据中覆盖一个案例子集的规则,然后再从剩余的数据中分离出该子集。随着规则的增加,更多的数据子集会被分离,直到整个数据集都被覆盖,不再有剩余案例。可以理解为通过创建用于标识分类值的越来越具体的规则来考虑向下挖掘数据。我们来举一个例子,来判断一个动物是不是哺乳动物,如下图所示:

图片

从上图可以看出我们对所有的训练实例进行分类,共得到了3个规则:

  • 在陆地上行走且有尾巴的动物是哺乳动物。

  • 如果动物没有皮毛,那么它就不是哺乳动物。

  • 否则,该动物是哺乳动物。

上述的例子说明规则是如何逐步分离出越来越大的数据子集,最终将所有实例分类。由于规则看起来覆盖部分数据,所以独立而治之算法又称为覆盖算法,所得到的规则称为覆盖规则。

那么如何利用算法进行规则学习呢?

这将用到1R算法,1R算法(单规则或者OneR)通过选择一个单一的规则来提高ZeroR算法的性能。虽然这看起来可能过于简单,但是它往往表现得比你预期的要好。该算法的优缺点如下:

图片

那么该算法是如何进行运行的呢?我们对上述案例进行解释:

图片

由于行走途径特征导致了更少的错误,所以1R算法将基于行走途径返回下面的“一个规则”:

•如果该动物在空中行走,那么它就不是哺乳动物

如果该动物在陆地上行走,那么它是哺乳动物

•如果该动物在海洋中行走,那么它不是哺乳动物

在发现唯一重要的规则之后,该算法就会在这里停止。

四、来自决策树的规则

分类规则也可以直接从决策树获得。从一个叶节点开始沿着树枝回到树根,将获得一系列的决策,这些决策可以组合成一个单一的规则。右图显示了如何根据决策树构建规则来预测成功的电影。

图片

沿着根节点向下到每个叶节点的路径,规则将是:

1)如果名人的数量少,那么该电影将属于票房崩溃类

2)如果名人的数量多且预算高,那么该电影将属于主流欢迎类

3)如果名人的数量多且预算低,那么该电影将属于十分成功类

然而,使用决策树生成规则的主要缺点是由此产生的规则通常比那些由规则学习算法学到的规则更复杂。决策树应用分而治之策略产生的结果是有偏差的,与规则学习产生的结果不同。另一方面,从决策树生成的规则有时候计算上会更有效。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【spring mvc】全局处理请求体和响应体

目录 说明实现效果逻辑图 实现步骤创建公共处理的请求和响应的类api接口测试前端请求响应结果 扩展Response响应格式实体ResponseCode 响应状态码RSA工具类 RequestBodyAdvice 介绍使用场景 ResponseBodyAdvice 介绍使用场景 说明 由于项目中需要进行加密传输数据提高项目安全…

Python酷库之旅-第三方库Pandas(255)

目录 一、用法精讲 1206、pandas.tseries.offsets.SemiMonthEnd.is_on_offset方法 1206-1、语法 1206-2、参数 1206-3、功能 1206-4、返回值 1206-5、说明 1206-6、用法 1206-6-1、数据准备 1206-6-2、代码示例 1206-6-3、结果输出 1207、pandas.tseries.offsets.S…

matlab conv函数和vivado fir ip对应输出什么时候相等

1)下变频中,“matlab conv函数抽取”“vivado fir ip”。 2)matlab conv函数的输入数据和输出数据的对应关系。 3)vivado fir ip的输入数据和输出数据的对应关系。 与matlab conv函数一致,如上图。 不同的是&#xff…

大数据新视界 -- Hive 数据湖集成与数据治理(下)(26 / 30)

💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

Linux获取文件属性

目录 stat函数 获取文件属性 获取文件权限 实现“head -n 文件名”命令的功能 编程实现“ls -l 文件名”功能 stat/fstat/lstat的区别? stat函数 int stat(const char *path, struct stat *buf); 功能:获取文件属性 参数: path&…

容器运行应用及Docker命令

文章目录 一、使用容器运行Nginx应用1_使用docker run命令运行Nginx应用1 观察下载容器镜像过程2 观察容器运行情况 2_访问容器中运行的Nginx服务1 确认容器IP地址2 容器网络说明3 使用curl命令访问 二、Docker命令1_Docker命令获取帮助方法2_Docker官网提供的命令说明3_docker…

网络(TCP)

目录 TCP socket API 详解 套接字有哪些类型?socket有哪些类型? 图解TCP四次握手断开连接 图解TCP数据报结构以及三次握手(非常详细) socket缓冲区以及阻塞模式详解 再谈UDP和TCP bind(): 我们的程序中对myaddr参数是这样…

如何将快捷指令添加到启动台

如何将快捷指令添加到启动台/Finder/访达(Mac) 1. 打开快捷指令创建快捷指令 示例创建了一个文件操作测试的快捷指令。 2. 右键选择添加到程序坞 鼠标放在待添加的快捷指令上。 3. 右键添加到访达 鼠标放在待添加的快捷指令上。 之后就可以在启…

4.5 TCP 报文段的首部格式

欢迎大家订阅【计算机网络】学习专栏,开启你的计算机网络学习之旅! 文章目录 前言1 TCP 报文段的基本结构2 固定部分2.1 源端口与目的端口2.2 序号2.3 确认号2.4 数据偏移2.5 保留字段2.6 控制位2.7 窗口2.8 检验和2.9 紧急指针 3 可变部分3.1 选项3.2 填…

计算机视觉——相机标定(Camera Calibration)

文章目录 1. 简介2. 原理3. 相机模型3.1 四大坐标系3.2 坐标系间的转换关系3.2.1 世界坐标系到相机坐标系3.2.2 相机坐标系到图像坐标系3.2.3 像素坐标系转换为图像坐标系3.2.4 世界坐标转换为像素坐标 3.3 畸变3.3.1 畸变类型3.3.1.1 径向畸变(Radial Distortion&a…

线程条件变量 生产者消费者模型 Linux环境 C语言实现

只能用来解决同步问题&#xff0c;且不能独立使用&#xff0c;必须配合互斥锁一起用 头文件&#xff1a;#include <pthread.h> 类型&#xff1a;pthread_cond_t PTHREAD_COND_INITIALIZER 初始化 初始化&#xff1a;int pthread_cond_init(pthread_cond_t * cond, NULL);…

Springboot美食分享平台

私信我获取源码和万字论文&#xff0c;制作不易&#xff0c;感谢点赞支持。 Springboot美食分享平台 一、 绪论 1.1 研究意义 当今社会作为一个飞速的发展社会&#xff0c;网络已经完全渗入人们的生活&#xff0c; 网络信息已成为传播的第一大媒介&#xff0c; 可以毫不夸张…

爬虫(JAVA笔记第四十期)

p.s.这是萌新自己自学总结的笔记&#xff0c;如果想学习得更透彻的话还是请去看大佬的讲解 目录 正则表达式爬虫 正则表达式 正则表达式可以用来校验字符串是否满足一定的规则&#xff0c;并用来校验数据格式的合法性&#xff1b;也可以在一段文本中查找满足要求的内容 单字符…

【实战教程】小目标检测利器:使用YOLOv8和SAHI进行视频检测,检测效果真心不错

《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…

Hbase整合Mapreduce案例1 hdfs数据上传至hbase中——wordcount

目录 整合结构准备java API 编写pom.xmlMain.javaMap.javaReduce 运行 整合结构 准备 上传hdfs data.txt数据 data.txt I am wunaiieq QAQ 123456 Who I am In todays interconnected world the role of technology cannot be overstated It has revolutionized the way we …

【机器学习】—Transformers的扩展应用:从NLP到多领域突破

好久不见&#xff01;喜欢就关注吧~ 云边有个稻草人-CSDN博客 目录 引言 一、Transformer架构解析 &#xff08;一&#xff09;、核心组件 &#xff08;二&#xff09;、架构图 二、领域扩展&#xff1a;从NLP到更多场景 1. 自然语言处理&#xff08;NLP&#xff09; 2…

AMEYA360 | 杭晶电子:晶振在AR/VR中的应用

晶振在AR/VR设备中扮演重要角色&#xff0c;为其核心电子系统提供稳定的时钟信号&#xff0c;确保设备的高性能运行。 以下是晶振在AR/VR应用中的具体作用&#xff1a; 01、图像处理与同步 1、晶振为图形处理单元(GPU)和显示芯片提供精准的时钟信号&#xff0c;支持高速图像渲染…

肝硬化腹水的症状表现

‌肝硬化腹水的症状表现多样‌&#xff1a; ‌全身症状‌ 疲倦乏力&#xff0c;体力明显下降。 皮肤干枯粗糙&#xff0c;面色灰暗黝黑&#xff0c;有时可见黄疸。 双下肢浮肿&#xff0c;甚至出现蜘蛛痣、肝掌等体征‌ ‌消化道症状‌ 食欲减退&#xff0c;常伴有恶心、呕…

困扰解决:mfc140u.dll丢失的解决方法,多种有效解决方法全解析

当电脑提示“mfc140u.dll丢失”时&#xff0c;这可能会导致某些程序无法正常运行&#xff0c;给用户带来不便。不过&#xff0c;有多种方法可以尝试解决这个问题。这篇文章将以“mfc140u.dll丢失的解决方法”为主题&#xff0c;教大家有效解决mfc140u.dll丢失。 判断是否是“mf…

汽车IVI中控开发入门及进阶(三十六):QML调用蓝牙sdk的架构

Qt/QML本身在做GUI界面工程时,除了各种界面上的按钮、图片、工具条等元素之外,最方便的就是可以通过C++实现界面各种复杂逻辑,而实现上不可避免就需要一些外部库的支持,不管是静态库.a还是动态库.so,比如蓝牙模块。 而QML/C++启动一个蓝牙协议栈SDK作为一个进程,然后启动…