机器学习中的信息论

2025年6月4日 | 阅读 8 分钟

信息论是数学的一个分支,它在通信理论的框架内处理信息的度量问题,但有时,信息也可以被视为一个独立的数学主题。它讨论诸如数据压缩、信号处理极限和数据高效传输等主题。

本质上,它归结为如何量化消息或事件中包含的信息量。因此,可以合理地认为这个概念可以推广到随机变量,使用相同的度量,称为基于概率的熵。

计算信息和熵的能力在机器学习中非常重要。这些概念是决策树构建、特征选择和分类模型开发等关键技术的基础。因此,机器学习从业者必须非常了解信息论。

这是一篇关于信息熵的入门指南。

阅读完本文,您将了解:

  • 信息论与概率、数据压缩和机器学习之间的关系。
  • 它以比特为单位量化了一个事件的“惊喜”程度。
  • 熵是衡量在给定事件产生的概率分布的条件下,描述一个事件所需信息量的度量。

信息论的关键概念

1. 熵

它用于衡量给定随机变量的随机性、概率或更准确地说是不确定性水平。在学习理论的背景下,它用于确定描述数据集所需的信息量。

公式

这里的熵是指一个离散随机变量 X 的统计量 H(X),该随机变量具有可能的输出 x1, x2, .....xn 和概率质量函数 P(X)。

Information Theory in Machine Learning

2. 互信息

相对熵通过一个随机变量的概率在了解另一个随机变量后降低不确定性的程度来定义。两个因素之间信息交换的度量,传达了因自变量变化而引起的因变量的方差。在机器学习中,互信息可用于选择相关的输入变量,其中许多变量与目标变量相关。

公式

两个随机变量 X 和 Y 的互信息 I(X; Y) 定义为:

Information Theory in Machine Learning

3. Kullback-Leibler (KL) 散度

一个概率分布相对于第二个概率分布的 KL 散度,它简单地衡量前者与期望分布之间的差异程度。它们在机器学习系统中使用,用于衡量数据的真实分布与模型产生的分布之间的差异。可以计算两个分布之间的 KL 散度,以及相同分布但顺序相反时的 KL 散度,并得到不同的结果。

公式

对于同一个变量 X 的两个分布 P 和 Q,KL 散度 D KL(P∥Q) 定义如下:

Information Theory in Machine Learning

信息论在机器学习中的应用

1. 特征选择

在机器学习中,为构建预测模型而选择信息量最大的变量的过程称为特征选择。为此,通常使用信息论度量,尤其是互信息。通过每个特征与目标变量之间的互信息,可以量化每个特征提供的关于目标变量的信息量。互信息量越大的特征越相关,通常被保留,而贡献几乎为零的特征则被移除。它还可以通过消除冗余或不相关的特征来降低维度,提高模型性能,并减少过拟合。

2. 决策树

因此,决策树非常依赖信息论的概念,特别是用于确定如何在每个节点上分割数据。特别是,熵用于量化数据集的杂质或不确定性,信息增益用于评估潜在分割的质量。信息增益应用于计算当数据按某个特征划分时,熵会减少多少。选择导致最大信息增益的分割。

信息增益公式为:

Information Theory in Machine Learning

例如,H(T) 是整个数据集的熵,H(Tv) 是属性 A 取值 v 的数据集子集的熵。它通过递归地开发一个旨在最小化每个级别不确定性的树结构来继续。因此,通过系统地选择最能减少不确定性的特征,决策树成为分类和回归问题的强大工具。

3. 正则化和模型选择

KL 散度是正则化或模型选择的强大工具,尤其是在概率框架中,并在现代机器学习中被广泛使用。例如,KL 散度用作贝叶斯神经网络和变分推断中度量差异的指标,在这些场景中,我们希望用近似后验分布来逼近真实后验分布。

这种最小化可以防止模型过拟合,并最小化模型的发散,以产生更具泛化能力的预测。一个突出的例子是使用 KL 散度来正则化变分自编码器(VAE)学习到的潜在空间,例如,使用一个编码函数使潜在空间具有标准正态分布。

4. 信息瓶颈

信息瓶颈原理是一种学习数据高效且简洁表示的方法。目标是压缩输入数据,使其能够保留尽可能多的与输出相关的信息。基本上,它包括最大化压缩表示与输出之间的互信息,同时最小化输入与压缩表示之间的互信息。

信息论在 Python 中的实际应用

1. 在 Python 中计算熵

