当前位置: 首页 > news >正文

从决策树基础到熵与信息增益

在机器学习的分类任务中,决策树是最直观、最易理解的算法之一。它像一棵 “判断树”,通过层层分支的决策逻辑,将复杂的分类问题拆解为简单的是非判断。而支撑这棵 “树” 生长的核心,正是熵(Entropy)与信息增益(Information Gain)—— 前者衡量数据的 “混乱程度”,后者决定分支的 “最优方向”。今天,我们就结合 PPT 中的经典案例,从基础概念到实战计算,完整拆解决策树的核心原理。

一、决策树的基本结构:先搞懂 “树的语言”

在学习熵与信息增益前,我们需要先明确决策树的核心组成。以 PPT 中 “是否参加聚会” 的决策流程为例,一棵完整的决策树包含三类关键节点,它们的分工清晰且明确:

1. 根节点:决策的 “起点”

根节点是整个决策树的入口,也是第一个需要判断的核心问题。在 “是否参加聚会” 的案例中,“有没有聚会?” 就是根节点—— 它是所有后续决策的起点,没有父节点,直接开启整个判断流程。

2. 非叶子节点与分支:决策的 “中间站”

非叶子节点是决策的 “中间判断步骤”,它们会根据某个特征(如 “有没有作业要交”“是否懒惰在家”)产生分支。例如 PPT 中的 “有没有作业要交”“懒惰在家?”,就是典型的非叶子节点;而连接这些节点的 “= 是”“= 否”“= 紧急” 等判定条件,就是分支。
这些节点的作用是 “逐步缩小范围”:通过一次又一次的特征判断,将原本混乱的数据集拆分成更 “纯粹” 的子集,为最终的结果铺路。

3. 叶子节点:决策的 “终点”

叶子节点是决策的最终结果,也是分类任务的 “答案”。在案例中,“聚会”“去酒吧”“学习(紧急分支)”“看电视” 等结果,都属于叶子节点 —— 它们没有子节点,代表着一次决策的完整结束。
叶子节点的 “纯度” 是决策树的核心追求:叶子节点越纯粹(比如某个叶子节点下全是 “学习” 的结果),说明决策逻辑越精准,分类效果越好。

二、熵(Entropy):衡量数据 “混乱度” 的标尺

搞懂了决策树的结构,我们就要思考:如何判断一个节点的 “纯度”?如何知道哪个特征分支能让数据更 “有序”?这就需要引入 “熵” 的概念 —— 它是信息论中衡量随机变量不确定性(混乱度)的指标。

1. 熵的定义:混乱度越高,熵值越大

熵的公:
H(X)=−∑i=1n​pi​⋅log(pi​)

  • H(X):随机变量 X 的熵(混乱度);
  • n:随机变量 X 的类别数量(比如 “学习 / 休闲” 就是 2 类);
  • pi​:第 i 类在数据集中的占比(如 “学习” 天数占总天数的比例);
  • log:通常以 2 为底(信息论常用),也可用自然对数,核心逻辑一致。

核心规律

  • 当数据完全 “纯粹”(某一类占比 100%)时,熵 = 0(比如 10 天全是 “学习”,没有 “休闲”,不确定性为 0);
  • 当数据完全 “混乱”(各类占比均衡)时,熵最大(比如 10 天中 5 天 “学习”、5 天 “休闲”,熵 = 1,不确定性最高)。

2. 实战计算:以 14 天打球数据为例

PPT 中常以 “14 天是否打球” 的数据集讲解熵的计算,我们就以此为案例,一步步拆解计算过程:

步骤 1:统计类别数量

先逐行统计 14 天中 “打球(TRUE)” 和 “不打球(FALSE)” 的天数:

  • 打球(TRUE):6 天;
  • 不打球(FALSE):14-6=8 天。
步骤 2:计算各类别占比pi​

占比 = 类别数量 / 总数量(14 天),因此:

  • 打球占比p1​=6/14≈0.4286;
  • 不打球占比p2​=8/14≈0.5714。
步骤 3:代入公式计算熵

先计算每一项pi​⋅log2​(pi​),再求和取反:

  • 第一项:0.4286×log2​(0.4286)≈0.4286×(−1.222)≈−0.524;
  • 第二项:0.5714×log2​(0.5714)≈0.5714×(−0.792)≈−0.453;
  • 求和:−0.524+(−0.453)=−0.977;
  • 取反(公式中的负号):H(D)=−(−0.977)≈0.977。

最终,14 天打球数据的熵约为 0.977,说明数据存在一定的混乱度(既不是全打球,也不是全不打球),需要通过分支进一步降低不确定性。

三、信息增益(Information Gain):找到 “最优分支” 的关键

知道了如何衡量混乱度,接下来的问题是:面对多个特征(如 “是否有作业”“天气如何”),该选哪个特征作为分支依据?答案就是 “信息增益”—— 它衡量的是 “某个特征分支后,数据混乱度降低的程度”,信息增益越大,说明这个特征的 “分类能力越强”。

1. 信息增益的定义:混乱度的 “下降值”

信息增益的公式同样简洁,PPT 中明确为:
IG(D,a)=H(D)−H(D∣a)

  • IG(D,a):特征 a 对数据集 D 的信息增益;
  • H(D):数据集 D 的 “经验熵”(分支前的混乱度);
  • H(D∣a):数据集 D 按特征 a 分支后的 “条件熵”(分支后的平均混乱度)。

