决策树(第四周)

一、决策树基本原理

如下图所示,是一个用来辨别是否是猫的二分类器。输入值有三个(x1,x2,x3)=(耳朵形状,脸形状,胡须),其中x1={尖的,圆的},x2={圆脸,不是圆脸},x3={有胡须,没有胡须},这三个输入值都是1/0。输出y=1表示是猫,否则不是猫。

椭圆型称为决策节点,矩形称为叶节点,下图模型称为决策树。

对于同一个问题,可以有许多个不同的决策树模型,如下图所示。我们需要做的就是选出最优的模型,让他在交叉验证集上表现最优,这就是决策树学习算法。

1.1 学习过程

1、决定在根节点使用什么特征。根据这个特征将训练数据划分到两个分支。假如选择耳朵形状:

2、先关注左侧分支,再根据算法选择出新的决策特征(算法后面讲解)。假如选择面部形状:

注意到 左侧的四个训练数据都是猫,接下来不用再选择新特征 进行分裂,将这个节点转化成叶节点。同理右侧节点:

3、接下来看右侧分支,再利用算法决策出一个合适的特征进行分裂,假如是胡须,后面的操作同上:

 1.2 一般步骤

1、在每一个决策节点上选择出合适的特征进行分裂,这个特征必须将子集尽量最大化纯度(也就是说,这个子集当中,尽量都是猫或者都不是猫)。下图是分别将三个特征作为根节点进行分类的结果:

2、决定何时停止分裂

  • 当子集纯度达到100% (也就是说,一个子集中只有一个类别)
  • 当分类节点已经达到最大的允许深度,则停止分裂。(限制决策树深度的一个原因是确保我们的树不会变得太大和笨重,其次,通过保持树小,它不太容易过度拟合)
  • 当纯度已经低于阈值
  • 当决策节点的示例数量低于阈值

1.3 纯度purity

1.3.1 熵

熵可以用来量化纯度,越小表示纯度越高。

P1表示所有子集中猫的占有比例,下图的曲线图是熵随着P1变化的曲线图,横轴表示P1,数据范围在0-1,纵轴表示熵,数据范围在0-1。只有当P1很大或者很小时,熵会很小。

下图是熵的计算公式: 

1.4 选择拆分信息增益

在构建决策树时,我们决定在节点上拆分哪个特征,将基于哪种特征选择最能减少熵(最大化纯度)。熵的减少称为信息增益。下图是选择不同特征进行分类后,各个分支的熵:

接下来我们需要一个标准来衡量 哪种决策方式最好。如果熵很大,分裂子集也很大,这意味着子集中有很多复杂数据。但是若熵很大,子集比较小,这种情况没有前者糟糕。因此这个标准一定要兼顾到熵值和子集大小。

可以使用加权平均值来衡量,“权”表示子集在全部示例中的占有比例。然后选出最小的那个模型即可。

但是 实际当中,我们也会计算根节点的熵值,然后用根节点熵值减去分裂后加权平均熵值 ,使用这个差值来计划选择哪个特征。

我们刚刚计算的这些数字,0.28、0.03.和0.12这些被称为信息增益,衡量的是由于分裂而导致的树中熵的减少。

为什么我们不直接使用加权平均熵来衡量,而是使用更费劲的差值呢?这是因为,熵减小的程度可以用来度量何时停止分裂。如果差值太小,小于某种阈值,可以判断此时停止分裂。

1.4.1 信息增益的一般公式

如下图所示:

二、决策树的优化

4.1 独热编码one-hot

前面的示例中,耳朵形状特征只有两个 ---尖的、圆的。如果我们增加一个取值,即尖的、圆的、椭圆的。此时根据耳朵形状分裂就会变成下图所示:

这会导致 决策树变复杂。现在有一种方法one-hot来解决两个以上值的特征问题。我们删除耳朵形状这个特征,而是换成以下三个二值特征:是否是尖耳朵、是否是圆耳朵、是否是椭圆耳朵。如下图所示:

4.2 连续值特征

如果我们在特征中增加一个新的特征weight(体重),如下图所示,这个特征的取值无穷多,可以说是连续值特征。对于这样的特征该怎么处理呢?

