0 决策树基础

news2024/9/21 16:47:37

目录

1 绪论

2 模型

3 决策树面试总结

1 绪论

         决策树算法包括ID3、C4.5以及C5.0等,这些算法容易理解,适用各种数据,在解决各种问题时都有良好表现,尤其是以树模型为核心的各种集成算法,在各个行业和领域都有广泛的应用。

         决策树是一种树结构,从根节点出发,每个分支都将训练数据划分成了互不相交的子集。分支的划分可以以单个特征为依据,也可以以特征的线性组合为依据。决策树可以解决回归和分类问题,在预测过程中,一个测试数据会依据已经训练好的决策树到达某一叶子节点,该叶子节点即为回归或分类问题的预测结果。

        从概率论的角度理解,决策树是定义在特征空间和类空间上的条件概率分布。每个父节点可以看作子树的先验分布,子树则为父节点在当前特征划分下的后验分布。

        决策树中的每一条路径都对应是划分的一个条件概率分布. 每一个叶子节点都是通过多个条件之后的划分空间,在叶子节点中计算每个类的条件概率,必然会倾向于某一个类,即这个类的概率最大。

2 模型

2.1 ID3

  1. 信息熵:信息熵用来度量样本集合的纯度。信息熵值越小,D 的纯度越高。

Ent(D) =-\sum_{k=1}^{K} p_{k} log_{2}p_{k}

  1. 信息增益:信息增益用来描述一次划分之后纯度的提升有多大。分裂节点前后不确定性提升了多少。 用不同的属性划分样本,会得到不同的信息增益。在 ID3 决策树算法中,我们取能使信息增益最大,即划分后纯度提升(不确定性降低)最大的属性作为当前决策树的划分属性。

Gain(D,A) = H(D) - H(D|A)

  1. 信息增益率(c4.5):使用信息增益当作 cost function 会对可取值数目较多的属性有所偏好,使用信息增益率可以减小这种偏好。添加一个权重,一个特征取值个数越多那么折算越大。折算系数就是特征的熵。

    -- IV 是属性 a 的固有值,a 的可能取值数目越多(V 越大),IV(a) 的值通常越大,信息增益率就会减小。显然信息增益率偏好可取值数目少的属性,不能直接使用它当作 cost function,在 C4.5 决策树算法中,先从侯选属性里找出信息增益高于平均值的属性们,再从中选取信息增益率最高的。

信息增益就是互信息。

       互信息: 描述的是两个随机变量之间相互依赖的程度。具体而言,互信息指获得一个随机变量后,观察另一个随机变量所获得的“信息量”。

https://blog.csdn.net/weixin_36480255/article/details/112640356

互信息、交叉熵、KL散度等公式 信息量、熵、最大熵、联合熵、条件熵、相对熵、互信息,信息增益_熵和信息量-CSDN博客

3 决策树面试总结

ref : https://blog.csdn.net/Heitao5200/article/details/103762474

1 . 决策树和条件概率分布的关系?

决策树可以表示成给定条件下类的条件概率分布,P(A|B)。我们知道贝叶斯分类中采用贝叶斯定律以及条件独立假设,使用极大似然以及先验概率求得寻找能在当前输入X最大的概率y P(Y=y|X=x)。

2. 信息增益比相对信息增益有什么好处?

  • 使用信息增益时:模型偏向于选择取值较多的特征
  • 使用信息增益比时:对取值多的特征加上的惩罚,对这个问题进行了校正。

3 ID3算法—>C4.5算法—> CART算法

ID3:

  1. ID3算法没有考虑连续特征,比如长度,密度都是连续值,无法在ID3运用。这大大限制了ID3的用途。
  2. ID3算法采用信息增益大的特征优先建立决策树的节点,偏向于取值比较多的特征;
  3. ID3算法对于缺失值的情况没有做考虑;
  4. ID3算法没有考虑过拟合的问题;

C4.5:

  1. 连续的特征离散化
  2. 使用信息增益比
  3. 通过剪枝算法解决过拟合;

C4.5算法常选择后剪枝的方法消除决策树的过度拟合

C4.5的不足:

  1. C4.5生成的是多叉树
  2. C4.5只能用于分类,如果能将决策树用于回归的话可以扩大它的使用范围。
  3. C4.5由于使用了熵模型,里面有大量的耗时的对数运算,如果是连续值还有大量的排序运算

CART算法:(二叉树)

  1. 可以做回归,也可以做分类,
  2. 使用基尼系数来代替信息增益比
  3. CART分类树离散值的处理问题,采用的思路是不停的二分离散特征。
  4. CART剪枝分为预剪枝和后剪枝两种主要方式;

