机器学习决策树原理详解

一、引言

在当今蓬勃发展的人工智能与大数据领域,大模型正以前所未有的影响力改变着众多行业的格局。而决策树作为机器学习算法家族中的经典成员,以其简洁直观的特点和广泛的适用性,不仅能独立解决诸多实际问题,更是诸多先进大模型构建的重要基石。深入理解决策树的原理,犹如掌握了开启机器学习大门的一把关键钥匙,对于后续进阶学习和实践应用意义重大。

二、决策树的基本概念

决策树本质上是一种基于树形结构的预测模型,它模拟了人类做决策的过程,通过对输入数据的一系列特征条件进行层层判断,最终得出相应的决策结果。形象地说,它就好比是一个精心绘制的流程图,从根节点出发,沿着不同分支,依据不同的特征取值情况不断进行筛选,直至抵达叶子节点,而叶子节点所代表的便是分类任务中的具体类别或者回归任务中的预测数值。
例如,考虑一个简单的判断动物种类的场景,我们可以依据动物的一些外观特征来构建决策树。假如有特征 “是否有羽毛”“是否会飞”“是否有四条腿” 等,从根节点开始,如果动物 “有羽毛”,就沿着对应的分支继续判断 “是否会飞” 等特征,经过这样一系列的判断后,最终确定动物属于鸟类、哺乳动物或是爬行动物等具体类别。

三、决策树的构建过程

(一)特征选择

特征选择是构建决策树的核心环节,其目的是确定在每个节点上依据哪个特征来对数据集进行划分,以便让决策树能够高效、准确地进行分类或回归。常用的特征选择标准有信息增益、信息增益率以及基尼指数等,下面详细介绍它们的计算方法和应用场景。

以判断水果是苹果还是橙子为例,假设现在有另一个特征 “颜色”,其取值可能为 “红色”“橙色”“黄色”。如果 “颜色” 为 “红色” 的子集里有 50 个苹果和 10 个橙子,“颜色” 为 “橙色” 的子集里有 10 个苹果和 30 个橙子,“颜色” 为 “黄色” 的子集里有 0 个苹果和 0 个橙子。分别计算各子集的熵以及根据上述公式计算基于 “颜色” 特征的信息增益,选择信息增益最大的特征作为当前节点的划分依据。

在使用基尼指数进行特征选择时,会计算每个特征划分后子集的基尼指数,选择使划分后基尼指数最小的特征作为节点划分依据,这样可以使得划分后的数据集更加 “纯净”,即类别更加单一化。

(二)决策树生成

在确定了特征选择的标准后,就可以开始构建决策树了,具体步骤如下:
1、对于根节点,计算所有可用特征的相应指标(如信息增益、信息增益率或基尼指数),然后依据所选用的特征选择标准,选出最优的特征进行节点划分,将整个数据集按照该特征的不同取值分成若干个子集。例如,在判断水果种类的案例中,如果以 “颜色” 作为根节点的划分特征,且 “颜色” 有 “红色”“橙色”“黄色” 三种取值,那么数据集就会被相应地划分为三个子集。
2、针对每个划分出来的子集,重复上述步骤,即再次计算各子集内可用特征的指标,选择最优特征继续划分,只要子集内的样本不满足预先设定的停止条件(下面会详细介绍停止条件),就持续构建子树。
3、当某个子集内的所有样本都属于同一类别(分类任务),或者在回归任务中满足一定的误差要求等停止条件时,该子集就被标记为叶子节点,不再继续进行划分,至此,一棵决策树就逐步生成了。

(三)停止条件

为了防止决策树过度生长,避免出现过拟合问题,需要设置合理的停止条件来终止决策树的构建过程,常见的停止条件如下:
样本数量限制:当节点中的样本个数小于某个设定的阈值时,例如规定一个节点内的样本数不能少于 5 个。如果继续划分,由于样本过少,很可能导致划分后的子集缺乏代表性,无法准确学习到有效的分类或回归规律,所以此时将该节点标记为叶子节点。
类别纯度要求:在分类任务中,若节点中的样本类别纯度已经足够高,比如通过熵、基尼指数等指标衡量,发现样本几乎都属于同一类别了(例如基尼指数小于某个极小值,如 0.05),就意味着该节点已经具有很高的确定性,无需再进行划分,可将其作为叶子节点处理。
树的深度限制:预先设定一个最大深度值,比如限定决策树的深度不能超过 10 层。因为随着树深度的不断增加,模型对训练数据的拟合会越来越精细,但也更容易记住训练数据中的噪声和细节,从而导致在新的测试数据上泛化能力变差,出现过拟合现象,所以限制树的深度有助于保持模型的泛化性能。

