【机器学习】揭秘机器学习的“三剑客”:信息熵、条件熵与信息增益

🌈 个人主页:danci_
🔥 系列专栏:《人工智能》
💪🏻 制定明确可量化的目标,坚持默默的做事。
机器学习的“三剑客”:信息熵、条件熵与信息增益
✨欢迎加入机器学习“三剑客”学习✨
在信息爆炸的浪潮中,机器学习以其独特的魅力引领着技术革新的方向。作为探索未知的勇士,你是否已准备好踏上这场知识的冒险之旅?现在,来与我一起学习机器学习“三剑客”吧!🌍💡👀
文章目录
Part1:信息熵 🚀

✨ 定义
| 信息熵是描述信息源各可能事件发生的不确定性的数学量。它借鉴了热力学的概念,用来度量信息的平均量,通常用于描述信息的不确定性或混乱程度。 |
在信息论中,熵(记作(H(X)))表示接收的每条消息中包含的平均信息量,也可以理解为描述一个随机变量的不确定性的数量。熵越大,随机变量的取值越不确定;反之,熵越小,随机变量的取值就越确定。
✨ 优点
- 量化不确定性:
信息熵提供了一个量化的方法来衡量信息的不确定性或混乱程度。在信息论中,它是描述信息源各可能事件发生的不确定性的基本概念。 - 分类精度高:
在某些应用中,如机械故障诊断,信息熵可以提取旋转类机械故障的动态特征,展现出高的分类精度。 - 对噪声的鲁棒性:
信息熵对噪声数据具有一定的鲁棒性,能够在一定程度上减少噪声对分析结果的干扰。
✨ 缺点
- 计算复杂度:
计算信息熵可能需要处理大量的数据,特别是在处理连续或高维数据时,计算复杂度会显著增加。 - 对数据分布的敏感性:
信息熵的计算结果受到数据分布的影响。如果数据分布不均匀或存在异常值,信息熵的结果可能会产生偏差。
✨ 计算公式
🧩 原理
| 信息熵的原理基于概率论。对于离散随机变量X,其信息熵H(X)定义如下面公式,其中(P(x_i))是随机变量取某个值的概率,b是对数的底数,通常取b=2(以比特为单位)或自然常数e(以纳特为单位)。信息熵越大,表示信息的不确定性越高。 |
对于一个离散型随机变量( X ),其信息熵( H(X) )的定义为:
H ( X ) = − ∑ i = 1 n P ( x i ) log b P ( x i ) H(X) = -\sum_{i=1}^{n} P(x_i) \log_{b} P(x_i) H(X)=−i=1∑nP(xi)logbP(xi)
其中:
- (P(x_i)) 表示随机变量 (X) 取值为 (x_i) 的概率。
- (b) 是对数的底数,通常取 2,自然常数 (e),或 10。当 (b = 2) 时,信息熵的单位是比特(bit);当 (b = e) 时,单位是奈特(nat);当 (b = 10) 时,单位是哈特(Hart)。
公式详解:
-
求和符号:这表示对随机变量 (X) 的所有可能取值进行求和。例如,如果 (X) 可以取三个值,那么 (i) 就会从 1 变到 3,对这三个取值的概率分别进行计算。
∑ i = 1 n \sum_{i=1}^{n} i=1∑n -
概率:这是随机变量 (X) 取值为 (x_i) 的概率。概率值在 0 到 1 之间,且所有可能取值的概率之和为 1。
P ( x i ) P(x_i) P(xi)- 均匀分布与非均匀分布:
当概率分布为均匀分布时,即每个事件发生的概率相等,信息熵达到最大值。这是因为均匀分布代表了最大的不确定性。相反,如果某个事件的概率远高于其他事件,信息熵则会减小,因为系统的不确定性降低了。 - 示例:
考虑一个二分类问题,正例和反例的概率分别为 § 和 (q)。当 (p = q = 0.5) 时,信息熵最大,表示系统最不确定。而当 § 接近 0 或 1 时,信息熵减小,表示系统的不确定性降低。
- 均匀分布与非均匀分布:
-
事件数量 (n) 的变化:
- 事件数量的增加:
随着可能事件数量的增加,信息熵通常会增加,因为更多的可能性意味着更大的不确定性。但是,如果新增加的事件具有极低的概率,它们对整体信息熵的贡献可能较小。 - 示例:
在一个多分类问题中,随着类别数量的增加,如果每个类别的概率分布相对均匀,则整体的信息熵会增加。
- 事件数量的增加:
-
对数函数:这里使用的是负对数,因为概率值总是在 0 到 1 之间,所以对数值会是负数。负号用于将负对数转换为正数,这样信息熵就是一个正数。对数底数 (b) 的选择会影响熵的数值,但不会改变其本质意义。
− log b P ( x i ) -\log_{b} P(x_i) −logbP(xi)- 信息熵公式中通常使用以 2 为底的对数,这是因为信息论中常用二进制编码来表示信息。然而,底数的选择并不会改变信息熵的相对大小关系,只会影响其绝对值。使用不同的底数只是相当于在信息熵值上乘以一个常数因子。
- 示例:
如果使用以 (e) 为底的自然对数来计算信息熵,得到的结果将是使用以 2 为底的对数计算结果的某个常数倍。
-
乘积与求和:每个可能取值的概率与其对数值的乘积表示该取值对整体不确定性的贡献。通过对所有可能取值的贡献求和,我们得到了整体的不确定性,即信息熵。
✨ 应用场景
-
决策树算法:
在构建决策树时,信息熵被用作划分数据集的标准之一。例如,在ID3和C4.5算法中,通过计算每个特征划分数据集后的信息增益(或增益比),来选择最佳的划分特征。 -
特征选择:
在信息检索和自然语言处理中,信息熵被用来衡量一个词或短语的信息量,帮助选择最具代表性的特征。 -
图像处理和计算机视觉:
信息熵被用来评估图像的复杂度或纹理特征。 -
密码学:
信息熵的概念也被用于评估密码的强度,一个高熵的密码更难被破解。
Part2:条件熵 🌈

