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

决策树学习笔记

1、信息熵

信息熵的概念

信息熵由克劳德·香农提出,用于量化信息的不确定性或随机性。在信息论中,熵表示一个随机事件所需的最小平均信息量(通常以比特为单位)。熵越高,系统的不确定性越大;熵越低,确定性越强。

数学定义

对于离散随机变量 ( X ),其可能的取值为 (x_1, x_2, \dots, x_n ),对应的概率为 ( p(x_i) ),信息熵 ( H(X) ) 定义为:[ H(X) = -\sum_{i=1}^{n} p(x_i) \log_2 p(x_i) ]其中,( \log_2 ) 表示以 2 为底的对数,确保单位为比特。若概率 ( p(x_i) = 0 ),则对应项定义为 0(因为( \lim_{p \to 0} p \log p = 0 ))。

关键性质

  1. 非负性( H(X) \geq 0 ),当且仅当 ( X ) 为确定事件(某概率为 1)时熵为 0。
  2. 最大值:对于 ( n ) 个可能事件,当所有事件等概率 ( p(x_i) = 1/n ) 时,熵达到最大值 ( \log_2 n )。
  3. 可加性:独立随机变量 ( X ) 和 ( Y ) 的联合熵满足 ( H(X, Y) = H(X) + H(Y) )。

应用场景

  • 数据压缩:熵表示无损压缩的极限,实际压缩算法的效率常以熵为基准。
  • 通信编码:香农的信道编码定理指出,通信速率低于信道容量(与熵相关)时可实现可靠传输。
  • 机器学习:决策树算法(如 ID3、C4.5)使用熵衡量特征的分裂效果。

示例计算

假设一个二元随机变量 ( X )(如硬币投掷),正面概率 ( p = 0.6 ),反面 ( 1-p = 0.4 ),其熵为: [ H(X) = -0.6 \log_2 0.6 - 0.4 \log_2 0.4 \approx 0.971 \text{ 比特} ]
当 ( p = 0.5 )(公平硬币)时,熵达到最大值 1 比特。

熵与不确定性

熵的本质是描述系统的不确定性。例如:

  • 天气预报中“晴天概率 100%”的熵为 0,无信息量。
  • “晴雨各 50%”的熵为 1 比特,需 1 比特信息消除不确定性。

2、决策树的基本概念

决策树是一种监督学习算法,用于分类和回归任务。其结构类似于树形流程图,通过一系列规则对数据进行分割,最终形成预测模型。每个内部节点代表一个特征测试,分支代表测试结果,叶节点代表最终的决策或输出值。

核心组成部分

  1. 根节点:树的起始点,包含所有样本。
  2. 内部节点:对某一特征进行判断,产生分支。
  3. 叶节点:最终的分类结果或回归值。
  4. 分支:特征测试的不同可能路径。

关键算法

决策树的构建依赖以下算法:

  • ID3:使用信息增益选择特征,仅支持分类任务。
  • C4.5:改进ID3,引入信息增益率处理连续特征和缺失值。
  • CART:支持分类(基尼系数)和回归(均方误差),生成二叉树。

数学公式示例

  1. 信息熵(衡量不确定性):
    [ H(S) = -\sum_{i=1}^{c} p_i \log_2 p_i ]其中 ( p_i )是类别 ( i ) 在集合 ( S ) 中的比例。

  2. 基尼系数(用于CART分类):
    [ Gini(S) = 1 - \sum_{i=1}^{c} p_i^2 ]

实际应用步骤

  1. 特征选择:根据指标(如信息增益、基尼系数)选择最佳分割特征。
  2. 树的生长:递归分割数据,直到满足停止条件(如节点纯度、最大深度)。
  3. 剪枝:防止过拟合,通过预剪枝(提前终止)或后剪枝(修剪已生成的树)。

优缺点分析

  • 优点:直观易解释、无需数据标准化、支持混合特征类型。
  • 缺点:容易过拟合、对噪声敏感、可能忽略特征间的相关性。

示例代码(Python)

from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_iris# 加载数据
data = load_iris()
X, y = data.data, data.target# 训练模型
clf = DecisionTreeClassifier(criterion='gini', max_depth=3)
clf.fit(X, y)# 预测
print(clf.predict([[5.1, 3.5, 1.4, 0.2]]))

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

相关文章:

  • C++类和对象(3)
  • C++刷题常用方法
  • 4.组合式API知识点(2)
  • 低速信号设计之 MII 篇
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘Cython’问题
  • 【大模型记忆实战Demo】基于SpringAIAlibaba通过内存和Redis两种方式实现多轮记忆对话
  • 【打怪升级 - 01】保姆级机器视觉入门指南:硬件选型 + CUDA/cuDNN/Miniconda/PyTorch/Pycharm 安装全流程(附版本匹配秘籍)
  • LSTM+Transformer炸裂创新 精准度至95.65%
  • 一款功能全面的文体场所预约小程序
  • C#初学知识点总结
  • linux-计划任务
  • 数据结构自学Day12-- 排序算法2
  • <另一种思维:语言模型如何展现人类的时间认知>读后总结
  • 高等数学-矩阵知识
  • Matlab学习笔记:矩阵基础
  • repmgr+vip实现对业务透明的高可用切换
  • 首次启动 - OpenExo
  • 【matlab】无人机控制算法开发与应用流程
  • 基于Spark图计算的社会网络分析系统
  • 使用docker(ubuntu)搭建web环境(php,apahce2)
  • C语言第二章分支与循环(下)——猜数字游戏
  • MES 管理系统中的仓库管理功能有哪些用途
  • 直接插入排序和冒泡排序
  • MyBatis拦截器插件:实现敏感数据字段加解密
  • 汽车安全 | 汽车安全入门
  • 力扣刷题 -- 101.对称二叉树
  • 贪心算法Day3学习心得
  • LeetCode 刷题【11. 盛最多水的容器】
  • 数据库 × 缓存双写策略深度剖析:一致性如何保障?
  • 《3D printed deformable sensors》论文解读