【机器学习】机器学习中用到的高等数学知识-7.信息论 (Information Theory)

server/2024/11/20 22:57:44/
  • 熵 (Entropy):用于评估信息的随机性,常用于决策树和聚类算法。
  • 交叉熵 (Cross-Entropy):用于衡量两个概率分布之间的差异,在分类问题中常用。

信息论作为处理信息量和信息传输的数学理论,在机器学习中具有广泛的应用。本文将围绕熵(Entropy)和交叉熵(Cross-Entropy),探讨它们的定义、公式推导、应用场景及代码实现。

1. 熵 (Entropy)

1.1 定义

熵衡量信息的不确定性或随机性。它可以理解为“信息的平均量”,即某一分布下每个事件的信息量的期望值。

1.2 数学公式

对于一个离散随机变量 X,取值为 x_1, x_2, \ldots, x_n,其熵定义为:

H(X) = -\sum_{i=1}^{n} P(x_i) \log P(x_i)

其中:

  • P(x_i) 是事件 x_i 的概率;
  • log 通常以 2 为底(信息量以比特为单位)或以 e 为底(信息量以 nat 为单位)。
1.3 推导过程

熵的来源可以从信息量(Information Content)定义出发:

I(x_i) = -\log P(x_i)

熵是信息量的加权平均值,因而有:

H(X) = \mathbb{E}[I(x)] = -\sum_{i=1}^n P(x_i) \log P(x_i)

1.4 应用场景
  1. 决策树算法:选择分裂点时使用熵减少量(信息增益)。
  2. 聚类算法:评估聚类后类别分布的随机性。
  3. 语言模型:评估文本序列的不确定性。
1.5 熵的Python代码实现
import numpy as np# 定义熵函数
def entropy(p):return -np.sum(p * np.log2(p))# 示例概率分布
p = np.array([0.5, 0.25, 0.25])
print("熵:", entropy(p))
熵: 1.5
1.6 图示

熵的图示展示了单一事件概率分布变化时的熵值变化。

import matplotlib.pyplot as plt
import numpy as npp = np.linspace(0.01, 0.99, 100)
entropy_values = -p * np.log2(p) - (1 - p) * np.log2(1 - p)plt.plot(p, entropy_values, label='Entropy')
plt.xlabel('P(x)')
plt.ylabel('H(X)')
plt.title('Entropy vs Probability')
plt.legend()
plt.grid()
plt.show()


2. 交叉熵 (Cross-Entropy)

2.1 定义

交叉熵用于衡量两个概率分布之间的差异。给定真实分布 P 和预测分布 Q,其定义为:

H(P, Q) = -\sum_{i=1}^n P(x_i) \log Q(x_i)

当 P 和 Q 相等时,交叉熵退化为熵。

2.2 推导过程

交叉熵的来源是 Kullback-Leibler (KL) 散度:

D_{KL}(P || Q) = \sum_{i=1}^n P(x_i) \log \frac{P(x_i)}{Q(x_i)}

其中:

H(P, Q) = H(P) + D_{KL}(P || Q)

说明交叉熵包含了真实分布的熵和两分布之间的 KL 散度。

2.3 应用场景
  1. 分类问题:在机器学习中作为目标函数,尤其是多分类问题中的 Softmax 回归。
  2. 语言模型:衡量生成模型输出的分布与目标分布的匹配度。
  3. 聚类算法:评估聚类后的分布与目标分布的差异。
2.4 交叉熵的Python代码实现
import numpy as np# 定义交叉熵函数
def cross_entropy(p, q):return -np.sum(p * np.log2(q))# 示例真实分布和预测分布
p = np.array([1, 0, 0])  # 实际类别
q = np.array([0.7, 0.2, 0.1])  # 预测分布
print("交叉熵:", cross_entropy(p, q))
交叉熵: 0.5145731728297583
2.5 图示

交叉熵的图示对比了真实分布和不同预测分布间的差异。

