大数据-201 数据挖掘 机器学习理论 - 决策树 局部最优 剪枝 分裂 二叉分裂

点一下关注吧!!!非常感谢!!持续更新!!!

目前已经更新到了:

  • Hadoop(已更完)
  • HDFS(已更完)
  • MapReduce(已更完)
  • Hive(已更完)
  • Flume(已更完)
  • Sqoop(已更完)
  • Zookeeper(已更完)
  • HBase(已更完)
  • Redis (已更完)
  • Kafka(已更完)
  • Spark(已更完)
  • Flink(已更完)
  • ClickHouse(已更完)
  • Kudu(已更完)
  • Druid(已更完)
  • Kylin(已更完)
  • Elasticsearch(已更完)
  • DataX(已更完)
  • Tez(已更完)
  • 数据挖掘(正在更新…)

章节内容

上节我们完成了如下的内容:

  • 决策树 数据集划分
  • 决策树生成 ID3 C4.5

在这里插入图片描述

决策树

决策树是一种基于树状结构的监督学习模型,常用于分类和回归任务。它的基本思想是通过一系列问题的分层次判断,将数据分割成越来越小的子集,直到达到预期的目标(如纯度较高的叶子节点,或预测值的误差足够小)。决策树的节点表示判断条件,分支表示不同的条件结果,最终的叶子节点对应具体的分类结果或预测值。

局部最优

在构建决策树的过程中,通常采用贪心算法,即在每一步选择当前条件下最佳的分割方式,而不考虑全局最优。这个方法被称为局部最优,因为它在每个步骤只关注当前的最佳决策,并不一定能保证得到整体最佳的结果。虽然这种方法可能导致最终的决策树不是最优的,但它在实际应用中计算效率较高,且在很多情况下能够得到合理的结果。

剪枝

剪枝是一种用于防止决策树过拟合的方法。在决策树的构建过程中,过度的分裂会导致模型对训练数据过度拟合,进而降低对新数据的泛化能力。剪枝的目的是通过去除一些不必要的分支,简化决策树结构,从而提升模型的泛化能力。常见的剪枝方法有预剪枝(pre-pruning)和后剪枝(post-pruning)。预剪枝在构建决策树时提前停止某些分裂,而后剪枝则是在树构建完成后再去掉一些不重要的分支。

分裂

分裂是决策树构建中的一个核心过程,指的是从根节点开始,根据某个特征的值,将数据划分到不同的子节点中。通过不断地分裂,决策树逐渐将数据集划分成更小的子集,使得每个子集内部的样本更具一致性。在分类任务中,分裂的目标是最大化信息增益或基尼系数的变化,在回归任务中则常采用均方误差或方差作为指标。分裂的过程直到达到设定的停止条件(如节点纯度、树的深度限制等)才会停止。

二叉分裂

二叉分裂是一种特定的分裂方式,每次只将节点分成两个子节点,形成一个二叉树结构。决策树可以通过二叉分裂的方式构建,其中每次分裂时,将样本数据分成两个互斥的子集。这种分裂方式的优点是结构简单,且在很多实现中效率较高。许多决策树算法(如CART算法)就是基于二叉分裂构建的。这种结构的决策树在每个节点上只能有两个分支,即「是」或「否」,从而确保树结构的简洁性。

修改局部最优条件

  • 以信息增益作为划分训练数据集的特征,存在偏向于选择取值较多的特征的问题。
  • 使用信息增益比(information gain ratio)可以对这一问题进行矫正

在这里插入图片描述
称为属性 a 的“固有值”(intrinsic value)
属性 a 的可能取值越多(即 V 越大),则 IV(a)的值通常会越大。
IV 值会随着叶节点上样本量的变小而逐渐变大,也就是说一个特征中如果标签分类太多,每个叶子上的 IV 值就会非常大。
值得注意的是,增益率准则对可取值数目较少的属性有所偏好,因此,C4.5 算法并不是直接选择增益率最大的候选划分属性,而是使用了一种启发式:先从候选划分属性中找出信息增益高于平均水平的属性,再从中选择增益率最高的。

连续变量处理手段

