决策树:理解机器学习中的关键算法

决策树:理解机器学习中的关键算法

决策树是一种流行而强大的机器学习算法,它从数据中学习并模拟决策过程,以便对新的未知数据做出预测。由于其直观性和易理解性,决策树成为了分类和回归任务中的首选算法之一。在本文中,我们将深入探讨决策树的工作原理、如何构建决策树、它们的优缺点,以及在现实世界中的应用。

树模型

决策树:从根节点开始一步步走到叶子节点(决策)

所有的数据最终都会落到叶子节点,既可以做分类也可以做回归

树的组成

根节点:第一个选择点

非叶子节点与分支:中间过程

叶子节点:最终的决策过程

例子:一个家庭里面找出玩游戏的人(通过年龄和性别两个特征)

如何切分特征(选择节点)

问题:根节点的特征该用哪个特征?如何切分?

假设:我们目标应该是根节点就像一个老大一样能够更好的切分数据(分类的效果更好),根节点下面的节点自然就是二当家。

目标:通过一种衡量指标,来计算通过不同特征进行分支选择后的分类情况,找出最好的那个当成根节点,以此类推。

衡量指标——

熵:表示随机变量不确定性的度量(说白了就是物体内部的混乱程度,(概率越大)熵的值越小,物体的混乱程度越低,(概率越小)熵值越大,物体的混乱程度越高)

公式:

[ H(S) = -\sum_{i=1}^{n} p_i \log_2(p_i) ]

其中:

  • ( H(S) ) 是数据集( S ) 的熵。
  • ( n )是类别的数量。
  • ( p_i )是选择第( i )个类别的概率。

为了计算一个数据集的熵,你需要遵循以下步骤:

  1. 对于数据集 ( S ),确定所有不同的类别。
  2. 计算属于每个类别的元素的比例,即每个类别的概率( p_i )
  3. 对每个类别,计算( p_i \log_2(p_i) )
  4. 将第3步中计算的所有值相加,并取其相反数,得到熵。

例如,假设一个数据集有两个类别(正类和负类),每个类别的实例数分别是 9 和 5。首先,我们计算每个类别的概率:正类的概率p_1= \frac{9}{14},负类的概率( p_2 = \frac{5}{14} )。然后,应用熵公式计算:

[ H(S) = -\left( \frac{9}{14} \log_2\left(\frac{9}{14}\right) + \frac{5}{14} \log_2\left(\frac{5}{14}\right) \right) ]

[ H(S) = -\left( \frac{9}{14} \times (-0.637) + \frac{5}{14} \times (-1.222) \right) ]

[ H(S) ≈ 0.940 ]

这个值反映了数据集的不确定性程度。在构建决策树时,我们希望通过选择合适的特征来减少熵,也就是说,我们希望通过分割数据集来得到更低熵的子集,这样可以使得决策树在每个节点上做出更清晰的决策。

信息增益是决策树算法中用于选择数据集的最佳分割特征的一种度量。它是基于熵的一个概念,用来确定一个特征带来的熵减少(即信息增加)的数量。信息增益越高,意味着使用该特征进行分割所得到的子集的纯度提高得越多。

信息增益 (IG) 的公式是基于父节点和其子节点的熵的差值计算的:

[ IG(S, A) = H(S) - \sum_{t \in T} \frac{|S_t|}{|S|} H(S_t) ]

其中:

  • ( IG(S, A) ) 是数据集 ( S ) 关于特征 ( A ) 的信息增益。
  • ( H(S) ) 是数据集 ( S ) 的原始熵。
  • ( T ) 是根据特征 ( A ) 的所有可能值将数据集 ( S ) 分割成的子集的集合。
  • ( S_t ) 是由于特征 ( A ) 的值为 ( t ) 而形成的子集。
  • ( |S_t| ) 是子集 ( S_t ) 的大小。
  • ( |S| ) 是整个数据集 ( S ) 的大小。
  • ( H(S_t) ) 是子集 ( S_t ) 的熵。

信息增益

在构建决策树时,我们通常对每个特征计算信息增益,选择信息增益最大的特征作为节点的分割特征。通过这个过程,我们希望每次分割都能最大化信息的纯度提升,这样构建出来的树能更好地分类数据。

让我们通过一个简单的例子来说明信息增益的计算:

假设我们有一个数据集( S ),它有两个类别,类别 A 和类别 B。数据集的总熵( H(S) )已经计算为 0.940。现在我们考虑一个特征( X ),它可以将数据集分割成两个子集( S_1 )( S_2 )。我们计算这两个子集的熵( H(S_1) )( H(S_2) ),然后根据它们在父数据集中的比例加权求和,得出分割后的总熵。如果 ( H(S_1) )是 0.0(因为( S_1 )中所有实例都属于同一个类别),( H(S_2) )是 0.918,而且( |S_1| )是 5,( |S_2| ) 是 9,那么分割后的总熵是:

[ \sum_{t \in T} \frac{|S_t|}{|S|} H(S_t) = \frac{5}{14} \times 0.0 + \frac{9}{14} \times 0.918 ]

[ = 0 + 0.589 ]

[ = 0.589 ]

因此,特征 ( X )的信息增益( IG(S, X) )是:

[ IG(S, X) = H(S) - \sum_{t \in T} \frac{|S_t|}{|S|} H(S_t) ]

[ = 0.940 - 0.589 ]

[ = 0.351 ]

根据这个计算结果,我们知道使用特征( X )进行分割能够减少熵,增加信息的纯度,具体增加的信息量为 0.351。通过比较不同特征的信息增益,我们可以选择最好的分割点来构建决策树的下一个节点。