4 决策树怎么防止过拟合?

  1. 预剪枝(提前停止):控制深度、当前的节点数、分裂对测试集的准确度提升大小
  2. 限制树的高度,可以利用交叉验证选择
  3. 利用分类指标,如果下一次切分没有降低误差,则停止切分;
  4. 限制树的节点个数,比如某个节点小于100个样本,停止对该节点切分
  5. 后剪枝(自底而上):生成决策树、交叉验证剪枝:子树删除,节点代替子树、测试集准确率判断决定剪枝。在决策树构建完成之后,根据加上正则项的结构风险最小化自下向上进行的剪枝操作. 剪枝的目的就是防止过拟合,是模型在测试数据上变现良好,更加鲁棒。

5 如果特征很多,决策树中最后没有用到的特征一定是无用吗?

不是无用的,从两个角度考虑:

  1. 特征替代性,如果可以已经使用的特征A和特征B可以提点特征C,特征C可能就没有被使用,但是如果把特征C单独拿出来进行训练,依然有效
  2. 决策树的每一条路径就是计算条件概率的条件,前面的条件如果包含了后面的条件,只是这个条件在这棵树中是无用的,如果把这个条件拿出来也是可以帮助分析数据.

6 .决策树的优缺点?

优点:

  1. 简单直观,生成的决策树很直观。
  2. 基本不需要预处理,不需要提前归一化,处理缺失值。
  3. 使用决策树预测的代价是O(log2m)O(log2m)。 m为样本数。
  4. 既可以处理离散值也可以处理连续值。很多算法只是专注于离散值或者连续值。
  5. 可以处理多维度输出的分类问题。
  6. 相比于神经网络之类的黑盒分类模型,决策树在逻辑上可以得到很好的解释
  7. 可以交叉验证的剪枝来选择模型,从而提高泛化能力。
  8. 对于异常点的容错能力好,健壮性高。

缺点:

  1. 决策树算法非常容易过拟合,导致泛化能力不强。可以通过设置节点最少样本数量和限制决策树深度来改进。
  2. 决策树会因为样本发生一点点的改动,就会导致树结构的剧烈改变。这个可以通过集成学习之类的方法解决。
  3. 寻找最优的决策树是一个NP难的问题,我们一般是通过启发式方法,容易陷入局部最优。可以通过集成学习之类的方法来改善。
  4. 有些比较复杂的关系,决策树很难学习,比如异或。这个就没有办法了,一般这种关系可以换神经网络分类方法来解决。
  5. 如果某些特征的样本比例过大,生成决策树容易偏向于这些特征。这个可以通过调节样本权重来改善。

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

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

相关文章

蓝桥杯基础练习详细解析(四)——Fibonacci费伯纳西数列(题目分析、代码实现、Python)

试题 基础练习 Fibonacci数列 提交此题 评测记录 资源限制 内存限制:256.0MB C/C时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s 问题描述 Fibonacci数列的递推公式为:FnFn-1Fn-2,其…

RANSAC算法:从原理到图像拼接的实践

RANSAC算法:从原理到图像拼接的实践 1. RANSAC算法原理和步骤 1.1 RANSAC算法简介 RANSAC (RANdom SAmple Consensus, 随机采样一致) 算法是从一组含有“外点”(outliers)的数据中正确估计数学模型参数的迭代算法。“外点”一般指的的数据中的噪声,比…

阿里云CentOS7安装MySQL8

创建目录 [rootnode1 ~]# mkdir /usr/local/mysql [rootnode1 ~]# cd /usr/local/mysql/ 下载安装包 到MySQL官网查看需要下载的版本,并获取到下载地址 https://downloads.mysql.com/archives/community/下载 [rootnode1 mysql]# wget https://downloads.mysql…

uniapp 微信小程序 canvas 手写板获取书写内容区域并输出

uni.canvasGetImageData 返回一个数组,用来描述 canvas 区域隐含的像素数据,在自定义组件下,第二个参数传入自定义组件实例 this,以操作组件内 组件。 // 获取目标 canvas 的像素信息 pixelData let canvas uni.createSelector…

平台介绍-搭建赛事运营平台(3)

上文介绍了品牌隔离的基本原理,就是通过不同的前端和微服务来实现。但是确实很多功能是类似的,所以从编程角度还是有些管理手段的。 前端部分:前端部分没有什么特别手段,就是两个独立的项目工程,分别维护。相同的部分复…

MoonBit MeetUp回顾——张正、宗喆:编程语言在云原生与区块链领域的技术探索

宗喆和张正分别给我们带了 KCL 相关的最新进展,由蚂蚁集团开发的 Rust 编写的开源 DSL,目标是优化云原生策略配置和用户体验。它通过引入动态配置管理、配置校验和基础设施抽象等核心概念,解决开发者认知负担、配置膨胀和标准化工具缺乏的问题…

Flink系列之:Flink SQL Gateway