如下图所示,横轴是体重值,纵轴y=1表示是猫,y=0表示不是猫。我们可以设置不同的体重阈值来进行分裂。例如当阈值为8时,将体重小于等于8的分裂为一个子集,体重大于8的分裂为另一个子集。然后计算这个分裂标准的信息增益来判断这个阈值是否合理。我们可以设置多个不同的阈值来进行判断,如下图所示,分别设置了阈值为8,9,13,分别计算信息增益,由此可以看出,阈值为9的效果最好。

 三、回归树

现在我们把问题换成下图所示,用耳朵形状、面部形状、胡须这三个特征来预测体重。

下图是构建的回归树, 叶节点的值是分裂子集的体重的平均值。当测试新数据时,让他像往常一样往下走,当走到叶节点的时候,用平均值来预测新测试数据的weight。

3.1 选择最佳特征

如同决策树,在根节点有三个特征允许选择进行分裂,如下图所示,那么如何评价三种分裂方式的好坏呢?

在构建回归树时,我们不是试图减少熵(对分类问题的杂质度量),而是尝试减少每 个数据子集的值Y的权重方差。我们计算左右分支的方差,然后求取加权平均值,最后选出最小的那个模型即可。

同决策树一样,我们也可以计算根节点的方差,然后用根节点方差减去分裂后加权平均方差 ,选择可以使方差最大程度减少的模型。

四、决策树集成

使用单个决策树的缺点之一 是该决策树可能对数据中的微小变化高度敏感,如下图所示。左边是针对数据做出的最佳分裂模型,右边是仅仅更改一个数据后做出的最佳模型。10个测试数据只更改了一个,造成两个决策树完全不一样。

一种解决方案是不构建一个决策树, 而是构建很多决策树,我们称之为树集成,如下图所示。当有一个新的测试数据,我们将这个数据在三个决策树上都跑一遍,每个决策树都会给出一个预测结果。这些结果相当于投票,哪个票数最多,最终就预测哪个。比如说,这里的三颗决策树,两个预测是猫,那么最终结果就是猫。

我们使用树集合的原因是通过拥有大量决策树并让它们投票,它使整体算法对任何一棵树可能正在做的事情不太敏感,因为它只能获得三分之一的投票, 可以使整体算法更加健壮。

4.1 替换采样

如何构建决策树集合呢?可以使用替换采样的方法。替换采样的意思就是,从训练数据(数量为M)中随机抽取一个记录下来,把这个数据再放回去,再进行随机抽取。。。。。直到达到M个数据集(可能有重复的数据,不过这都是正常的)。这样是第一个数据集,利用这个数据集构建第一个决策树。然后用同样的方法,构建第二、第三等决策树。

构建决策树集合时,假设构建B棵决策树。事实证明将B设置得更大不会损害性能,但超过某个点后,最终会得到收益递减的结果,而且当B远大于1000左右时,它实际上并没有变得更好。

4.2 随机森林

即使使用这种带有替换过程的采样,有时最终还是会在根节点处始终使用相同的拆分,而在其余分裂节点附近使用非常相似的拆分。这种情况在小样示例中不明显,但是训练数据大的情况下会比较严重。因此,需要对算法再进行一次修改,以进一步尝试随机化每 个分裂节点的特征选择,这会使树集彼此之间变得更加不同,这样的话,当您投票给他们时,您最终会得到更准确的预测。

通常这样做的方法是在每个分裂节点上选择一个特征以用于切割 (如果最终特征可用)。选择K个特征作为允许的特征,然后从这K个特征中选择具有最高信息增益的特征作为使用分割的特征选择。K 值的典型选择是 N的平方根,这种技术往往更多地用于具有大量特征的较大问题。注意k是从N个特征中随机抽取的。

4.3 XGBoost

在4.1中,构建决策树集成时,每次都从测试数据中,等概率(1/M的概率大小)抽取M个数据来构建决策树。XGBoost算法在此基础上继续改进,除了第一棵决策树和之前一样之外,剩余决策树都不是等概率抽取数据,而是更大概率能选择先前训练的树表现不佳的错误分类样本(这种方法称为“刻意练习”)。事实证明它可以帮助学习算法更快地学习,做得更好。因为后面的决策树把学习的重点放在了错误分类的数据上。