在 C4.5 中,同样还增加了针对连续变量的处理手段。如果输入特征字段是连续型变量,则算法首先会对这一列数进行从小到大的排序,然后选取相邻的两个数的中间数作为切分数据集的备选点,若一个连续变量有 N 个值,则在 C4.5 的处理过程中将产生 N-1 个备选切分点,并且每个切分点都代表着一种二叉树的切分方案,例如:
在这里插入图片描述
这里需要注意的是,此时连续变量的处理并非是将其转换为一个拥有 N-1 个分类水平的分类变量,而是将其转换为了 N-1 个二分方案,而在进行了下一次的切分过程中,在 N-1 个方案都要单独带入考虑,其中每一个切分方案和一个离散变量的地位均相同(一个离散变量就是一个单独的多路切分方案)。
例如如下数据集,数据集中的只有两个字段,第一行代表年龄,是特征变量,第二行代表性别,是目标字段,则对年龄这一连续变量的切分方案如图所示:
在这里插入图片描述
从上述能够看出,在对于包含连续变量的数据集进行树模型构建的过程中要消耗更多的运算资源。但与此同时,我们也会发现,当连续变量的某中间点参与到决策的二分过程中,往往代表该点对于最终分类结果有较大影响,这也为我们连续变量的分箱压缩提供了指导性意见。

例如上述案例,若要对 Age 列进行压缩,则可考虑使用 36.5 对其进行分箱,则分箱结果对于性别这一目标字段仍然具有较好的分类效果,这也是决策树最常见的用途之一,也是最重要的模型指导分箱的方法。

决策树的拟合度优化

在实际操作中,我们判断模型的是否拟合往往是从模型训练误差和泛化误差,二者结合使用就能判断模型是否存在过拟合现象。虽然我们之前举例时并没有对数据集进行切分,但任何有监督学习算法建模过程中都需要进行训练集和测试集的划分,决策树也不例外,进而我们可用交叉验证计算训练误差和泛化误差,进而判断决策树是否存在过拟合。
这是一套通用的判断有监督学习算法是否过拟合的方法,同时通用的方法中还有更高级的方法。
但对于决策树而言,有一套决策树独有的防止过拟合的解决方案–剪枝。

决策树剪枝

所谓剪枝是指在决策树中去除部分叶节点,剪枝(Pruning)主要用来防止过拟合,对于一般的数据集如果总是追求纯的叶节点,或者观测数较小的叶节点,很容易使得树过于庞杂,尤其是存在可以反复使用的连续变量的时候,此时就需要主动去掉一些分支来降低过拟合的风险。

常见的剪枝策略有“预剪枝”(Pre-Pruning)和“后剪枝”(Post-Purning)

  • 预剪枝:在决策树生成的过程中,对每个节点在划分前先进行估计,如果当前的节点划分不能带来决策树泛化性能(预测性能)的提升,则停止划分并且当前节点标记为叶节点。
  • 后剪枝:先训练生成一颗完整的树,自底向上对非叶节点进行考察,如果该节点对应的子树替换为叶节点能带来决策树泛化能力的提升,则该子树替换为叶节点。

在这里插入图片描述

分裂准则

二叉递归划分:条件成立向左,反之向右

  • 对于连续变量:条件是属性小于等于最优分裂点
  • 对于分类变量:条件是属性属于若干类

二叉分裂优点

相比多路分裂导致数据碎片化的速度慢,允许在一个属性上重复分裂,即可以在一个属性上产生足够多的分裂。两路分裂带来的树预测性能提升足以弥补其相应的树易读性损失。

对于属性不同的被预测变量 Y 分裂准则不同:

  • 分类树:Gini 准则,与之前的信息增益很类似,Gini 系数度量一个节点的不纯度。
  • 回归树:一种常见的分割标准是偏差减少(Stand Deviation Reduction,SDR),类似于最小均方差 LS(Least Squares 预测错误的平方和)准则。

利用测试集进行剪枝

简单讨论 CART 算法剪枝过程,该过程也是测试集用于修正模型的最佳体现。例如,在如下训练集中训练得到的模型,黑色数字表示训练集上的分类情况,红色数字表示模型作用于验证集上的分类情况。