✨ 定义
| 条件熵是一个用于描述在给定随机变量 (X) 的条件下,另一个随机变量 (Y) 的不确定性。 |
在机器学习和信息论中,条件熵是一个重要概念,它有助于我们理解当知道某个变量 (X) 的值时,另一个变量 (Y) 的不确定性会减少多少。
✨ 优点
- 量化条件不确定性:
条件熵提供了一个量化的方法来衡量在给定条件下随机变量的不确定性,有助于我们更好地理解数据间的依赖关系。 - 指导特征选择:
在机器学习中,条件熵常被用于指导特征选择。例如,在构建决策树时,我们可以利用条件熵来选择最能减少分类不确定性的特征。 - 理解数据关系:
通过计算条件熵,我们可以更深入地理解数据集中不同特征之间的关系,以及它们如何共同影响目标变量。 - 鲁棒性:
条件熵对于噪声和异常值具有一定的鲁棒性,能够在一定程度上减少它们对分析结果的影响。
✨ 缺点
- 计算复杂度:
当数据集较大或特征维度较高时,计算条件熵可能会变得非常耗时。这是因为我们需要为每个可能的X值计算Y的熵,并进行加权平均。 - 对离散数据的限制:
条件熵主要适用于离散数据。对于连续数据,我们需要先将其离散化,这可能会引入额外的误差和复杂性。 - 缺乏直观性:
与准确率、召回率等直观易懂的指标相比,条件熵可能更难被非专业人士理解。
✨ 计算公式
🧩 原理
| 条件熵是从信息论角度反映一个随机变量在已知另一个随机变量条件下的不确定性的量度。它衡量了当已知一个随机变量时,另一个随机变量的剩余信息量或复杂程度。 |
条件熵 (H(Y|X)) 的公式定义为:
H ( Y ∣ X ) = − ∑ x ∈ X , y ∈ Y P ( x , y ) log b P ( x , y ) P ( x ) H(Y|X) = -\sum_{x \in X, y \in Y} P(x, y) \log_{b} \frac{P(x, y)}{P(x)} H(Y∣X)=−x∈X,y∈Y∑P(x,y)logbP(x)P(x,y)
其中:
- (P(x, y)) 表示联合概率,即随机变量 (X) 取值为 (x) 且随机变量 (Y) 取值为 (y) 的概率。
- (P(x)) 表示边缘概率,即随机变量 (X) 取值为 (x) 的概率。
- (b) 是对数的底数,通常取 2,自然常数 (e),或 10。对数底数的选择不会影响条件熵的本质意义,但会改变其数值大小。
公式详解:
-
联合概率:它表示两个事件同时发生的概率。在条件熵的上下文中,它描述了 (X) 取某个特定值 (x) 和 (Y) 取某个特定值 (y) 的同时发生的概率。
P ( x , y ) P(x, y) P(x,y)- 均匀分布与非均匀分布:
当P(y|x)在给定x的条件下对所有的y都相等时(即均匀分布),条件熵达到最大值,这表示在给定X的条件下,Y的不确定性最大。相反,如果某个y在给定x的条件下出现的概率远高于其他y,那么条件熵会减小,因为Y的不确定性降低了。 - 示例:
假设我们有一个随机变量X表示天气(晴天、雨天),另一个随机变量Y表示是否带伞(带、不带)。如果每次下雨都一定带伞,每次晴天都一定不带伞,那么P(带伞|雨天)和P(不带伞|晴天)都会接近1,而其他条件概率则接近0。此时,条件熵会很小,因为给定天气情况后,是否带伞的不确定性很低。
- 均匀分布与非均匀分布:
-
边缘概率:它是某个事件发生的概率,不考虑其他事件。在条件熵中,它用于衡量在给定 (X) 的某个特定值 (x) 的条件下,(Y) 的不确定性。
P ( x ) P(x) P(x)- P(x)的变化会影响条件熵的加权和。如果某个x的出现概率很低,那么即使P(y|x)的熵值很高,它对整体条件熵的贡献也会很小。相反,如果某个x的出现概率很高,那么它的P(y|x)分布将对整体条件熵产生显著影响。
- 示例:
假设在上面的例子中,晴天的概率远大于雨天的概率。即使在下雨时我们仍然有一定的不确定性是否要带伞(比如有时我们可能会忘记带),但由于晴天的情况更为常见,且在这种情况下我们确定不带伞,所以整体的条件熵可能会比较低。
-
条件概率:它表示在事件 (X = x) 发生的条件下,事件 (Y = y) 发生的概率。条件熵使用这个条件概率来衡量在已知 (X) 的情况下,(Y) 的剩余不确定性。
P ( x , y ) P ( x ) \frac{P(x, y)}{P(x)} P(x)P(x,y) -
对数函数和求和:对数函数用于衡量概率的“惊讶”程度,而求和则是对所有可能的 (x) 和 (y) 值进行加总,以计算整体的条件熵。
✨ 应用场景
-
决策树和随机森林:
在构建决策树模型时,条件熵常被用作分裂标准之一。通过计算不同特征下的条件熵,模型可以确定在哪个特征上进行分裂能够最大程度地减少数据的不确定性,从而更有效地进行分类或回归。 -
特征选择:
在高维数据集中,条件熵可以帮助识别哪些特征对于目标变量的预测最有信息量。通过计算每个特征与目标变量之间的条件熵,可以选择出那些能显著降低目标变量不确定性的特征。 -
图像识别:
在图像识别任务中,条件熵可以帮助识别图像中的关键特征。通过计算不同图像特征与目标类别之间的条件熵,可以确定哪些特征对于准确分类图像最为重要。 -
金融市场分析:
在金融市场分析中,条件熵可以用来量化不同市场因素(如股票价格、交易量等)与未来市场表现之间的不确定性关系。这有助于投资者做出更明智的投资决策。
Part3:信息增益 💖

