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

【机器学习】4 ——熵

机器学习4 ——熵


文章目录

  • 机器学习4 ——熵
  • 前言


前言

熵衡量随机变量不确定性,由克劳德·香农(Claude Shannon)在1948年提出,称为香农熵。反映了一个系统中信息的混乱程度或信息量。

其定义为:
H ( P ) = − ∑ x P ( x ) l o g P ( x ) H(P)=-\sum_{x}^{} P(x)logP(x) H(P)=xP(x)logP(x)

  • 其中:X 是一个随机变量,它有 𝑛 种可能的取值
  • P(x)是X 取值为 x的概率。
  • 熵 H( P) 表示随机变量 X 的信息不确定性,单位通常是比特(bits)。

如果所有事件发生的概率相等,熵最大。这时系统的不可预测性最高。
如果某个事件的概率为 1(确定发生),熵为 0,这时系统的不可预测性为零。


香农熵可以用来描述信息传输中的不确定性。假设你正在接收一个信息流:

  • 完全不确定:如果每个符号都以相同的概率出现(如一枚公平硬币的正反面),则你无法预测下一个符号,系统的熵最大。
  • 完全确定:如果你知道每次接收的符号都是固定的(如一枚失衡硬币总是正面朝上),熵为零,因为你不需要额外的信息去描述这个符号的状态。

熵的概念帮助解释如何对数据进行压缩。熵越高,意味着需要更多的比特来精确编码这些数据。熵越低,数据压缩的潜力越大。

因为数据压缩就是相同的符号不必反复存储(可能不严谨,有人知道更详细可以评论区科普一下!)

二进制随机变量的熵
考虑一个简单的例子,随机变量 X 代表抛硬币的结果。假设X 只有两个可能的取值,“正面”(1)和"反面"(0),其概率为𝑝(1)=0.5,𝑝(0)=0.5,熵为:

H(X)=−(0.5log 0.5+0.5log 0.5)=−(0.5×(−1)+0.5×(−1))=1 bit

这个结果意味着,对于一枚公平的硬币,我们需要 1 比特来表示它的结果。

不公平硬币
如果硬币是偏向的,比如 p(1)=0.9,p(0)=0.1,则熵为:

H(X)=−(0.9log 0.9+0.1log 0.1)≈0.469 bit

由于硬币的结果倾向于 “正面”(1),系统的不确定性减小,熵也减少了。此时我们需要的比特数更少。

信息熵的应用

数据压缩:熵是衡量数据压缩的极限。熵越高,表示数据越难以压缩;熵越低,数据压缩率越高。霍夫曼编码和算术编码等数据压缩算法就是基于熵的原理设计的。
v
信息传输:在通信系统中,熵用于估计数据传输中的最小编码长度。一个理想的编码系统应尽可能接近熵的极限。
v
机器学习:在决策树算法(如 ID3、C4.5 和 CART)中,熵用于衡量数据集的纯度。决策节点的选择基于信息增益(熵的变化),从而决定哪个特征对划分数据最有价值。
v
密码学:在密码学中,熵用于衡量密钥的随机性。熵越高,密钥的随机性和安全性越高。低熵的密钥容易被攻击者预测。
v
自然语言处理:熵用于衡量语言中的信息量,帮助理解文本复杂度和压缩潜力。
v
经济学:在经济学中,熵理论被应用于市场分析和资源分配,以衡量系统的混乱度和均衡状态。


http://www.kler.cn/a/299450.html

相关文章:

  • 【基于SprintBoot+Mybatis+Mysql】电脑商城项目之用户注册
  • TCL C++开发面试题及参考答案
  • 0 基础学运维:解锁 K8s 云计算运维工程师成长密码
  • ROS2---基础操作
  • MySQL查询优化(三):深度解读 MySQL客户端和服务端协议
  • java+vue项目部署记录
  • K8S - Emptydir - 取代ELK 使用fluentd 构建logging saidcar
  • 3.无人机介绍
  • 携手浙商证券、华锐技术,共话交易技术的创新与应用
  • 论文翻译:arxiv-2024 Benchmark Data Contamination of Large Language Models: A Survey
  • 【南京工业大学主办,JPCS出版】自动化、电气控制系统与设备
  • Linux线程管理进阶:分离,等待、终止与C++11线程接口的封装实践
  • LeetCode - 16 最接近的三数之和
  • C++通过返回值和引用参数赋值局部变量有什么区别,有什么风险
  • Redis学习——List的连锁更新如何解决?ListPack算法如何改变?
  • python测试开发---vue基础
  • C++设计模式——Mediator中介者模式
  • python-游戏自动化(二)(OpenCV图像运用基础)
  • 通信工程学习:什么是IP-CAN(IP连接接入网)
  • 【鸿蒙应用开发】常见的容器组件:ColumnSplit、RowSplit和Flex
  • Mac M1 配置go环境
  • 用亚马逊云科技Graviton高性能/低耗能处理器构建AI向量数据库(下篇)
  • 【C++ 面试题】构造函数和析构函数你了解多少呢?
  • 深入探索Java中的分布式锁服务与Zookeeper集成
  • 【FastAPI】文件响应方法StreamingResponse和 FileResponse的用法和场景
  • 在IDEA中如何创建web项目?——不使用Archetype