在这里插入图片描述
则 CART 算法利用验证集剪枝的过程如下:

  • 判断每个叶节点在验证集上的错误率
  • 节点 4 的错误率:e(4) = 1/3
  • 节点 5 的错误率 e(5) = 1
  • 节点 6 的错误率 e(6) = 1
  • 节点 7 的错误率为 e(7) = 4 / 9

计算节点总加权平均错误率并和父节点进行比较,加权方法就是乘以该节点样本数量占父节点样本总量的百分比(测试集):

如节点 2 的错误率为 e(2)=1/4,而节点 4 和节点 5 的加权平均错误率为 e(4) * 3/4 + e(5) * 1/4 = 2/4,因此子节点错误率更高,考虑剪枝。
节点 3 的错误率为 e(3) = 4/10,而 e(6)* 1/10 + e(7)*9/10 = 5/10,因此考虑剪枝。
节点 2 和节点 3 的加权平均错误率 e(2) * 4/14 + e(3) * 10/14 = 5/14,比父节点(节点 1)的错误率 e(1) = 7/14 要小,因此保留该节点,停止剪枝。

可以看出,CART 算法剪枝过程更易理解也更便于操作,同时我们也能看到对于建立模型的算法而言,测试集不仅能够对模型准确率进行评估,同时还能起到修正优化模型的作用。

测试集和验证集

对于大多数模型而言,测试集实际上的作用就是用来修正模型,为了提高修正的准确率,我们也可以采用交叉验证的方法,反复判别模型修改条件(如是否要剪枝),并设置模型修改出发条件(如多数验证情况需要修改则对其进行修改),从而提高模型优化的可靠性。

而除了训练集和测试集之外,我们还尝尝会划分一个验证集,验证集数据不参与建模叶不参与模型修改和优化,只用于模型最终优化后的模型效力。

而训练集、测试集和验证集的划分通常遵照 6:2:2 的比例进行划分,当然也可以根据实际需求适当调整划分比例,但无论如何,测试集和验证集数据量都不宜过多也不宜过少,该二者数据集数据均不参与建模,若占比太多,则会对模型的构建过程造成较大的影响(欠拟合),而若划分数据过少,训练集数据量较大,则又可能造成过拟合,数据集的划分也是影响拟合度的重要因素。

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

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

相关文章

计算机网络-总线型以太网(ethernet)-知识点小结

广域网与局域网区分: 广域网: 广域网不使用局域网技术, 传输介质 主要是光纤和电话线 常见广域网技术 综合业务数字网(ISDN)、 帧中继(Frame Relay)、 异步传输模式 局域网: 以太网--ethernet 简介: 是一种总线型局域网技术&#…

透明加密技术是什么?透明加密技术的原理与应用实践(内含代表性软件分享)

触目惊心!10大典型间谍案例回顾 张某离职前搜集大量文件资料,甚至拆开电脑主机拷贝文件 私自存有5200份文件资料 其中标注绝密级的59份 机密级848份 秘密级541份 在当今这个信息化高速发展的时代,透明加密技术已不容忽视。那么&#xff…

C/C++ 每日一练:二叉树的先序遍历

二叉树 binary tree 定义 二叉树是一种树状数据结构,非线性数据结构,代表“祖先”与“后代”之间的派生关系,体现了“一分为二”的分治逻辑。与链表类似,二叉树的基本单元是节点,二叉树的每个节点包含三个主要部分&am…

OpenCV开发笔记(八十二):两图拼接使用渐进色蒙版场景过渡缝隙

若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/143432922 长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV…

Unity程序化生成地形