熵是概率分布的可预测性或不确定性的度量。这是一个 Python 函数 entropy 的定义,用于借助 NumPy 计算给定分布的熵。

输出

 
 Entropy: 1.4854752972273344  

具有熵值为 [0.2, 0.3, 0.5] 的概率分布是这个值。较高的熵值意味着该分布的可能结果中不确定性更高。

2. 用于特征选择的互信息

一个变量提供关于另一个变量的信息量称为互信息。正式的使用方法是评估每个输入特征在预测目标变量时的信息量。

以下代码使用 sklearn.feature_selection 中的 mutual_info_classif 来计算互信息:

输出

 
Mutual Information: [0.47729004 0.29292338 0.99160042 0.9899756 ]   

这些是 Iris 数据集中每个特征与目标变量之间的互信息得分。得分越高,这些特征在预测方面的作用越大。

3. Python 中的 KL 散度

Kullback-Leibler (KL) 散度是衡量一个概率分布相对于参考分布的散度。在以下代码中,我们展示了如何使用 scipy.stats 中定义的 entropy 函数来计算 KL 散度。

输出

 
KL Divergence: 0.04575811092471789   

因此,分布 p = [0.1, 0.4, 0.5] 和 q = [0.2, 0.3, 0.5] 显示出它们的分布不同。较高的值表示两个分布差异较大,而较低的值表示差异较小。

计算事件的信息量

信息论中的一个重要思想是衡量一个事件所包含的信息量。关键的直觉是,罕见和不可能发生的事件更令人惊讶,因此携带更多信息,而常见和可能发生的事件不那么引人注目,因此携带的信息更少。

  • 低概率事件 → 高信息量(令人惊讶)
  • 高概率事件 → 低信息量(不令人惊讶)

示例

1. 公平的抛硬币

一个公平的硬币(有 50% 的几率(0.5)正面或反面朝上)。

输出

 
p(x)=0.500, information: 1.000 bits   

因此,每次抛掷都会提供 1 比特的信息。实际上,重复抛掷 n 次可以获得 n 比特的信息。

2. 有偏的硬币

如果正面朝上的概率只有 0.1(即只有 10%),那么该事件就更罕见,信息量更大。

输出

 
p(x)=0.100, information: 3.322 bits   

这个罕见的事件表示为超过 3 比特。

3. 公平的骰子投掷

一个六面的公平骰子,每个数字出现的概率是 1/6 ≈ 0.167。现在,计算掷出 6 的信息量。

输出

 
p(x)=0.167, information: 2.585 bits   

因此,比抛硬币的可能性更小,因此携带的信息量更大。

获得随机变量的熵

信息论信息衡量随机变量可以包含多少数据。这被称为香农熵(或简称熵)。它可以定义为给定概率分布的事件的描述或编码的平均比特数。

定义

熵定义为离散随机变量 X,其取值为 k ∈ K,概率为 p (k)。

Information Theory in Machine Learning

其中

  • 如果您的熵是以比特为单位的,这个错误不会给您带来任何问题,除了您会感到困惑,关于发生了什么,这种困惑我鼓励您通过阅读 log 2 来解决。
  • 求和项是对变量的所有可能输出进行的。
  • 在自然对数的情况下,结果以纳特(nats)为单位。

熵捕捉了所有可能结果的预期信息量。当所有结果都相同时,熵最高;当一个结果确定时,熵最低。

示例:公平的骰子投掷

考虑一个六面的公平骰子。每个数字出现的概率为 1/6。熵计算如下:

输出

 
Entropy: 2.585 bits   

这仅在单个公平骰子投掷的所有结果都同样可能时才成立,这与计算单个公平骰子投掷的信息量所返回的结果相同。

使用 SciPy 计算熵

我们可以使用 scipy.stats.entropy() 函数来计算熵。

输出

 
Entropy: 2.585 bits  

结论

本文介绍了信息熵及其与信息论和机器学习的相关性。通过信息论进行数据压缩和传输,以概率作为衡量事件“惊喜”或信息含量的指标(以比特为单位)。熵是表示随机变量结果所需的平均信息量,即其不确定性的度量。

然而,在机器学习中,事实证明这一点是正确的,而且我们确实拥有熵、互信息和 KL 散度等信息论概念,它们至关重要。这些概念有助于选择最相关的特征,增强模型正则化,并在训练过程中做出更好的决策。应用这些度量使我们能够获得更高效、更具可解释性且更准确的模型。信息论的普遍特征对于分析和改进各种机器学习算法非常有用。