下图是第一棵决策树的构建,构建成功之后,对原始训练数据进行第一次预测,如下图红框的表格。我们在这个循环中第二次要做的是使用替换采样来生成另一 个包含十个例子的训练集。但是每次我们从这10个中选择一个示例时,都会有更高的机会从这三个错误分类的示例中选择。

XGBoost算法还有很多优点,是一个不错的选择。用XGBoost算法实现分类和回归的简单示例如下图所示。XGBoost算法的实现细节比较麻烦,建议直接调用开源库。

五、什么时候选择决策树

决策树和神经网路都是非常强大,非常有效的算法,什么时候选择决策树?什么时候选择神经网络呢?

决策树和树集成通常适用于表格数据,也称为结构化数据。这意味着如果您的数据集看起来像一个巨大的电子表格, 那么决策树就值得考虑。他根本不适合于非结构优化数据。另一个优点是,速度快。

神经网络往往更适合处理非结构化数据(图像、文本、音频)任务。但是对于结构化数据神经网络也非常擅长。

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

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

相关文章

R语言实现Lasso回归

一、Lasso回归 Lasso 回归(Least Absolute Shrinkage and Selection Operator Regression)是一种用于线性回归和特征选择的统计方法。它在回归问题中加入了L1正则化项,有助于解决多重共线性(多个特征高度相关)和特征选…

什么是轻量应用服务器?可以从亚马逊云科技的优势入手了解

什么是轻量应用服务器? 随着如今各行各业对云计算的需求越来越多,云服务器也被越来越多的企业所广泛采用。其中,轻量应用服务器是一种简单、高效、可靠的云计算服务,能够为开发人员、企业和个人提供轻量级的虚拟专用服务器&#x…

【深入剖析K8s】容器技术基础(一):从进程开始说起

