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

【机器学习-2】 | 决策树算法基础/信息熵

0 序言

本文将系统学习决策树算法,从决策树引入,理解信息熵ID3C4.5算法并剖析优缺点。

读完可初步掌握决策树核心原理及经典算法,

下篇再用一个项目实战来加深巩固知识点。

本文就先对此有个概念,理解下大概的原理就可以了,

具体从项目实战来更好去加强巩固。

以下是针对1、2章节补充数据集展示、详细计算及对比分析后的内容,更适合零基础读者理解:

1 决策树引入

1.1 案例背景

为了能更直观理解决策树的应用场景,

这边给出一个案例背景,

通过这个案例背景来更好理解。

我们先给出完整的14天气象数据集

这里包含4个特征,

分别是outlooktemperaturehumiditywindy

和1个标签,Travel决定是否适合旅游

序号outlook(天气)temperature(温度)humidity(湿度)windy(风力)Travel(是否旅游)
1sunnyhothighFALSEno
2sunnyhothighTRUEno
3overcasthothighFALSEyes
4rainymildhighFALSEyes
5rainycoolnormalFALSEyes
6rainycoolnormalTRUEno
7overcastcoolnormalTRUEyes
8sunnymildhighFALSEno
9sunnycoolnormalFALSEyes
10rainymildnormalFALSEyes
11sunnymildnormalTRUEyes
12overcastmildhighTRUEyes
13overcasthotnormalFALSEyes
14rainymildhighTRUEno

我们的目标是:根据新的气象指标,通过决策树模型预测是否适合出行旅游!!!

1.2 问题本质

决策树的核心实际上就是通过如果……就……的规则拆分数据。

例如,从14天气象数据集中可能提炼出规则:

  • 如果outlook=overcast,那么Travel=yes

如下图红圈圈出来的就是符合要求的。
在这里插入图片描述

  • 如果outlook=sunnyhumidity=normal,那么Travel=yes

如下图中9、11行均符合要求。

在这里插入图片描述

这些规则的构建依赖于对特征的优先级判断

先按哪个特征拆分数据更能降低分类的不确定性?

这就需要引入信息熵来量化不确定性。

2 信息熵基础

2.1 信息熵定义

熵是无序性(不确定性)的度量指标

对于一个事件的所有可能结果(如旅游的结果为yes或no),

若各结果的概率为p1,p2,...,pnp_1, p_2, ..., p_np1,p2,...,pn

则信息熵公式为:

entropy(p1,p2,⋯ ,pn)=−p1log⁡2p1−p2log⁡2p2−⋯−pnlog⁡2pnentropy(p_1,p_2,\cdots,p_n) = -p_1\log_2 p_1 - p_2\log_2 p_2 - \cdots - p_n\log_2 p_nentropy(p1,p2,,pn)=p1log2p1p2log2p2pnlog2pn

  • 概率分布越均匀,熵越大(不确定性越高);
  • 概率分布越集中(某一结果概率接近1),熵越小(不确定性越低)。

2.2 案例计算(基于前面的数据集)

我们以该表1的Travel标签为例,计算初始信息熵,

再对比不同特征分组后的熵,理解熵的变化规律。

步骤1:计算总熵(初始不确定性)

表中共有14条数据,其中:

  • Travel=yes的样本数9(序号3、4、5、7、9、10、11、12、13)
  • Travel=no的样本数5(序号1、2、6、8、14)

因此,yes的概率pyes=9/14p_{yes} = 9/14pyes=9/14,no的概率pno=5/14p_{no} = 5/14pno=5/14

总熵为:
entropy总=−914log⁡2914−514log⁡2514 entropy_{总} = -\frac{9}{14}\log_2\frac{9}{14} - \frac{5}{14}\log_2\frac{5}{14} entropy=149log2149145log2145

代入计算:

log2(9/14)≈−0.609log_2(9/14) \approx -0.609log2(9/14)0.609log2(5/14)≈−1.485log_2(5/14) \approx -1.485log2(5/14)1.485

因此有,

entropy总≈−914×(−0.609)−514×(−1.485)≈0.940 entropy_{总} \approx -\frac{9}{14} \times (-0.609) - \frac{5}{14} \times (-1.485) \approx 0.940 entropy149×(0.609)145×(1.485)0.940