四、决策树的剪枝策略

决策树在构建过程中由于不断地对数据进行细分,很容易出现过拟合问题,也就是对训练数据的拟合效果非常好,但在面对未曾见过的新数据时,预测准确性却大打折扣。为了应对这一问题,需要对生成的决策树进行剪枝操作,常见的剪枝策略有预剪枝和后剪枝两种。

(一)预剪枝

预剪枝是在决策树构建的过程中就提前进行剪枝操作,即在节点划分之前,根据当前节点的一些情况以及预先设定的停止条件等,判断是否需要继续划分该节点来生长树。
例如,在构建判断水果种类的决策树时,按照正常的构建流程,可能会根据 “形状” 特征对某个节点进一步划分。但如果采用预剪枝策略,在划分前发现当前节点的样本数量已经很少了(比如小于设定的阈值 5 个),或者通过验证集验证发现继续划分该节点后在验证集上的准确率并没有提升,反而可能下降了,那么就决定不再对该节点进行划分,直接将其标记为叶子节点。
预剪枝的优点在于能够显著减少后续计算量和训练时间,并且在一定程度上有效避免了过拟合现象的发生。然而,它也存在一定的局限性,由于过早地停止了树的生长,可能会导致模型对数据的学习不够充分,出现欠拟合情况,使得模型的泛化能力无法达到最优状态。

(二)后剪枝

后剪枝则是在决策树完全按照正常流程生长完毕之后,再从叶子节点开始,自下而上地对树进行剪枝操作。它通过比较剪枝前后模型在验证集上的性能表现(如准确率、误差等指标)来决定是否要将某个子树替换为一个叶子节点。
比如,对于已经生成的一棵判断水果种类的完整决策树,从最底层的叶子节点开始,考虑将某个叶子节点及其对应的子树替换为一个单一的叶子节点,然后在验证集上对比剪枝前后的准确率。如果发现剪枝后的准确率没有明显下降,甚至还有所提升,那就说明这个子树是可以被剪掉的,通过这样逐步向上的操作,对整棵树进行优化。
后剪枝的优势在于通常能够获得更好的泛化性能,使决策树在新数据上有更稳定、准确的表现。不过,其缺点是计算成本相对较高,毕竟需要先构建出完整的决策树,再花费额外的计算资源去评估和执行剪枝操作。

五、决策树的优缺点

(一)优点

直观可解释性强:决策树模型呈现出清晰的树形结构,其决策过程一目了然,很容易理解和向他人解释。例如在医疗诊断领域,医生可以通过查看决策树了解模型是基于哪些症状特征来判断患者是否患有某种疾病的,这对于模型的可信度和实际应用推广非常重要。
数据适应性广:它能够处理离散型和连续型的数据,不需要对数据进行过于复杂的预处理就能直接应用于模型构建。比如在分析客户购买行为时,客户的年龄(连续型数据)、性别(离散型数据)等不同类型的数据都可以作为特征纳入决策树模型中进行分析。
对异常值和缺失值相对不敏感:相较于一些其他机器学习算法,决策树在数据存在一定的异常值或者部分特征值缺失的情况下,依然能够正常进行训练和预测。例如在分析电商用户的购买数据时,偶尔出现的个别异常购买金额或者部分用户某些信息未填写完整等情况,并不会对决策树的构建和使用造成太大的阻碍。

(二)缺点

易出现过拟合:决策树在构建过程中,如果不加以适当控制,很容易生长得过于复杂,对训练数据过度拟合,导致在新的测试数据上表现不佳。例如在预测股票价格走势时,如果决策树过于追求对历史数据的精确拟合,那么在面对未来新的市场情况时,就很难做出准确的预测。
对类别不平衡数据处理欠佳:当数据集中不同类别样本数量相差悬殊时(如正类样本占比极少,负类样本占比极大),决策树可能会偏向多数类,使得对少数类的预测效果较差。比如在检测网络诈骗行为的场景中,如果正常交易数据远远多于诈骗交易数据,决策树可能会更多地将样本判断为正常交易,而忽略了对诈骗交易的准确识别。
预测精度相对有限:一般情况下,相较于一些复杂的集成模型(如随机森林、梯度提升树等),单棵决策树的预测精度会稍低一些。不过,决策树常常作为这些集成模型的基础组成部分,通过集成多个决策树的方式来提升整体的预测性能。