容器其实是一种特殊的进程而已。 可执行镜像 为了能够让这些代码正常运行’我们往往还要给它提供数据’比如我们这个加法程序所需要的输人文件这些数据加上代码本身的二进制文件放在磁盘上’就是我们平常所说的一个程序,也叫代码的可执行镜像(executablejmage&…

PostgreSQL+patroni+etcd+haproxy+keepalived高可用

PostgreSQLpatronietcdhaproxykeepalived 高可用架构 部署环境 部署postgresql-15 一主二从: role主机组件主库 node203 192.168.56.203 pg15.5 Patroni、Etcd,haproxy、keepalived 从库 node204 192.168.56.204 pg15.5 Patroni、Etcd,ha…

机器人开发的选择

喷涂机器人 码垛机器人 纸箱码垛机器人 焊接机器人 跳舞机器人 管道清理机器人 工地巡检机器人 点餐机器人 化工巡检机器人 装箱机器人 安防巡检机器人 迎宾机器人好像有点像软银那个 污水管道检测机器人 大酒店用扫地机器人 家用扫地机器人 工厂用(…

免费不限字数的文本转语音AI配音工具,无需安装

上周给大家分享了AI绘本故事制作,很多小伙伴让我,推荐一款免费的AI配音,音色质量富有情感语调,而且手机上就能用的文本转语音工具。 OK,那么今天就给小伙伴们推荐一款我经常自用的AI配音工具,无需安装下载&…

防火墙命令行基础配置实验(H3C模拟器)

嘿,这里是目录! ⭐ H3C模拟器资源链接1. 实验示意图2. 要求3. 当前配置3.1 PC配置3.2 FW配置(防火墙)[^7][^8]3.2.1 FW1配置3.2.2 FW2配置 3.3 R配置3.3.1 R1配置3.3.2 R2配置 3.4 SW配置3.4.1 SW1配置3.4.2 SW2配置3.4.3 SW3配置…

blender 3D眼球结构

角膜(Cornea):眼球的前部,透明的曲面,负责折射光线。虹膜(Iris):眼睛的颜色部分,控制瞳孔大小以调整进入眼睛的光量。瞳孔(Pupil):虹膜…

offer 选择难?说说我的 2 个思考

大家好,我是鱼皮。秋招仍在进行中,随着越来越多的公司开奖,最近 编程导航星球 的小伙伴们也陆续发来了 offer 报喜: 图片 图片 但也有一部分小伙伴陷入了 “甜蜜的烦恼”,拿了几个 offer 却不知道怎么选择。 offer 选择…

【刷题宝典NO.4】

目录 公交站间的距离 生命游戏 公交站间的距离 https://leetcode.cn/problems/distance-between-bus-stops/ 环形公交路线上有 n 个站,按次序从 0 到 n - 1 进行编号。我们已知每一对相邻公交站之间的距离,distance[i] 表示编号为 i 的车站和编号为 …

Pure-Pursuit 跟踪五次多项式轨迹

Pure-Pursuit 跟踪五次多项式轨迹 考虑双移线轨迹 X 轴方向位移较大,机械楼停车场长度无法满足 100 ~ 120 m,因此采用五次多项式进行轨迹规划,在轨迹跟踪部分也能水一些内容 调整 double_lane.cpp 为 ref_lane.cpp,结合 FrenetP…

OpenFeign入门

OpenFeign是Spring Cloud OpenFeign,是Spring Cloud团队开发的基于Feign的框架 1、OpenFeign功能升级 OpenFeign在Feign的基础上提供了以下增强和扩展功能 (1)便于集成Spring Cloud组件:OpenFeign与Spring Cloud其他组件&#…

float和double(浮点型数据)在内存中的储存方法

作者:元清加油 主页:主页 编译环境:visual studio 2022 (x86) 相信大家都知道数据在内存中是以二进制储存的 整数的储存方法是首位是符号位,后面便是数值位 那么浮点数在内存中是怎么储存的呢?我们先来看一个例子&am…

C语言-内存函数详解

文章目录 1. memcpy使用和模拟实现2. memmove使用和模拟实现3. memset函数的使用4. memcmp函数的使用 1. memcpy使用和模拟实现 返回类型和参数: void * memcpy ( void * destination, const void * source, size_t num );1.函数memcpy从source的位置开始向后复制…

叠加原理(superposition principle)、线性系统

叠加原理(superposition principle):指对一个系统而言,两个或多个输入产生的输出,等于这几个输入单独引起的输出的和,即输入的叠加等于各输入单独引起的输出的叠加。 线性系统:一个系统&#x…

Java毕业设计 SpringBoot 车辆充电桩系统

Java毕业设计 SpringBoot 车辆充电桩系统 SpringBoot 车辆充电桩系统 功能介绍 首页 图片轮播 登录注册 充电桩展示 搜索充电桩 充电桩报修 充电常识 个人中心 我的收藏 后台管理 登录 首页 个人中心 维修员管理 用户管理 电桩类别管理 充电桩管理 充电桩报修管理 维修回复管…

B树与B+树的对比

B树: m阶B树的核心特性: 树中每个节点至多有m棵子树,即至多含有m-1个关键字根节点的子树数属于[2, m],关键字数属于[1, m-1],其他节点的子树数属于 [ ⌈ m 2 ⌉ , m ] [\lceil \frac{m}{2}\rceil, m] [⌈2m​⌉,m]&am…

机器学习:攻击方法FGSM系列

任务 FGSM I-FGSM MI-FGSM Ensemble Attack 攻击评价指标 准确率越低表明攻击越好 数据 预训练模型 BaseLine 实践

Java、PHP、C语言经典项目源码合集推荐(一)

(一).Java智慧校园系统源码、 智慧学校源码、 智慧校园平台源码、智慧校园电子班牌系统源码、中小学智慧校园系统源码、 原生微信小程序端源码、电子班牌系统源码 项目技术栈 1、使用springboot框架Javavue2 2、数据库MySQL5.7 3、移动端小程序使用小程…

UWB实时定位系统源码,历史活动轨迹显示,视频联动,电子围栏

UWB实时定位系统源码,工厂企业人员安全定位,UWB源码 行业背景 工业企业多存在很多有毒有害、高危高压等生产环境,带电设备众多,容易发生安全事故;人员只能凭记忆遵守各项生产安全规范,如某些危险区域范围、…