import matplotlib.pyplot as plt
import numpy as npdef cross_entropy(p, q):return -np.sum(p * np.log2(q))p = np.array([1, 0, 0])
q_values = [np.array([0.7, 0.2, 0.1]), np.array([0.4, 0.4, 0.2])]ce_values = [cross_entropy(p, q) for q in q_values]
labels = ['Q1 (Closer)', 'Q2 (Further)']plt.bar(labels, ce_values, color=['blue', 'orange'])
plt.title('Cross-Entropy Comparison')
plt.ylabel('Cross-Entropy')
plt.show()


3. 实际案例:分类问题中的交叉熵

在图像分类中,交叉熵是常用的损失函数。对于一个三类分类问题:

  • 真实类别为 [1, 0, 0]。
  • 模型预测的概率分布为 [0.7, 0.2, 0.1]。

交叉熵计算结果为 0.514,比完全随机预测([1/3, 1/3, 1/3])的交叉熵小,表明模型预测效果更好。


总结

熵和交叉熵是信息论中的核心概念,其在机器学习中的重要性不可忽视。通过公式理解、代码实现和图示分析,我们可以更好地掌握这些工具,并有效地将其应用于实际问题中。


拓展阅读

机器学习】数学知识:对数-CSDN博客
机器学习机器学习中用到的高等数学知识-2.概率论与统计 (Probability and Statistics)_机器学习概率-CSDN博客


http://www.ppmy.cn/server/143557.html

相关文章

CSS一些练习过程

1.字体样式 代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title…

云原生之运维监控实践-使用Telegraf、Prometheus与Grafana实现对InfluxDB服务的监测

背景 如果你要为应用程序构建规范或用户故事&#xff0c;那么务必先把应用程序每个组件的监控指标考虑进来&#xff0c;千万不要等到项目结束或部署之前再做这件事情。——《Prometheus监控实战》 去年写了一篇在Docker环境下部署若依微服务ruoyi-cloud项目的文章&#xff0c;当…

《物理学进展》

投稿指南 《物理学进展》是中国物理学会主办的物理类刊物&#xff0c;双月刊&#xff0c;为国家中文核心期刊。刊稿内容包括物理学的各分支学科&#xff0c;着重反映物理学前沿领域的重大突破和新兴方向中的活跃状态&#xff0c;以及传统和交叉学科的最新进展。稿件类型包括对某…

童年的快乐,矫平机为玩具打造安全品质

童年的快乐&#xff0c;矫平机为玩具打造安全品质 每个人的童年都充满了欢笑和快乐&#xff0c;玩具作为这段时光中不可或缺的伙伴&#xff0c;其安全性和品质尤为重要。矫平机在这个领域扮演着重要角色&#xff0c;它确保了玩具材料的平整和安全&#xff0c;为孩子们的童年增…

高斯数据库Postgresql死锁和锁表解决方法

解决死锁进方法&#xff1a; 查询死锁进程列表 select * from pg_stat_activity where waiting‘t’ 发现有好几条挂起的记录&#xff0c;记录下所有或需要解锁的pid 解决死锁进程 select pg_cancel_backend(‘pid值’) 解决完后&#xff0c;刷新后测试&#xff0c;恢复正…

C语言入门到精通(第六版)——第十六章

16、网络套接字编程 16.1、计算机网络基础 计算机网络技术是计算机技术和通信技术相结合的产物&#xff0c;代表计算机的一个重要发展方向。了解计算机的网络结构&#xff0c;有助于用户开发网络应用程序。 16.1.1、IP地址 为了使网络上的计算机能够彼此识别对方&#xff0c;…

Linux进阶:软件安装、网络操作、端口、进程等

软件安装 yum 和 apt 均需要root权限 CentOS系统使用&#xff1a; yum [install remove search] [-y] 软件名称 install 安装remove 卸载search 搜索-y&#xff0c;自动确认 Ubuntu系统使用 apt [install remove search] [-y] 软件名称 install 安装remove 卸载search 搜索-y&…

kafka集群部署搭建【详细版】

文章目录 前言一、环境简介1.环境简介2.部署清单3.组件版本 二、部署步骤1.jdk部署2.zookeeper安装2.1 cnode1节点2.2 cnode2 节点2.3 cnode3节点 3.kafka安装3.1 cnode1节点3.2 cnode2节点3.3 cnode3节点 三、服务启动四、总结 前言 因项目需要&#xff0c;需搭建kafka集群进…