✨ 定义
| 表示引入某个特征后,数据分类不确定性减少的程度。 |
✨ 优点
- 全面考虑:
信息增益考虑了特征出现与不出现的两种情况,能够全面地评估特征对于整个系统的重要性。 - 鲁棒性:
信息增益使用了所有样例的统计属性,减小了对噪声的敏感度,具有一定的鲁棒性。 - 易于理解:
信息增益的概念基于信息论中的熵概念,容易理解,计算也相对简单。 - 有效性:
信息增益在特征选择中表现出较好的效果,能够有效地选择出对于分类或决策最为重要的特征,从而提高模型的性能和泛化能力。
✨ 缺点
- 偏向性:
信息增益算法天生偏向选择分支多的属性,这可能导致模型过度拟合(overfitting),即在训练数据上表现良好但在测试数据上表现较差。 - 无法处理连续值:
信息增益只能处理离散型的属性值,无法直接处理连续值的特征。对于连续值特征,需要进行离散化处理或使用其他方法进行处理。 - 全局性:
信息增益考察的是特征对整个系统的贡献,没有具体到某个类别上。因此,它更适合用来做全局的特征选择,而无法针对单个类别进行特征选择。
✨ 计算公式
🧩 原理
| 原理基于信息论中的熵(Entropy)概念,熵描述了数据的混乱程度或不确定性。信息增益则是通过比较某个特征出现前后系统熵的变化来计算的,即该特征能够为系统带来多少“增益”的信息。 |
信息增益的计算基于信息熵和条件熵的概念,具体公式如下:
I G ( T , A ) = H ( T ) − H ( T ∣ A ) IG(T,A) = H(T) - H(T|A) IG(T,A)=H(T)−H(T∣A)
其中:
- ( IG(T,A) ) 表示特征A对于目标变量T的信息增益。
- ( H(T) ) 是目标变量T的信息熵,表示目标变量的不确定性。
- ( H(T|A) ) 是在给定特征A的条件下,目标变量T的条件熵,表示在已知特征A的情况下,目标变量的剩余不确定性。
公式详解:
- 信息熵 ( H(T) ):: 如前所述,信息熵是衡量数据混乱程度或不确定性的指标。对于目标变量T,其信息熵计算公式如下,其中 ( P(t_i) ) 表示目标变量T取值为 ( t_i ) 的概率。
H ( T ) = − ∑ i = 1 n P ( t i ) log b P ( t i ) H(T) = -\sum_{i=1}^{n} P(t_i) \log_b P(t_i) H(T)=−i=1∑nP(ti)logbP(ti) - 条件熵 ( H(T|A) ): 表示在已知特征A的条件下,目标变量T的不确定性。计算公式如下,其中 ( Values(A) ) 是特征A所有可能取值的集合,( P(A=v) ) 表示特征A取值为v的概率,( H(T|A=v) ) 是在特征A取值为v的条件下目标变量T的信息熵。
H ( T ∣ A ) = ∑ v ∈ V a l u e s ( A ) P ( A = v ) H ( T ∣ A = v ) H(T|A) = \sum_{v \in Values(A)} P(A=v) H(T|A=v) H(T∣A)=v∈Values(A)∑P(A=v)H(T∣A=v)
信息增益 ( IG(T,A) ) 就是信息熵 ( H(T) ) 与条件熵 ( H(T|A) ) 的差,它反映了引入特征A后,目标变量T不确定性减少的程度。信息增益越大,说明特征A对分类的贡献越大。
✨ 应用场景
- 决策树构建:
在构建决策树模型时,信息增益是一个重要的指标,用于选择最佳的分裂特征。通过计算每个特征的信息增益,可以确定哪个特征能够最大程度地减少数据的不确定性,从而选择该特征进行节点的分裂。这有助于构建一棵高效的决策树,提高分类或回归的准确性。 - 特征选择:
在机器学习任务中,特征选择是一个重要的步骤。通过计算每个特征的信息增益,可以评估特征对于目标变量的预测能力。信息增益越高的特征,通常对目标变量的预测越有帮助。因此,可以根据信息增益进行特征选择,保留对模型预测性能有重要影响的特征,去除冗余或无关的特征。 - 特征选择:
在数据预处理阶段,可以使用信息增益来评估数据集中各个特征与目标变量之间的相关性。这有助于发现数据集中的重要特征,并对其进行适当的处理,如特征缩放、编码等,以提高模型的性能。
Part4:经典案例 👀

