【人工智能基础05】决策树模型
文章目录
- 一. 基础内容
- 1. 决策树基本原理
- 1.1. 定义
- 1.2. 表示成条件概率
- 2. 决策树的训练算法
- 2.1. 划分选择的算法
- 信息增益(ID3 算法)
- 信息增益比(C4.5 算法)
- 基尼指数(CART 算法)
- 举例说明:计算各个类别的信息增益
- 2.2. 叶子节点的选择
- 2.3. 剪枝
- 预剪枝
- 后剪枝
- 2.4. 决策树训练算法分类
- 二. 习题
- 1. 归一化对决策树的影响
- 2. 选择决策树模型
- 3. 决策树计算
- 4. 基尼系数的优势
- 5. 在叶子上使用线性模型的优缺点
本文重点内容
- 什么是决策树
- 决策树的基本原理
- 决策树训练方法,防止过拟合的方法
- 分类和回归决策树筛选原则
一. 基础内容
1. 决策树基本原理
1.1. 定义
分类决策树模型是一种描述对实例进行分类的树形结构。决策树由节点和有向边组成。其中节点有两种类型:内部节点和叶节点。内部节点表示一个特征或属性,叶结点表示一个类,结构如下图:
1.2. 表示成条件概率
决策树还可以表示成在给定条件下类的条件概率分布。
决策树将特征空间划分为会不相交的单元,在每个单元定义一个类的概率分布,这就构成了一个条件概率分布。
条件概率计算方式:
- 概率分布计算:由各个单元给定条件下类的条件概率分布组成,将这些概率沿着分支相乘,即得出所需的概率。
极大似然函数:损失函数的优化。
2. 决策树的训练算法
决策树学习算法通常是递归的原则最优特征,根据该特征对训练数据进行分割:即特征空间的分割。
决策树的结构收到很多因素影响:特征选择、分裂点选择、树的深度、复杂度控制、剪枝等。
2.1. 划分选择的算法
特征选择:在每个节点上,如何选择一个特征进行分裂,常用的特征选择指标有:信息增益、信息增益率,以及基尼指数:ID3、C4.5、CART的等决策树算法。
信息增益(ID3 算法)
信息熵的定义与计算
信息增益的计算
信息增益:衡量了信息对数据集分类结果的贡献度。
在构建决策树时,ID3 算法选择信息增益最大的特征作为当前节点的划分特征。
例如,在一个判断水果是苹果还是橙子的决策树中,有颜色、形状等特征,通过计算这些特征的信息增益,若颜色特征的信息增益最大,那么就先根据颜色来划分节点。
信息增益比(C4.5 算法)
信息增益比的引入原因:
- 信息增益存在一个问题,它偏向于选择取值较多的特征。为了克服这个问题,C4.5 算法引入了信息增益比。
- 在决策树构建过程中,C4.5 算法选择信息增益比最大的特征作为划分特征。例如,在一个包含很多特征的数据集里,有些特征虽然信息增益较大,但它可能有过多的取值,通过计算信息增益比,可以更合理地选择划分特征。
基尼指数(CART 算法)
基尼指数的含义:
基尼指数用于衡量数据集的纯度,其值越小表示纯度越高。
例如,在客户流失预测的决策树中,基尼不纯度可以帮助我们了解每个节点中客户流失(或不流失)的纯度情况。如果一个节点的基尼不纯度很高,说明这个节点中的客户在流失与否的分类上很混乱,需要进一步划分来提高纯度。
基尼指数的作用:划分特征。
对于每个候选特征,计算按照该特征划分后的基尼指数,选择使得基尼指数最小的特征作为划分特征。这是因为最小的基尼指数意味着划分后子数据集的纯度最高,这样可以构建出更有效的决策树。
例如,在信用风险评估决策树中,有收入、负债、信用记录等多个特征。通过计算每个特征划分后的基尼指数,选择能使基尼指数最小的特征(如信用记录)进行划分,从而更好地将高风险和低风险客户区分开来。
基尼指数可以防止过拟合
基尼指数的使用有助于控制决策树的生长,防止过拟合。如果不加以控制,决策树可能会过度划分数据,导致在训练数据上表现很好,但在新数据上性能很差。
通过选择基尼指数最小的特征进行划分,决策树会优先选择最能有效降低数据集不纯度的特征,避免构建过于复杂的决策树结构。
例如,在图像分类决策树中,使用基尼指数来选择划分特征可以避免因一些噪声特征而构建出过于复杂的决策树,从而使模型在新的图像数据上有更好的泛化能力。
举例说明:计算各个类别的信息增益
计算各个类别的信息增益:
- 计算数据集的经验熵H(D)
- 计算特征A下(n个类别)各个类别的加权平均熵 H ( D A i ) H(D_{Ai}) H(DAi)
- 计算特征A的加权熵: H ( D A ) = ∑ i = 1 n ( D A i / D ) H ( D A i ) H(D_A)=\sum_{i = 1}^{n}(D_{Ai}/D)H(D_{Ai}) H(DA)=∑i=1n(DAi/D)H(DAi)
- 求信息增益: H ( D A ) = H ( D ) − H ( A ) H(D_A)=H(D)-H(A) H(DA)=H(D)−H(A)
类别B同上,然后对比信息增益,选择大的信息增益作为分裂点
2.2. 叶子节点的选择
p108
2.3. 剪枝
采用剪枝操作防止决策树出现过拟合,可以把这种操作看成是一种对决策树采取的正则手段。
常用的剪枝有预剪枝、后剪枝操作。
预剪枝
预剪枝是指在模型训练之前给定一些限制条件,这些限制条件可以阻止节点的进一步分裂。常见预剪枝的策略有:
- 限制树的最大深度。如果所有叶子都已经达到最大深度,将停止训练。
- 限制树的最大叶子数目。如果叶子数目达到这个上限,将停止训练。
- 限制每片叶子上最少的样本数。为每个节点设置最小样本数阈值,如果节点的本数少于这个阈值,则停止分裂。
- 规定分割带来训练误差下降的下限。比如,规定此下限为-0.3,那么将无视所有致训练误差下降达不到0.3的分割条件。
- 利用验证集进行预剪枝。如果有验证集,可在决策树的训练过程中不断用验证进行评估。如果一次分割无法降低验证集上的误差,该分割将不被进行。
预剪枝的优点是可以在树的生长过程中减少计算量,但缺点是可能会错过一些有用分裂,导致模型的表达能力不足。
后剪枝
后剪枝是在将决策树训练好之后,从决策树的底部开始评估删除一个分割是否导致验证集误差下降。如果是,则删除该分割,即删除该分割产生的两个叶子节点,并将它的父节点重新设为叶子节点;否则,保留该分割,不断重复该步骤。
后剪枝的优点是可以灵活控制模型的复杂度,但缺点是计算量较大,因为需要在树完全生长后进行剪枝。
2.4. 决策树训练算法分类
算法名称 | 分裂准则 | 处理类型 | 树的结构 | 缺失值处理 | 剪枝处理 | 应用范围 |
---|---|---|---|---|---|---|
ID3 | 信息增益 | 离散特征 | 可以是多叉树 | 不处理 | 没有剪枝过程,容易过拟合 | 分类 |
C4.5 | 信息增益率 | 连续特征 | 可以是多叉树 | 能处理数据集中存在缺失值的情况。它通过估算该特征对分类的贡献进行处理,而不是简单地删除缺失数据。对于有缺失值的特征,C4.5会计算每个可能的分裂点,并考虑缺失值的不同处理方式对分类结果的影响 | 采用了一种后剪枝方法,即先完整地生长树,然后再通过悲观剪枝策略来减少树的复杂性,提高泛化能力 | 分类 |
CART | 基尼指数 | 离散、连续均可 | 二叉树 | 对于缺失值的处理采用了概率加权的方法。它通过计算缺失随机变量的预测概率,然后对每个可能的值进行加权平均 | 使用后剪枝策略,即先生成完整的树,然后通过交叉验证来选择最优的剪枝树 | 分类和回归 |
二. 习题
1. 归一化对决策树的影响
题目:对于一些机器学习模型(例如,神经网络),对特征进行归一化(normalization)是一个有效的预处理操作。一个常见的归一化方式是对每一个特征数据,减去该特征的均值,然后除以该特征的方差。请回答,对于基于决策树的一系列算法,归一化是否会影响训练结果?
解答:
对于基于决策树的一系列算法,归一化通常不会影响训练结果。
决策树算法在构建树的过程中主要依据特征的信息增益、基尼系数等标准来进行分裂,并不依赖于特征的绝对数值大小。它更关注的是特征之间的相对关系以及特征对分类或回归目标的区分能力。
而归一化主要是改变特征的数值范围和分布,对于决策树算法来说,特征的相对大小关系和顺序通常不会因归一化而改变。
所以,对基于决策树的算法进行特征归一化一般不会对训练结果产生实质性的影响。
2. 选择决策树模型
3. 决策树计算
4. 基尼系数的优势
5. 在叶子上使用线性模型的优缺点
参考:《人工智能基础-姚期智》
相关文章:

【人工智能基础05】决策树模型
文章目录 一. 基础内容1. 决策树基本原理1.1. 定义1.2. 表示成条件概率 2. 决策树的训练算法2.1. 划分选择的算法信息增益(ID3 算法)信息增益比(C4.5 算法)基尼指数(CART 算法)举例说明:计算各个…...

【人工智能基础03】机器学习(练习题)
文章目录 课本习题监督学习的例子过拟合和欠拟合常见损失函数,判断一个损失函数的好坏无监督分类:kmeans无监督分类,Kmeans 三分类问题变换距离函数选择不同的起始点 重点回顾1. 监督学习、半监督学习和无监督学习的定义2. 判断学习场景3. 监…...
HarmonyOS(60)性能优化之状态管理最佳实践
状态管理最佳实践 1、避免在循环中访问状态变量1.1 反例1.2 正例 2、避免不必要的状态变量的使用3、建议使用临时变量替换状态变量3.1 反例3.2 正例 4、参考资料 1、避免在循环中访问状态变量 在应用开发中,应避免在循环逻辑中频繁读取状态变量,而是应该…...

数据库课程设计报告 超市会员管理系统
一、系统简介 1.1设计背景 受到科学技术的推动,全球计算机的软硬件技术迅速发展,以计算机为基础支撑的信息化如今已成为现代企业的一个重要标志与衡量企业综合实力的重要标准,并且正在悄无声息的影响与改变着国内外广泛的中小型企业的运营模…...
C++算法练习-day54——39.组合总和
题目来源:. - 力扣(LeetCode) 题目思路分析 题目:给定一个整数数组 candidates 和一个目标数 target,找出所有独特的组合,这些组合中的数字之和等于 target。每个数字在每个组合中只能使用一次。 思路&a…...