制作地形: 绘制方块逐个绘制方块并加噪波高度删除Gizmos和逐个绘制 1.draw quad using System.Collections; using System.Collections.Generic; using UnityEngine;[RequireComponent(typeof(MeshFilter))] public class mesh_generator : MonoBehaviour {Mesh m…

基于MoviNet检测视频中危险暴力行为

项目源码获取方式见文章末尾! 600多个深度学习项目资料,快来加入社群一起学习吧。 《------往期经典推荐------》 项目名称 1.【Faster & Mask R-CNN模型实现啤酒瓶瑕疵检测】 2.【卫星图像道路检测DeepLabV3Plus模型】 3.【GAN模型实现二次元头像生…

Java项目实战II基于Java+Spring Boot+MySQL的桂林旅游景点导游平台(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 基于Java、…

每日读则推(十四)——Meta Movie Gen: the most advanced media foundation models to-date

premiere n.首映,首次公演 v.首次公演(戏剧、音乐、电影) a.首要的,最早的 Today we’re premiering Meta Movie Gen: the most advanced media foundation models to-date. 迄今,到现在为止 …

整数越界详解

目录 一、整数类型的范围 二、整数越界的原因 三、整数越界的示例 1.算术运算导致的整数越界 2.位运算导致的整数越界 3.数据类型转换导致的整数越界 四、整数越界的解决方法 在编程中,整数越界是一个需要特别注意的问题。当整数的计算结果超出了其所能表…

深度学习基础知识-编解码结构理论超详细讲解

编解码结构(Encoder-Decoder)是一种应用广泛且高效的神经网络架构,最早用于序列到序列(Seq2Seq)任务,如机器翻译、图像生成、文本生成等。随着深度学习的发展,编解码结构不断演变出多种模型变体…

Yolo系列 Yolo v4简介

目录 简介 YOLOv4的特点 1、数据增强:马赛克数据增强(Mosaic Data Augmentation) 2、 防止过拟合的方法DropBlock 3、标签平滑(Label Smoothing) 4、损失函数 :GIOU损失、DIOU损失、CIOU损失 &#x…

C语言的数组地址 数组的遍历与练习

1.int main(void) { int a[5] { 10,20,30,40,50 };//数组间的元素地址相连的 int* p; printf("%d\n", &a[0]); printf("%d\n", &a[1]); printf("%d\n", &a[2]); printf("%d\n", &a[3]); …

Python实现SSA智能麻雀搜索算法优化XGBoost-MLP回归模型项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后关注获取。 1.项目背景 随着大数据技术的迅猛发展,机器学习模型在各行各业的应用越来越广泛。特别是在回归任务…

nginx 设置多个代理服务器(nginx多代理)

修改配置文件 nginx.conf 修改前的内容,如下: worker_processes 1;events {worker_connections 1024; }http {include mime.types;default_type application/octet-stream;sendfile on;keepalive_timeout 65;server {listen 80…

如何找到网上爆款内容,快速复制扩大品牌声量

社媒内容爆款复制是现代营销中的一个重要策略,它对于提升品牌声量、曝光度和知名度具有显著效果。 首先什么是爆款? 爆款内容指的是在社交媒体或其他在线平台上迅速获得大量关注、分享和讨论的内容。 准确、及时找到这部分品牌相关的爆款内容&#xf…

2024年10月文章一览

2024年10月编程人总共更新了21篇文章: 1.2024年9月文章一览 2.《Programming from the Ground Up》阅读笔记:p147-p180 3.《Programming from the Ground Up》阅读笔记:p181-p216 4.《Programming from the Ground Up》阅读笔记&#xff…

Git连接码云-保姆级教学(连接Gitee失败的解决)

Git介绍 码云连接 一、Git介绍 二、Git的工作机制 下载链接:Git - 下载软件包 三、使用步骤 创建一个wss的文件夹,作为‘工作空间’ 四、连接码云账号 五、连接Gitee失败的解决方法 一、Git介绍 Git是一个免费的、开源的分布式版本控制…

KINGBASE部署

环境:x86_64 系统:centos7.9 数据库–版本:KingbaseES_V008R006C008B0014_Lin64_install 授权文件–版本:V008R006-license-企业版-90天 一 前置要求 1.1. 硬件环境要求 KingbaseES支持通用X86_64、龙芯、飞腾、鲲鹏等国产C…

Java并发常见面试题总结(下)

Map(重要) HashMap 和 Hashtable 的区别 线程是否安全: HashMap 是非线程安全的,Hashtable 是线程安全的,因为 Hashtable 内部的方法基本都经过synchronized 修饰。(如果你要保证线程安全的话就使用 ConcurrentHashMa…