Python【图解】信息熵

信息熵与信息论基础
本文深入探讨了信息熵的概念,它是衡量随机事件不确定性的关键指标。通过数学公式和直观的例子,文章解释了信息熵如何随事件可能性的变化而变化,以及它在不同场景中的应用,包括联合熵、条件熵、互信息和最大熵模型。

1、简介

  • 信息熵是随机事件不确定性的度量
  • 信息熵越,不确定性越

2、公式

H ( X ) = − ∑ i = 1 n p ( x i ) log ⁡ 2 p ( x i ) = ∑ i = 1 n p ( x i ) log ⁡ 2 1 p ( x i ) H(X) = - \sum_{i=1}^{n} {p(x_i) \log_2 p(x_i)} = \sum_{i=1}^{n} {p(x_i) \log_2\frac{1}{p(x_i)}} H(X)=i=1np(xi)log2p(xi)=i=1np(xi)log2p(xi)1

先看下 − x log ⁡ 2 x - x \log_2 x xlog2x 的函数图像:

import numpy as np, matplotlib.pyplot as mp
X = np.linspace(0.001, 1, 1001)
Y = - X * np.log2(X)
mp.plot(X, Y)


如图所示,概率P取值在0~1,概率为0或1时取最小值0( lim ⁡ x → 0 − x log ⁡ 2 x = 0 \lim_{x\rightarrow0} - x \log_2 x = 0 limx0xlog2x=0

3、举个栗子

栗子1

黑箱中10个球,分红白2色,随机抽取1个:
H = P ( 红 ) log ⁡ 2 1 P ( 红 ) + P ( 白 ) log ⁡ 2 1 P ( 白 ) H=P(红) \log_2\frac{1}{P(红)} + P(白) \log_2\frac{1}{P(白)} H=P()log2P()1+P()log2P()1
若5红5白,信息熵为1.00,难以确定会抽到的哪个颜色;
若9红1白,信息熵为0.47,有较大几率抽到红球,不确定性较小
若全为红球,则信息熵为0,必定抽到红球,无不确定性

from math import log2
import matplotlib.pyplot as mp
for x in range(1, 10):
    p1 = x / 10
    p2 = 1 - p1
    X = [p1, p2]
    H = - sum([p * log2(p) for p in X])
    print('红球概率:%.2f、白球概率:%.2f、信息熵:%.2f' % (p1, p2, H))
    mp.bar(p1, H, color='r', width=0.018)

栗子2

import numpy as np, matplotlib.pyplot as mp
X = np.arange(1, 257)  # 物种数取值范围
H = []
for x in X:
    P = [1 / x for _ in range(x)]  # 物种数为x时,概率的集合
    H.append(- sum([p * np.log2(p) for p in P]))
mp.xlabel('species')
mp.ylabel('information entropy')
mp.plot(X, H)


如图,横坐标表示种类,纵坐标表示信息熵
种类是1时,信息熵为0;种类是256时,信息熵为8;种类越多,信息熵越大。

4、相关补充

联合熵

  • 二维随机变量X、Y的不确定性的度量
    H ( X , Y ) = − ∑ i = 1 n ∑ j = 1 n P ( x i , y j ) log ⁡ P ( x i , y j ) H(X,Y) = - \sum_{i=1}^{n} \sum_{j=1}^{n} {P(x_i,y_j) \log P(x_i,y_j)} H(X,Y)=i=1nj=1nP(xi,yj)logP(xi,yj)

条件熵

  • 用于衡量:随机变量X发生的条件下,随机变量Y的不确定性
    H ( Y ∣ X ) = − ∑ x , y P ( x , y ) log ⁡ P ( y ∣ x ) H(Y|X) = - \sum_{x,y} {P(x,y) \log P(y|x)} H(YX)=x,yP(x,y)logP(yx)

互信息

  • 随机变量X、Y之间相互依赖性的量度
    I ( X , Y ) = − ∑ x ∈ X ∑ y ∈ Y P ( x , y ) log ⁡ P ( x , y ) P ( x ) P ( x ) I(X,Y) = - \sum_{x \in X} \sum_{y \in Y} {P(x,y) \log \frac {P(x,y)}{P(x)P(x)}} I(X,Y)=xXyYP(x,y)logP(x)P(x)P(x,y)

最大熵模型

白话解释:
满足一定约束条件下,选择熵最大的模型
e.g.
  • 对于随机变量 X X X,其可能的取值为 { A , B , C } \{A,B,C\} {A,B,C},没有任何约束的情况下,各个值等概率时模型的熵值最大:
    P ( A ) = P ( B ) = P ( C ) = 1 3 P(A)=P(B)=P(C)=\frac{1}{3} P(A)=P(B)=P(C)=31
  • 当给定一个约束 P ( A ) = 1 2 P(A)=\frac{1}{2} P(A)=21时,满足该约束条件下的最大熵模型则变成:
    P ( A ) = 1 2 ; P ( B ) = P ( C ) = 1 4 P(A)=\frac{1}{2};P(B)=P(C)=\frac{1}{4} P(A)=21;P(B)=P(C)=41
### 信息增益的概念及其在决策树中的应用 #### 什么是信息增益? 信息增益是一种衡量某个特征对于分类能力贡献大小的标准。它基于的概念,用于评估通过某一特征进行数据划分后带来的不确定性减少程度。具体来说,信息增益定义为父节点的减去子节点加权后的平均[^2]。 公式表示如下: \[ \text{Gain}(S, A) = H(S) - \sum_{v \in Values(A)} \frac{|S_v|}{|S|}H(S_v) \] 其中: - \( S \): 当前的数据集。 - \( A \): 特征变量。 - \( Values(A) \): 特征\(A\)可能取集合。 - \( S_v \): 数据集中特征\(A\)等于特定\(v\)的子集。 - \( H(S) \): 数据集\(S\)的。 #### 图解信息增益的应用 为了更好地理解信息增益的作用,可以通过一个简单的例子说明: 假设有一个关于天气条件是否适合打网球的小型数据集,包含四个属性:`Outlook`, `Temperature`, `Humidity`, `Wind`,以及目标标签`Play Tennis?`(Yes/No)。以下是部分数据表的内容: | Outlook | Temperature | Humidity | Wind | Play Tennis? | |---------|-------------|----------|----------|--------------| | Sunny | Hot | High | Weak | No | | Sunny | Hot | High | Strong | No | | Overcast| Hot | High | Weak | Yes | | Rain | Mild | High | Weak | Yes | ##### 计算根节点的 首先计算整个数据集的目标列`Play Tennis?`的。如果共有9个正例(Yes),5个反例(No),则总样本数为14,则可由下式得: \[ H(S) = -\left(\frac{9}{14}\log_2{\frac{9}{14}} + \frac{5}{14}\log_2{\frac{5}{14}}\right) \approx 0.940 \] ##### 使用不同特征划分并计算信息增益 以`Outlook`为例,该特征有三个可能的:`Sunny`, `Overcast`, `Rain`。分别计算每个子集的,并按比例求得到期望。 - 对于`Sunny`子集,假设有2个正例3个反例,则其为: \[ H(S_{\text{Sunny}}) = -\left(\frac{2}{5}\log_2{\frac{2}{5}} + \frac{3}{5}\log_2{\frac{3}{5}}\right) \approx 0.971 \] - 类似地,可以计算其他两个子集的。 最终的信息增益为: \[ \text{Gain}(S, \text{Outlook}) = H(S) - \sum_{v \in \{\text{Sunny}, \text{Overcast}, \text{Rain}\}} P(v)H(S_v) \] 重复上述过程,可以选择具有最大信息增益的特征作为当前节点的最佳分裂依据。 ```python import math def entropy(probabilities): """Calculate the Shannon Entropy given a list of probabilities.""" return sum([-p * math.log(p, 2) if p != 0 else 0 for p in probabilities]) # Example data proportions yes_prob = 9 / 14 no_prob = 5 / 14 root_entropy = entropy([yes_prob, no_prob]) print(f"Root Entropy: {root_entropy:.3f}") ``` #### 总结 信息增益的核心思想是在每次分割时寻找能够最大程度降低不确定性的特征。这一原则被广泛应用于ID3算法中,帮助构建高效的决策树模型[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小基基o_O

您的鼓励是我创作的巨大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值