Flink系列之:Flink SQL Gateway 一、Flink SQL Gateway二、部署三、启动SQL Gateway四、运行 SQL 查询五、SQL 网关启动选项六、SQL网关配置七、支持的端点 一、Flink SQL Gateway SQL 网关是一项允许多个客户端从远程并发执行 SQL 的服务。它提供了一种简单的方法…

机器学习(三)

神经网络: 神经网络是由具有适应性的简单单元组成的广泛并行互连的网络,它的组织能够模拟生物神经系统对真实世界物体所作出的交互反应。 f为激活(响应)函数: 理想激活函数是阶跃函数,0表示抑制神经元而1表示激活神经元。 多层前馈网络结构: BP(误差逆…

比较AI编程工具Copilot、Tabnine、Codeium和CodeWhisperer

主流的几个AI智能编程代码助手包括Github Copilot、Codeium、Tabnine、Replit Ghostwriter和Amazon CodeWhisperer。 你可能已经尝试过其中的一些,也可能还在不断寻找最适合自己或公司使用的编程助手。但是,这些产品都会使用精选代码示例来实现自我宣传…

【携程笔试题汇总】2024-03-28-携程春招笔试题-三语言题解(CPP/Python/Java)

🍭 大家好这里是KK爱Coding ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新携程近期的春秋招笔试题汇总~ 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢&#x1f…

PYTHON初级笔记1

0、python? 简单的编程语言 python环境搭建: ①、开发环境:vscode、sublime、pycharm...... ②、运行环境:cpython解释器 python如何写代码? ①、在终端上的命令行上写,可以是我们cmd的中终端,…

【C语言】预处理常见知识详解(宏详解)

文章目录 1、预定义符号2、define2.1 define 定义常量2.2 define 定义宏 3、#和##3.1 **#**3.2 **##** 4、条件编译(开关) 1、预定义符号 在C语言中内置了一些预定义符号,可以直接使用,这些符号实在预处理期间处理的,…

【IntelliJ IDEA】运行测试报错解决方案(附图)

IntelliJ IDEA 版本 2023.3.4 (Ultimate Edition) 测试报错信息 命令行过长。 通过 JAR 清单或通过类路径文件缩短命令行,然后重新运行 解决方案 修改运行配置,里面如果没有缩短命令行,需要再修改选项里面勾选缩短命令行让其显示&#x…

深入浅出的揭秘游标尺模式与迭代器模式的神秘面纱 ✨

​🌈 个人主页:danci_ 🔥 系列专栏:《设计模式》 💪🏻 制定明确可量化的目标,坚持默默的做事。 🚀 转载自:设计模式深度解析:深入浅出的揭秘游标尺模式与迭代…

【机器学习】深入探讨基于实例的学习及K-最近邻算法

深入探讨基于实例的学习及K-最近邻算法 在机器学习的众多策略中,基于实例的学习方法因其简单性和高效性而备受关注。这种方法的核心理念在于利用已知的数据实例来预测新数据的标签或属性。本文将深入探讨其中的两个重要概念:最近邻算法和K-最近邻算法&a…

ArcGIS Pro横向水平图例

终于知道ArcGIS Pro怎么调横向图例了! 简单的像0一样 旋转,左转右转随便转 然后调整图例项间距就可以了,参数太多就随便试,总有一款适合你! 要调整长度,就调整图例块的大小。完美! 好不容易…

CorelDRAW25.0.0.230最新2024版本Crack下载安装方法

CorelDRAW (CDR)是一款专业的平面设计软件。本软件是由加拿大Corel公司开发的一款功能强大的专业平面设计软件、矢量设计软件、矢量绘图软件。本矢量图形制作工具软件广泛应用于商标设计、标志制作、封面设计、CIS设计、产品包装设计、模型绘制、插画绘制、时装/服装设计、印刷…

STM32G473之flash存储结构汇总

STM32G4系列单片机,为32位的微控制器,理论上其内部寄存器地址最多支持4GB的命名及查找(2的32次方,地址命名为0x00000000至0xFFFFFFFF)。STM32官方对4GB的地址存储进行编号时,又分割成了8个block区域&#x…

Switch 和 PS1 模拟器:3000+ 游戏随心玩 | 开源日报 No.174

Ryujinx/Ryujinx Stars: 26.1k License: MIT Ryujinx 是用 C# 编写的实验性任天堂 Switch 模拟器。 该项目旨在提供出色的准确性和性能、用户友好的界面以及稳定的构建。它已经通过了大约 4050 个测试,其中超过 4000 个可以启动并进入游戏,其中大约 340…

新版Idea2023.3.5与lombok冲突、@Data失效

新版idea和lombok冲突,加上Data,其他地方get set也不报错,但是一运行就找不到get set方法。 但是直接使用Getter和Setter可以访问、应该是Data失效了。 解决方法: 看推上介绍是 lombok 与 idea 采集 get 、set 方法的时候所用的技…