计算机毕业设计PySpark+Hadoop中国城市交通分析与预测 Python交通预测 Python交通可视化 客流量预测 交通大数据 机器学习 深度学习
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...

Linux的文件系统
这里写目录标题 一.文件系统的基本组成索引节点目录项文件数据的存储扇区三个存储区域 二.虚拟文件系统文件系统分类进程文件表读写过程 三.文件的存储连续空间存放方式缺点 非连续空间存放方式链表方式隐式链表缺点显示链接 索引数据库缺陷索引的方式优点:多级索引…...

【Vue3】从零开始创建一个VUE项目
【Vue3】从零开始创建一个VUE项目 手动创建VUE项目附录 package.json文件报错处理: Failed to get response from https://registry.npmjs.org/vue-cli-version-marker 相关链接: 【VUE3】【Naive UI】<NCard> 标签 【VUE3】【Naive UI】&…...
9)语法分析:半倒装和全倒装
在英语中,倒装是一种特殊的句子结构,其中主语和谓语(或助动词)的位置被颠倒。倒装分为部分倒装和全倒装两种类型,它们的主要区别在于倒装的程度和使用的场合。 1. 部分倒装 (Partial Inversion) 部分倒装是指将助动词…...

Scala关于成绩的常规操作
score.txt中的数据: 姓名,语文,数学,英语 张伟,87,92,88 李娜,90,85,95 王强,78,90,82 赵敏,92,8…...