步骤2:按特征分组计算熵(以outlook为例)

outlook有3个取值sunnyovercastrainy

先统计各组中Travel的分布:

  • sunny(共5条)

yes=2(序号9、11),no=3(序号1、2、8)→ pyes=2/5p_{yes}=2/5pyes=2/5pno=3/5p_{no}=3/5pno=3/5

  • overcast(共4条)

yes=4(全为yes)→ pyes=1p_{yes}=1pyes=1pno=0p_{no}=0pno=0

  • rainy(共5条)

yes=3(序号4、5、10),no=2(序号6、14)→pyes=3/5p_{yes}=3/5pyes=3/5pno=2/5p_{no}=2/5pno=2/5

分别计算各组的熵:
entropysunny=−25log⁡225−35log⁡235≈0.971entropyovercast=−1×log⁡21−0×log⁡20=0(因结果确定)entropyrainy=−35log⁡235−25log⁡225≈0.971 \begin{align*} entropy_{sunny} &= -\frac{2}{5}\log_2\frac{2}{5} - \frac{3}{5}\log_2\frac{3}{5} \approx 0.971 \\ entropy_{overcast} &= -1 \times \log_2 1 - 0 \times \log_2 0 = 0 \quad (\text{因结果确定}) \\ entropy_{rainy} &= -\frac{3}{5}\log_2\frac{3}{5} - \frac{2}{5}\log_2\frac{2}{5} \approx 0.971 \\ \end{align*} entropysunnyentropyovercastentropyrainy=52log25253log2530.971=1×log210×log20=0(因结果确定)=53log25352log2520.971

步骤3:对比总熵与分组熵

总熵为0.940

而按outlook分组后,各组的加权平均熵为:

0.971×514+0×414+0.971×514≈0.694 0.971 \times \frac{5}{14} + 0 \times \frac{4}{14} + 0.971 \times \frac{5}{14} \approx 0.694 0.971×145+0×144+0.971×1450.694

显然,分组后的平均熵(0.694)低于总熵(0.940)

说明按outlook拆分后,不确定性降低了

这正是决策树选择特征的核心逻辑!!!

由此,我们结合案例验证分析后可以知道熵的特性。

2.3 熵的特性

  1. 极端概率下熵为0

    outlook=overcast时,所有样本都为yes(概率1),熵=0(结果完全确定)。

  2. 概率均等时熵最大

    若某特征分组中yes和no的比例为1:1(如10个样本中5个yes、5个no),则:

entropy=−0.5log⁡20.5−0.5log⁡20.5=1(此时熵最大)entropy = -0.5\log_2 0.5 - 0.5\log_2 0.5 = 1 \quad (\text{此时熵最大}) entropy=0.5log20.50.5log20.5=1(此时熵最大)

对比表中sunny组(2yes、3no)的熵≈0.971,接近最大值1,说明该组不确定性较高。

  1. 决策的本质是降低熵
    从总熵(0.940)到分组熵(0.694)的下降,体现了按outlook拆分这一决策降低了不确定性。

后续章节的ID3算法,正是通过计算熵的下降幅度(信息增益)来选择最优特征

通过计算能更清晰地展示熵的含义及决策树拆分的逻辑

那就是从初始的不确定性(总熵),到按特征分组后的不确定性降低。

3 ID3与C4.5算法

3.1 ID3算法

3.1.1 原理核心

利用信息增益选择分裂特征,不断分裂节点,直到特征信息增益很小或无特征可选。

信息增益是考虑某因素后熵的减少值,公式为:

Gain(Feature)=I(p,n)−E(Feature)Gain(Feature) = I(p,n) - E(Feature)Gain(Feature)=I(p,n)E(Feature)

其中I(p,n)I(p,n)I(p,n)初始总熵E(Feature)E(Feature)E(Feature)该特征的条件熵

计算各特征信息增益,选最大的作为分裂标准

以天气数据为例,计算outlook、temperature等特征的信息增益,

outlook信息增益Gain(Outlook)=0.940−0.694=0.246Gain(Outlook)=0.940 - 0.694 = 0.246Gain(Outlook)=0.9400.694=0.246