决策树构造实例:

决策树算法:

ID3:信息增益(问题如果新增ID列,用ID列做信息增益,会很大,但是没意义)

C4.5:信息增益率(解决ID3问题,考虑自身熵)

[ GainRatio(S, A) = \frac{IG(S, A)}{SplitInfo(S, A)} ]

  • ( IG(S, A) )是特征A的信息增益。
  • ( SplitInfo(S, A) )是分割信息,度量的是使用特征 ( A )来分割数据集( S )时的熵。

CART:使用GINI系数来当作衡量标准

[ Gini(S) = 1 - \sum_{i=1}^{n} (p_i)^2 ]

  • ( Gini(S) )是数据集( S ) 的基尼系数。
  • ( n )是数据集中不同类别的个数。
  • ( p_i )是数据集中第( i )个类别的相对频率(概率)。

决策树剪枝策略:

为什么要剪枝:决策树过拟合风险很大,理论上可以完全分的开数据(想象一下,如果树足够庞大,每个节点不就一个数据了吗)

剪枝策略:预剪枝、后剪枝

预剪枝:边建立决策树进行剪枝的操作(更实用)

后剪枝:当建立完决策树后来进行剪枝的操作

预剪枝方法:

限制深度、叶子节点个数叶子节点样本数,信息增益量等

后剪枝方法:

通过一定的hen

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

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

相关文章

设计模式 代理模式(静态代理 动态代理) 与 Spring Aop源码分析 具体是如何创建Aop代理的

代理模式 代理模式是一种结构型设计模式,它通过创建一个代理对象来控制对真实对象的访问。这种模式可以用于提供额外的功能操作,或者扩展目标对象的功能。 在代理模式中,代理对象与真实对象实现相同的接口,以便在任何地方都可以使…

诊断试剂市场调研:预计2029年将达到859亿美元

诊断试剂从一般用途来分,可分为体内诊断试剂和体外诊断试剂两大类。除用于诊断的如旧结核菌素、布氏菌素、锡克氏毒素等皮内用的体内诊断试剂等外,大部分为体外诊断制品。 诊断试剂可分为体内诊断试剂和体外诊断试剂两大类。从近年来的诊断试剂产品结…

Hive数据定义(2)

hive数据定义是hive的基础知识,所包含的知识点有:数据仓库的创建、数据仓库的查询、数据仓库的修改、数据仓库的删除、表的创建、表的删除、内部表、外部表、分区表、桶表、表的修改、视图。在上一篇文章中介绍了一部分知识点,在本篇文章中将…

2024中国光伏展

2024年中国光伏展预计将是一个规模庞大的展览,吸引了全球光伏行业的专业人士和企业参与。光伏展将为各个光伏领域的企业提供一个展示最新技术、产品和解决方案的平台。 在2024年的中国光伏展上,参展企业将能够展示他们的光伏组件、太阳能电池板、逆变器、…

鸿蒙Harmony-列表组件(List)详解

不要和别人比生活,每个人阶段不同,追求不同,活法自然也不同。只要今天的你能比昨天的你快乐一点点,那你就是自己人生赢家。 目录 一,定义 二,布局与约束 2.1 布局 2.2 约束 三,开发布局 3.1 设置…

三、Qt Creator 使用

关于Qt的安装及环境配置,在我的上一篇《二、QT下载、安装及问题解决(windows系统)》已经讲过了。 本章节有一个重点,在新建 工程文件时,所在路径不要有中文,否则编译及运行程序不能正常运行。 在使用Qt Creator(以下…

Python 布尔类型:了解真假之间的探索

Python 是一种备受欢迎的编程语言,以其简洁、灵活和易学易用而闻名。其中一个重要的数据类型就是布尔类型(bool),它代表了逻辑上的真(True)和假(False)。在 Python 中,布…

【数据库】聊聊MVCC机制与BufferPool缓存机制

上一篇文章,介绍了隔离级别,MySQL默认是使用可重复读,但是在可重复读的级别下,可能会出现幻读,也就是读取到另一个session添加的数据,那么除了配合使用间隙锁的方式,还使用了MVCC机制解决&#…

【算法分析与设计】跳跃游戏

题目 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说&#xff0c;如果你在 nums[i] 处&#xff0c;你可以跳转到任意 nums[i j] 处: 0 < j < nums[i] i j < n 返回到达 nums[n - …

vue中使用mpegts.js播放flv的直播视频流

第一步&#xff1a;引入mpegts.js npm install --save mpegts.js 第二步&#xff1a;在vue文件中引入mpegts.js的依赖 第三步&#xff1a;编写展示视频的盒子 我这里是使用循环遍历的方式创建video标签&#xff0c;这样方便后面随机展示视频使用 <template><div>&l…

甄选7款前端动画特效源码资源分享(附在线预览)

分享7款有趣也实用的前端动画特效 其中有CSS动画、canvas动画、js小游戏等等 下面我会给出特效样式图或演示效果图 但你也可以点击在线预览查看源码的最终展示效果及下载源码资源 交互式加载动画 基于three.js制作的一款交互式加载动画 鼠标长按时还有环形的过渡到圆圈的效果…

第十二章 Java内存模型与线程(二)

文章目录 12.4 Java与线程12.4.1 线程的实现12.4.2 Java线程调度12.4.3 状态转换 12.5 Java与协程12.5.1 内核线程的局限12.5.2 协程的复苏12.5.3 Java的解决方案 12.4 Java与线程 12.4.1 线程的实现 实现线程主要有三种方式&#xff1a;使用内核线程实现&#xff08;1&#…