✨ 场景
| 有一个简单的数据集,它包含天气、温度、湿度和是否打网球的四个特征。我们的目标是基于前三个特征预测是否打网球。 |
✨ Python实现
- 首先,我们需要定义一个函数来计算信息熵:
import numpy as np
def calculate_entropy(y):
"""
计算信息熵
:param y: 标签列表
:return: 信息熵值
"""
hist = np.bincount(y)
ps = hist / len(y)
return -np.sum([p * np.log2(p) for p in ps if p > 0])
- 示例数据集
X = np.array([
['sunny', 'hot', 'high'],
['sunny', 'hot', 'high'],
['overcast', 'hot', 'high'],
['rain', 'mild', 'high'],
['rain', 'cool', 'normal'],
['rain', 'cool', 'normal'],
['overcast', 'cool', 'normal'],
['sunny', 'mild', 'high'],
['sunny', 'cool', 'normal'],
['rain', 'mild', 'normal'],
['sunny', 'mild', 'normal'],
['overcast', 'mild', 'high'],
['overcast', 'hot', 'normal'],
['rain', 'mild', 'high']
])
y = np.array([
'no', 'no', 'yes', 'yes', 'yes', 'no', 'yes', 'no', 'yes', 'yes', 'yes', 'yes', 'yes', 'no'
])
- 计算初始信息熵
initial_entropy = calculate_entropy(y)
print(f"Initial Entropy: {initial_entropy:.2f}")
- 用一个函数来计算给定特征划分后的信息增益
def calculate_information_gain(X, y, feature_index):
"""
计算信息增益
:param X: 特征矩阵
:param y: 标签列表
:param feature_index: 特征索引
:return: 信息增益值
"""
orig_entropy = calculate_entropy(y)
values, counts = np.unique(X[:, feature_index], return_counts=True)
weighted_entropy = sum((counts[i] / len(X)) * calculate_entropy(y[X[:, feature_index] == values[i]]) for i in range(len(values)))
information_gain = orig_entropy - weighted_entropy
return information_gain
- 计算每个特征的信息增益
feature_names = ['weather', 'temperature', 'humidity']
information_gains = {name: calculate_information_gain(X, y, idx) for idx, name in enumerate(feature_names)}
- 打印每个特征的信息增益
for name, gain in information_gains.items():
print(f"Information Gain for {name}: {gain:.2f}")
- 选择具有最大信息增益的特征
best_feature = max(information_gains, key=information_gains.get)
print(f"Best feature to split on: {best_feature}")
✨ 案例详解
- 我们首先定义了一个
calculate_entropy函数来计算数据集的信息熵。信息熵越高,数据的不确定性越大。 - 然后,我们定义了一个
calculate_information_gain函数来计算给定特征划分数据集后的信息增益。信息增益衡量了使用某个特征进行划分后,数据集中不确定性减少的程度。 - 我们使用了一个简单的数据集,包含天气、温度和湿度三个特征以及是否打网球的标签。
- 我们计算了初始信息熵,它表示整个数据集的不确定性。
- 接着,我们计算了每个特征的信息增益,通过比较原始信息熵与根据该特征划分后数据集的加权平均信息熵来得到。
- 最后,我们选择了具有最大信息增益的特征作为最佳划分特征。在决策树构建中,通常会递归地选择最佳特征进行划分,直到满足某个停止条件(如所有样本属于同一类,或没有剩余特征可用)。
Part5:总结与展望 💪