六、总结

决策树作为一种经典且极具实用价值的机器学习算法,其原理涵盖了从特征选择、树的构建到剪枝等多个方面,每个环节都紧密相连,共同影响着模型的性能和表现。虽然它存在一定的局限性,但通过合理运用其优点,并结合实际案例进行针对性的优化,能够在众多领域有效地解决分类和回归等实际问题,同时也为后续学习和应用更复杂的大模型提供了重要的思路和基础支撑。希望通过本文全面且详细的介绍,读者能对决策树原理及应用有更深入透彻的理解,从而在自己的技术实践中更好地运用这一算法。

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

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

相关文章

Kafka怎么发送JAVA对象并在消费者端解析出JAVA对象--示例

1、在pom.xml中加入依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-stream-kafka</artifactId><version>3.1.6</version></dependency> 2、配置application.yml 加入Kafk…

物品识别 树莓派 5 YOLO v5 v8 v10 11 计算机视觉

0. 要实现的效果 让树莓派可以识别身边的一些物品&#xff0c;比如电脑&#xff0c;鼠标&#xff0c;键盘&#xff0c;杯子&#xff0c;行李箱&#xff0c;双肩包&#xff0c;床&#xff0c;椅子等 1. 硬件设备 树莓派 5 raspberrypi.com/products/raspberry-pi-5/树莓派官方摄…

大数据-245 离线数仓 - 电商分析 缓慢变化维 与 拉链表 SCD Slowly Changing Dimensions

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; Java篇开始了&#xff01; 目前开始更新 MyBatis&#xff0c;一起深入浅出&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff0…

【LeetCode: 160. 相交链表 + 链表】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

从爱尔兰歌曲到莎士比亚:LSTM文本生成模型的优化之旅

上一篇&#xff1a;《再用RNN神经网络架构设计生成式语言模型》 序言&#xff1a;本文探讨了如何通过多种方法改进模型的输出&#xff0c;包括扩展数据集、调整模型架构、优化训练数据的窗口设置&#xff0c;以及采用字符级编码。这些方法旨在提高生成文本的准确性和合理性&am…

51c大模型~合集86

我自己的原文哦~ https://blog.51cto.com/whaosoft/12772867 #MILP-StuDio 拆解高复杂运筹问题的砖石&#xff0c;打破数据稀缺的瓶颈&#xff0c;中科大提出高质量运筹数据生成方法 论文作者刘昊洋是中国科学技术大学 2023 级硕士生&#xff0c;师从王杰教授&#xff0c;…

从零用java实现 小红书 springboot vue uniapp (1)

前言 偶尔会用小红书发一些笔记 闲来无事 想自己实现一个小红书 正好可以学习一下 帖子 留言 im 好友 推送 等功能 下面我们就从零 开发一个小红书 后台依旧用我们的会员系统的脚手架 演示 http://120.26.95.195:8889/ 客户端我们使用uniapp 我们首先对主页进行一个分解 顶部我…

pyside6学习专栏(一)常用控件的使用(非QML方式)

前段业余时间在用pythonpyqt5边学边作一些小程序&#xff0c;总算作到了一个相对复杂的基本VTK三维显示地形图并计算挖填方工程量&#xff0c;作完后&#xff0c;又发现pyqt又是要收费的&#xff0c;就又看了下对应的替代库pyside6,对用此库的一些基本技能分享到此专栏中&#…

活动|华院计算董事长宣晓华应邀出席2024科创大会并作圆桌嘉宾

2024科创大会在上海举行&#xff0c;由中央广播电视总台和上海市人民政府共同主办。本次大会以“创新驱动 新质未来”为主题&#xff0c;来自知名院校、科研机构的专家学者以及科技企业、金融机构的相关负责人共聚一堂&#xff0c;探讨人工智能、生物医药等产业应用前景&#x…

