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

决策树基础学习教育第二课:量化最优分裂——信息熵与基尼系数

 

决策树基础学习教育第二课:量化最优分裂——信息熵与基尼系数

目标:掌握决策树选择“最佳分裂特征”的核心方法,理解决策树如何通过数学指标(信息熵、基尼系数)量化数据纯度,进而优化分裂规则。


一、课程回顾:为什么要量化“最优分裂”?

在第一课中,我们了解到决策树的核心是通过递归分裂特征,将数据划分成“尽可能纯净的子集”(即同一子集中的样本尽量属于同一类别)。但问题来了:如何判断哪种分裂方式能让子集更纯净?

比如,现在有一组数据(特征:天气=晴/雨;温度=高/低;标签:是否去公园=是/否),我们需要从所有可能的特征(天气、温度)和取值(晴/雨、高/低)中,选出一个分裂点,使得分裂后的两个子集里,“去公园”和“不去公园”的样本尽可能“分开”——也就是子集更“纯净”。

这时候,就需要用数学工具来量化“纯净度”,最常见的两个指标是:信息熵(Entropy)基尼系数(Gini Index)


二、信息熵(Entropy):衡量混乱程度的经典指标

1. 信息熵的起源与定义

信息熵最早由香农(信息论之父)提出,用来衡量一个系统的“不确定性”或“混乱程度”。在决策树中,信息熵表示当前数据集中类别的混杂程度——熵值越高,说明样本类别越分散(越不纯净);熵值越低,说明样本类别越集中(越纯净)。

公式

对于一个数据集 D,包含 C 个类别(比如分类任务中的“是/否”),每个类别的样本占比为 p_i(第 i 类样本数/总样本数),则信息熵 Ent(D) 的计算公式为:


Ent(D) = -\sum_{i=1}^{C} p_i \log_2 p_i

(注:对数的底数通常取2,单位是“比特”;若 p_i=0,约定 0 \log 0 = 0)

2. 举个例子:计算不同数据集的熵

假设我们有一个简单的数据集(标签:是否去公园),共4个样本:

  • 情况1:全部样本都是“去公园”(4个“是”,0个“否”)→ 类别完全纯净。

    • p_{是}=4/4=1, p_{否}=0/4=0

    • Ent(D) = - (1 \times \log_2 1 + 0 \times \log_2 0) = - (1 \times 0 + 0) = 0 (熵为0,最纯净!)

  • 情况2:2个“去公园”(是),2个“不去公园”(否)→ 类别均匀分布。

    • p_{是}=2/4=0.5, p_{否}=2/4=0.5

    • Ent(D) = - (0.5 \times \log_2 0.5 + 0.5 \times \log_2 0.5) = - (0.5 \times (-1) + 0.5 \times (-1)) = 1 (熵为1,中等混乱)

  • 情况3:1个“是”,3个“否”→ 类别偏向“否”。

    • p_{是}=1/4=0.25, p_{否}=3/4=0.75

    • Ent(D) = - (0.25 \times \log_2 0.25 + 0.75 \times \log_2 0.75) \approx - (0.25 \times (-2) + 0.75 \times (-0.415)) \approx 0.811 (熵比情况2低,更纯净)

结论:熵值越小,数据越纯净;熵值越大,数据越混乱。决策树的目标就是通过分裂特征,让分裂后的子集熵值尽可能小。


三、基尼系数(Gini Index):另一种纯度度量方式

除了信息熵,决策树算法(如CART树)还常用基尼系数来衡量数据的不纯度。它的核心思想是:基尼值越小,数据越纯净

公式

对于数据集 D,基尼系数 Gini(D) 的计算公式为:


Gini(D) = 1 - \sum_{i=1}^{C} p_i^2

(p_i 仍是第 i 类样本的占比)

2. 举个例子:对比信息熵与基尼系数

还是用上面的4个样本数据(是否去公园):

  • 情况1(全“是”):p_{是}=1, p_{否}=0 → Gini(D) = 1 - (1^2 + 0^2) = 0 (最纯净)。

  • 情况2(2“是”+2“否”):p_{是}=0.5, p_{否}=0.5 → Gini(D) = 1 - (0.5^2 + 0.5^2) = 1 - 0.5 = 0.5。

  • 情况3(1“是”+3“否”):p_{是}=0.25, p_{否}=0.75 → Gini(D) = 1 - (0.25^2 + 0.75^2) = 1 - (0.0625 + 0.5625) \approx 0.375。

对比信息熵的结果(情况2熵=1,情况3熵≈0.811),基尼系数的数值范围和熵不同,但趋势一致:值越小,数据越纯净


四、决策树如何用熵/基尼系数选择最优分裂?

1. 核心逻辑:分裂后子集的总不纯度下降越多越好

决策树在尝试每个可能的特征和取值(比如“天气=晴天?”“温度=高温?”)时,会计算:

  • 分裂前的总不纯度(当前节点的熵或基尼系数)。

  • 分裂后的总不纯度(将数据分成多个子集后,每个子集的不纯度按样本数加权求和)。

  • 不纯度的减少量(增益):分裂前的不纯度 - 分裂后的不纯度。

最优分裂点就是让这个“不纯度减少量”最大的那个特征和取值!

2. 具体步骤(以信息熵为例)