信息熵
信息熵作为衡量信息不确定性的关键指标,为我们理解数据的内在规律提供了有力的工具。在机器学习中,无论是分类、聚类还是特征选择,信息熵都扮演着不可或缺的角色。通过计算数据的信息熵,我们可以洞察数据集的混乱程度和潜在价值,为后续的算法选择和优化提供有力支持。
条件熵
条件熵则进一步揭示了特征与目标变量之间的关系。在特征选择中,条件熵能够帮助我们筛选出与目标变量最相关的特征,从而构建更为高效、准确的模型。此外,条件熵在决策树等算法中也有着重要的应用,通过比较不同特征的条件熵,我们可以确定最佳的划分特征,实现对数据的有效分割。
信息增益
信息增益则是信息熵和条件熵的完美结合。通过计算信息增益,我们可以量化特征对于目标变量预测能力的提升程度,从而选出最具有区分度的特征。在决策树构建过程中,信息增益常常作为选择划分特征的标准,确保了模型的高效性和准确性。
✨ 展望未来
大数据和人工智能技术的不断发展,机器学习的应用前景将更加广阔。信息熵、条件熵和信息增益作为机器学习的基础理论,将在更多领域得到应用。例如,在医疗健康领域,通过分析患者的医疗数据,我们可以利用信息熵和条件熵来预测疾病的发病风险,为患者提供更加精准的诊疗方案;在金融领域,通过计算股票市场的信息熵和条件熵,我们可以预测市场走势,为投资者提供更有价值的投资建议。
✨ 行动号召
深入了解并掌握信息熵、条件熵与信息增益这三把利器,将是你迈向机器学习大师之路的关键一步。它们不仅是理论的基石,更是实践中的得力助手。通过不断学习和实践,你将能够更深入地理解数据的本质,掌握数据间的复杂关系,为未来的创新研究奠定坚实的基础。
让我们一起行动起来,投身于这场探索机器学习奥秘的征程中。不论你是数据科学家、研究人员还是技术爱好者,都可以从中找到属于自己的位置和机会。让我们携手共进,用智慧和勇气,开启机器学习的崭新篇章!
希望你喜欢这次的学习之旅!不要忘记 "点赞" 和 "关注" 哦,我们下次见!🎈
更多推荐
所有评论(0)