使用Java实现度分秒坐标转十进制度的实践
目录 前言 一、度分秒的使用场景 1、表示方法 2、两者的转换方法 3、区别及使用场景 二、Java代码转换的实现 1、确定计算值的符号 2、数值的清洗 3、度分秒转换 4、转换实例 三、总结 前言 在地理信息系统(GIS)、导航、测绘等领域,…...

根据后台数据结构,构建搜索目录树
效果图: 数据源 const data [{"categoryidf": "761525000288210944","categoryids": "766314364226637824","menunamef": "经济运行","menunames": "经济运行总览","tempn…...

食品计算—FoodSAM: Any Food Segmentation
🌟🌟 欢迎来到我的技术小筑,一个专为技术探索者打造的交流空间。在这里,我们不仅分享代码的智慧,还探讨技术的深度与广度。无论您是资深开发者还是技术新手,这里都有一片属于您的天空。让我们在知识的海洋中…...
2411rust,1.83
原文 1.83.0稳定版 新的常能力 此版本包括几个说明在常环境中运行代码可干的活的大型扩展.这是指编译器在编译时必须计算的所有代码:常和静项的初值,数组长度,枚举判定值,常模板参数及可从(constfn)此类环境调用的函数. 引用静.当前,除了静项的初化器式外,禁止常环境引用静…...

tomcat加载三方包顺序
共享库 tomcat支持多个webapp共享一个三方库,而不需要每个webapp都引入该三方库 tomcat加载类顺序 bootstrap:加载jvm提供的类system:加载$CATALINA_HOME/bin下的bootstrap.jar,commons-daemon.jar,tomcat-juli.jar三个包//加载$CLASSPATH…...

计算机的错误计算(一百七十一)
摘要 探讨 MATLAB 中秦九韶(Horner)多项式的错误计算。 例1. 用秦九韶(Horner)算法计算(一百零七)例1中多项式 直接贴图吧: 这样,MATLAB 给出的仍然是错误结果,因为准…...
js对于json的序列化、反序列化有哪几种方法
在JavaScript中,对JSON(JavaScript Object Notation)进行序列化(将对象转换为JSON字符串)和反序列化(将JSON字符串转换为对象)是常见的操作。以下是一些常用的方法: 序列化…...

Linux——基础命令(2) 文件内容操作
目录 编辑 文件内容操作 1.Vim (1)移动光标 (2)复制 (3)剪切 (4)删除 (5)粘贴 (6)替换,撤销,查找 (7ÿ…...
简单搭建qiankun的主应用和子应用并且用Docker进行服务器部署
在node18环境下,用react18创建qiankun主应用和两个子应用,react路由用V6版本,都在/main路由下访问子应用,用Dockerfile部署到腾讯云CentOS7.6服务器的8000端口进行访问,且在部署过程中进行nginx配置以进行合理的路由访…...
Python知识分享第十六天
“”" 故事7: 小明把煎饼果子技术传给徒弟的同时, 不想把独创配方传给他, 我们就要加私有. 问: 既然不想让子类用, 为什么要加私有? 答: 私有的目的不是不让子类用, 而是不让子类直接用, 而必须通过特定的 途径或者方式才能使用. 大白话: ATM机为啥要设计那么繁琐, 直接…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)
概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...
深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...

微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

Reasoning over Uncertain Text by Generative Large Language Models
https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...

HDFS分布式存储 zookeeper
hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架,允许使用简单的变成模型跨计算机对大型集群进行分布式处理(1.海量的数据存储 2.海量数据的计算)Hadoop核心组件 hdfs(分布式文件存储系统)&a…...

Linux 内存管理实战精讲:核心原理与面试常考点全解析
Linux 内存管理实战精讲:核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用,还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...
CSS | transition 和 transform的用处和区别
省流总结: transform用于变换/变形,transition是动画控制器 transform 用来对元素进行变形,常见的操作如下,它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...

Qemu arm操作系统开发环境
使用qemu虚拟arm硬件比较合适。 步骤如下: 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载,下载地址:https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...