假设当前节点有 N 个样本,我们要尝试分裂特征 A(比如“天气”),它有 V 个取值(比如“晴”“雨”)。分裂过程如下:

  1. 按特征 A 的取值 v 划分子集:将数据分成 V 组(如“天气=晴”的子集 D_1,“天气=雨”的子集 D_2)。

  2. 计算每个子集的熵:Ent(D_v)(v=1,2,…,V)。

  3. 计算分裂后的加权熵

    Ent_{split}(D,A) = \sum_{v=1}^{V} \frac{|D_v|}{|D|} Ent(D_v)
    

(|D_v| 是子集 D_v 的样本数,|D| 是当前节点总样本数)。

  1. 计算信息增益(Information Gain)

    Gain(D,A) = Ent(D) - Ent_{split}(D,A)
    

(即分裂前的熵 - 分裂后的加权熵,增益越大,说明分裂后子集更纯净)。

决策树算法(如ID3树)会选择让 Gain(D,A) 最大的特征 A 作为当前节点的分裂点!

(如果是CART树,则会选择让基尼系数减少最多的特征,即最大化 Gini(D) - Gini_{split}(D,A))。


五、举个实际例子:用熵选择“是否去公园”的分裂点

假设我们有5个样本(特征:天气=晴/雨;标签:是否去公园=是/否),数据如下:

样本天气是否去公园
1
2
3
4
5

步骤1:计算当前节点(未分裂)的熵

  • 总样本数 |D|=5,其中“是”(去公园)4个,“否”1个。

  • p_{是}=4/5=0.8, p_{否}=1/5=0.2

  • Ent(D) = - (0.8 \times \log_2 0.8 + 0.2 \times \log_2 0.2) \approx - (0.8 \times (-0.322) + 0.2 \times (-2.322)) \approx 0.722

步骤2:尝试按“天气”分裂

  • 子集1(天气=晴):样本1,2,5(共3个),“是”3个,“否”0个。

    • p_{是}=3/3=1, p_{否}=0/3=0 → Ent(D_{晴}) = - (1 \times \log_2 1 + 0 \times \log_2 0) = 0

  • 子集2(天气=雨):样本3,4(共2个),“是”0个,“否”2个。

    • p_{是}=0/2=0, p_{否}=2/2=1 → Ent(D_{雨}) = - (0 \times \log_2 0 + 1 \times \log_2 1) = 0

  • 分裂后的加权熵

    
    Ent_{split}(D,天气) = \frac{3}{5} \times 0 + \frac{2}{5} \times 0 = 0
    
  • 信息增益

    
    Gain(D,天气) = Ent(D) - Ent_{split}(D,天气) = 0.722 - 0 = 0.722
    

(如果尝试其他特征,比如“温度”,计算出的增益可能更小——比如只有0.3,则“天气”就是当前最优分裂点!)


六、本课小结与课后思考

本课核心:

  1. 信息熵基尼系数 是量化数据纯净度的数学工具——值越小,数据越纯净。

  2. 决策树通过计算每个可能分裂点的“信息增益”(或基尼减少量),选择让子集最纯净的特征和取值作为分裂规则。

  3. 核心公式:信息增益 Gain = Ent(D) - \sum \frac{|D_v|}{|D|} Ent(D_v),增益越大越好!

课后思考题:

  1. 如果一个数据集的所有样本都属于同一类别(比如5个全是“去公园”),它的信息熵是多少?为什么?

  2. 为什么决策树不直接用“分类准确率”来选择分裂点,而是用信息熵/基尼系数?

  3. 尝试用自己的生活例子(比如判断“明天穿什么衣服”),列出可能的特征(天气、温度…),并思考如何用熵来量化“穿外套”和“不穿外套”的子集纯度?

下一课预告:我们将动手实践!用Python的sklearn库构建第一个决策树模型(分类任务),并可视化这棵树的规则,直观看到“信息熵如何指导分裂”! 🌳📊

http://www.dtcms.com/a/347814.html

相关文章:

  • 01_Python的in运算符判断列表等是否包含特定元素
  • [Vid-LLM] 创建和训练Vid-LLMs的各种方法体系
  • crypto.randomUUID is not a function
  • 一个备份、去除、新增k8s的node标签脚本
  • Redis(八股二弹)
  • 玳瑁的嵌入式日记D24-0823(数据结构)
  • 每日一题8.23
  • Day26 树的层序遍历 哈希表 排序算法 内核链表
  • 线程池理解
  • CMake安装教程
  • 传统 AI 与生成式 AI:IT 领导者指南
  • 10.Shell脚本修炼手册---脚本的条件测试与比较
  • 如何查看MySQL 的执行计划?
  • 引领GEO优化服务新潮流 赋能企业数字化转型
  • 信贷模型域——信贷获客模型(获客模型)
  • AI大模型 限时找我领取
  • Transformer核心概念I-token
  • Java:对象的浅拷贝与深拷贝
  • 获取高德地图经纬度解析地址的免费API接口(无调用限制)
  • JWT实现Token登录验证
  • 任务型Agent:执行计划详细设计
  • 计算机组成原理(11) 第二章 - 存储系统的基本概念
  • Introduction to GIS ——Chapter 1(Introduction)
  • 控制建模matlab练习15:线性状态反馈控制器-④最优化控制LQR
  • 动态内存详解
  • 图、最小生成树与最短路径
  • 算法练习-最长连续序列
  • 最短路径和关键路径的算法
  • Linux学习:信号的保存
  • 【什么是大模型自注意力机制?】