由于其他特征增益更小,故先按outlook分裂

3.1.2 缺点

优先选属性值多的特征,因这类特征易有更大信息增益,

但可能无实际业务意义

比方说用唯一ID做特征,虽增益大,但是却无法挖掘有效规律。

3.2 C4.5算法

3.2.1 改进思路

为解决ID3问题,引入信息增益比选特征。

先计算特征的内在信息,衡量特征自身不确定性

以outlook为例 ,公式为:

I(outlook)=−514log⁡2514−514log⁡2514−414log⁡2414=1.577I(outlook) = -\frac{5}{14}\log_2 \frac{5}{14} - \frac{5}{14}\log_2 \frac{5}{14} - \frac{4}{14}\log_2 \frac{4}{14} = 1.577I(outlook)=145log2145145log2145144log2144=1.577

再用信息增益比作为分裂依据,公式:

GainRatio(Feature)=Gain(Feature)I(Feature)GainRatio(Feature) = \frac{Gain(Feature)}{I(Feature)}GainRatio(Feature)=I(Feature)Gain(Feature)

通过除以内在信息,平衡多值特征的影响,优先选更具业务价值的特征 。

4 决策树算法的优缺点

4.1 优点

  • 直观易懂:以如果……就……规则呈现,像流程图,人类易理解、解释,规则清晰;
  • 无需数据预处理:不要求数据归一化标准化,可直接处理类别型、数值型数据
  • 处理多分类问题:自然适配多分类场景,能有效拆分数据到不同类别

4.2 缺点

  • 过拟合风险:模型易对训练数据细节过度学习泛化能力差(如果训练数据有噪声,决策树会学习噪声规律,导致新数据预测不准);
  • 稳定性差:数据微小变化,可能导致树结构大幅改变,影响预测结果;
  • 类别不平衡敏感:少数类易被多数类淹没分裂时可能优先满足多数类规则

5 小结

决策树算法以如果……就……规则拆分数据做分类,

核心依托信息熵衡量不确定性,ID3用信息增益C4.5用信息增益比选特征优化

它直观易懂、适配多场景,但存在过拟合等问题。

下一篇文章就通过Python具体的项目来加深理解,

从而将本文的理论落地以此来解决实际分类任务,

打好基础后,后续可以进一步探索提升模型泛化能力的方法。

http://www.xdnf.cn/news/16337.html

相关文章:

  • 【RocketMQ】一分钟了解RocketMQ
  • Earth靶机攻略
  • linux线程概念和控制
  • 字符串缓冲区和正则表达式
  • Mingw 与MSYS2 与Cygwin区别
  • Linux如何执行系统调用及高效执行系统调用:深入浅出的解析
  • 基于深度学习的胸部 X 光图像肺炎分类系统(七)
  • 凝思系统6.0.80安装chorme,亲测可用
  • 如何创建或查看具有 repo 权限的 GitHub 个人访问令牌(PAT)
  • mount: /mnt/sd: wrong fs type, bad option, bad superblock on /dev/mmcblk1
  • FitCoach AI:基于React+CloudBase的智能健身教练应用开发全解析
  • 缓存一致性:从单核到异构多核的演进之路
  • Android Jetpack 组件库 ->WorkManager
  • Linux系统架构核心全景详解
  • Unity 实现帧率(FPS)显示功能
  • 11Linux文件压缩与链接实战技巧
  • 深入解析YARN中的FairScheduler与CapacityScheduler:资源分配策略的核心区别
  • Python 数据分析(二):Matplotlib 绘图
  • 小白成长之路-部署Zabbix7(二)
  • 【GoLang#3】:数据结构(切片 | map 映射)
  • Linux726 raid0,raid1,raid5;raid 创建、保存、停止、删除
  • KubeKey安装KubeSphere、部署应用实践问题总结
  • 零基础学习性能测试第四章:从0到1学会编写性能测试报告
  • 【Spring AI】SiliconFlow-硅基流动
  • C# 位运算及应用
  • GStreamer中Element(元素)
  • 面试150 回文数
  • python---字典(dict)
  • 从压缩到加水印,如何实现一站式图片处理
  • HDMI-IN调试:双MIPI支持4K60方案