核心逻辑:信息增益 =“分支前的混乱度” - “分支后的平均混乱度”。差值越大,说明分支后数据的不确定性降低越多,这个特征就越适合作为当前节点的分支依据。

2. 实战计算:以 “是否有作业” 特征为例

我们继续用 “14 天打球数据”,假设新增 “是否有作业” 的特征,计算该特征的信息增益,判断它是否适合作为分支:

步骤 1:计算分支前的经验熵H(D)

根据前文计算,14 天打球数据的经验熵H(D)≈0.977(分支前的混乱度)。

步骤 2:按 “是否有作业” 分支,统计子集数据

将 14 天按 “有作业”“无作业” 拆分为两个子集D1​和D2​:

  • 子集D1​(有作业):共 4 天,其中 “学习(不打球)”3 天,“休闲(打球)”1 天;
  • 子集D2​(无作业):共 10 天,其中 “学习(不打球)”2 天,“休闲(打球)”8 天。
步骤 3:计算每个子集的熵H(D1​)和H(D2​)
  • 计算H(D1​)(有作业子集):
    p1​=3/4=0.75(不打球),p2​=1/4=0.25(打球);
    H(D1​)=−[0.75×log2​(0.75)+0.25×log2​(0.25)]≈−[0.75×(−0.415)+0.25×(−2)]≈0.811。

  • 计算H(D2​)(无作业子集):
    p1​=2/10=0.2(不打球),p2​=8/10=0.8(打球);
    H(D2​)=−[0.2×log2​(0.2)+0.8×log2​(0.8)]≈−[0.2×(−2.322)+0.8×(−0.322)]≈0.722。

步骤 4:计算条件熵H(D∣a)

条件熵是 “子集熵的加权平均”,权重为子集占总数据的比例:

  • D1​占比:4/14 ≈ 0.2857;
  • D2​占比:10/14 ≈ 0.7143;
  • H(D∣a)=0.2857×0.811+0.7143×0.722≈0.745。
步骤 5:计算信息增益IG(D,a)

代入公式:
IG(D,a)=H(D)−H(D∣a)≈0.977−0.745≈0.232。

这意味着,用 “是否有作业” 作为分支特征后,数据的混乱度降低了 0.232—— 如果后续还有 “天气”“是否有课” 等特征,我们只需重复上述步骤,选择信息增益最大的特征,就是当前节点的 “最优分支”。

四、决策树的核心逻辑:从 “混乱” 到 “有序” 的迭代

通过熵与信息增益的计算,我们终于能理解决策树的生长逻辑:

  1. 以 “根节点”(如 “是否打球”)为起点,计算所有候选特征的信息增益;
  2. 选择信息增益最大的特征作为当前节点的分支依据,将数据拆分为多个子集;
  3. 对每个子集重复步骤 1-2(递归),直到子集的熵为 0(完全纯粹)或没有新特征可分支;
  4. 最终形成的 “叶子节点”,就是分类任务的最终答案。

这种 “从混乱到有序” 的迭代过程,让决策树既具备清晰的可解释性(每一步分支都能对应实际业务逻辑),又能高效解决分类问题 —— 这也是它在金融风控、医疗诊断、用户分层等场景中广泛应用的核心原因。

http://www.lryc.cn/news/624364.html

相关文章:

  • 机器学习的多种算法
  • 常见的光源频闪控制方式
  • 20. 云计算-Service MeshServerless
  • 用本地代理 + ZIP 打包 + Excel 命名,优雅批量下载跨域 PDF
  • 基于 ONNX Runtime 的 YOLOv8 高性能 C++ 推理实现
  • Pomian语言处理器 研发笔记(一):使用C++的正则表达式构建词法分析器
  • 浅谈 Python 正则表达式中的 groups()
  • GitLab 安全漏洞 CVE-2025-7739 解决方案
  • GitLab 安全漏洞 CVE-2025-6186 解决方案
  • Mind GPT:理想汽车发布的多模态大模型
  • Day119 持续集成docker+jenkins
  • 汽车企业顾客满意度调查:全周期反馈解码方案(市场调研实践)
  • Unity引擎播放HLS自适应码率流媒体视频
  • Hi3519DV500 AIISP源码分享 臻全彩 黑光全彩摄像机源码
  • python的课外学习生活活动系统
  • JavaWeb 获取应用根路径的全面指南
  • 深度学习 --- 基于MobileNetV3 实现的花卉识别
  • C 语言数据结构与算法的复杂度分析:从理论到实战的效率衡量指南
  • OCR技术全景解析:从传统模板到认知智能的跃迁
  • 8 文本分析
  • JavaSE——高级篇
  • Django 请求生命周期
  • 网络间的通用语言TCP/IP-网络中的通用规则2
  • QNX 性能分析工具(hogs pidin tracelogger)
  • 规避(EDR)安全检测--避免二进制文件落地
  • django+Vue3实现前后端分离式实时聊天室
  • linux应用软件编程:线程
  • 【C++✨】多种 C++ 解法固定宽度右对齐输出(每个数占 8 列)
  • 【Java基础】反射,注解,异常,Java8新特性,object类-详细介绍
  • 鸿蒙中应用框架和应用模型