计算机网络-IPSec VPN工作原理

一、IPSec VPN工作原理 昨天我们大致了解了IPSec是什么&#xff0c;今天来学习下它的工作原理。 IPsec的基本工作流程如下&#xff1a; 通过IKE协商第一阶段协商出IKE SA。 使用IKE SA加密IKE协商第二阶段的报文&#xff0c;即IPsec SA。 使用IPsec SA加密数据。 IPsec基本工作…

leetcode 3001. 捕获黑皇后需要的最少移动次数 中等

现有一个下标从 1 开始的 8 x 8 棋盘&#xff0c;上面有 3 枚棋子。 给你 6 个整数 a 、b 、c 、d 、e 和 f &#xff0c;其中&#xff1a; (a, b) 表示白色车的位置。(c, d) 表示白色象的位置。(e, f) 表示黑皇后的位置。 假定你只能移动白色棋子&#xff0c;返回捕获黑皇后…

linux 系统常用指令

1、查看内核版本 uname -r 2、列出占用空间最大的 10 个文件或目录 du -ah / | sort -rh | head -n 10 终于找到我虚拟机硬盘空间越来越少的原因了&#xff0c;类目......

【OpenDRIVE_Python】使用python脚本更新OpenDRIVE数据中路口Junction名称

示例代码说明&#xff1a; 遍历OpenDRIVE数据中每个路口JunctionID,读取需要变更的路口ID和路口名称的TXT文件,若JunctionID与TXT文件中的ID一致&#xff0c;则将TXT对应的点位名称更新到OpenDRIVE数据中Junction name字段。补充&#xff1a;需要保持TXT和OpenDRIVE数据文件编…

PySpark3.4.4_基于StreamingContext实现网络字节流统计分析

网络字节流与嵌套字节流的区别 概念解释 网络嵌套字节流&#xff1a; 在网络编程的情境下&#xff0c;网络嵌套字节流通常是指将字节流&#xff08;字节序列&#xff09;以一种分层或者包含的方式进行组织&#xff0c;用于在网络传输过程中更好地处理数据。例如&#xff0c;在一…

【JS】简单CSS简单JS写的上传进度条

纯JS写的&#xff0c;简单的上传进度条&#xff0c;当上传的文件较大&#xff0c;加一个动态画面&#xff0c;就不会让人觉得出错了或网络卡了 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"v…

47 基于单片机的书库环境监测

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于51单片机&#xff0c;采用DHT11湿度传感器检测湿度&#xff0c;DS18B20温度传感器检测温度&#xff0c; 采用滑动变阻器连接数模转换器模拟二氧化碳和氧气浓度检测&#xff0c;各项数值通过lc…

解决:IDEA中@Autowired自动注入MyBatis Mapper报红警告的几种解决方法

文章目录 解决&#xff1a;IDEA中Autowired自动注入MyBatis Mapper报红警告的几种解决方法问题描述&#xff1a;解决办法&#xff1a;1.将Autowired注解改成Resource2.给Autowired(required false)设置属性3.给Mapper层加注解Mapper/Repository4.改变写法,用RequiredArgsConst…

Spring Boot中实现JPA多数据源配置指南

本文还有配套的精品资源&#xff0c;点击获取 简介&#xff1a;本文详细介绍了在Spring Boot项目中配置和使用JPA进行多数据源管理的步骤。从引入依赖开始&#xff0c;到配置数据源、创建DataSource bean、定义实体和Repository&#xff0c;最后到配置事务管理器和使用多数据…

Ubuntu 安装 web 服务器

安装 apach sudo apt install apache2 -y 查看 apach2 版本号 apache2 -v 检查是否启动服务器 sudo service apache2 status 检查可用的 ufw 防火墙应用程序配置 sudo ufw app list 关闭防火墙 sudo ufw disable 更改允许通过端口流量 sudo ufw allow Apache Full 开启…

go语言的成神之路-标准库篇-fmt标准库

目录 一、三种类型的输出 print&#xff1a; println&#xff1a; printf&#xff1a; 总结&#xff1a; 代码展示&#xff1a; 二、格式化占位符 %s&#xff1a;用于格式化字符串。 %d&#xff1a;用于格式化整数。 %f&#xff1a;用于格式化浮点数。 %v&#xff1…