Entropy

a measure of the uncertainty of the whole probability distribution, measured in bits of information, one bit of information is the information needed to communicate a single binary choice
∑p(xi)log(2, 1/p(xi))
the entropy H(x) of an uniform distribution of n outcomes is logn   H(x)<=logn
不确定性越大,熵越大,越有序越小。

猜1到100中的某个数字,可采用每次是否大于平均数的方法,因此每次最多log(2,100)次即可猜中。在游戏之前,有6.64 bits of uncertainty,因为这是为了得知这个数字所需得到的平均信息量。


  • monty hall 问题

换门后得奖概率是2/3,不换门得奖概率是1/3,现在想要知道Monty打开一扇门这一信息是我们判断哪扇门后有奖所需信息的百分比。

一开始有三扇门时:

X:P(1/3, 1/3, 1/3)  

H(x)= 1/3*log(2, 3)+1/3*log(2, 3)+1/3*log(2, 3)=log(2, 3)= 1.585bits

Monty打开一扇门,即告诉我们一个信息时:

Y:P(1/3, 2/3)  

H(x|y)= 1/3*log(2, 3)+2/3*log(2, 3/2)= 0.9186 bits

根据mutual information的公式 H(x)-H(x|y)= I(x;y)= 1.585-0.9186= 0.667 bits

0.667/1.585= 0.421

即,Monty打开门这一信息是我们判断所需信息的42%。


  • 硬币问题

有两枚硬币,一枚正常,一枚弯曲,正常的硬币掷一次正面和反面朝上的概率均为0.5,弯曲的硬币掷一次正面和反面朝上的概率分别为0.4和0.6。一开始使用正常或弯曲硬币的概率均为0.5,现在想要根据一次投掷的结果判定使用的硬币是正常的还是弯曲的,以及这一次判定的precentage of reduction in uncertainty。

假设A=硬币正面朝上,NA=硬币背面朝上,B=正常硬币,NB=弯曲硬币。

根据贝叶斯理论:P(A|B)*P(B)/P(A)=P(B|A)以及P(A)= P(A|B)*P(B)+P(A|NB)*P(NB)

P(B|A)= 0.556  P(NB|A)=0.444

因此硬币的分布从(0.5, 0.5)变为(0.556, 0.444)。

计算对于使用哪枚硬币我们知道多少:

H(0.5, 0.5)-H(0.556, 0.444)= 1-0.9909= 0.0091 bits

即基于一次投掷,对于明确知道使用的是哪枚硬币,现在reduction in uncertainty有0.91%。

### 信息熵的量化方法 信息熵是一种用于衡量不确定性的度量,在信息论中广泛应用。对于离散随机变量 \( X \),其可能取值为 \( x_1, x_2, ..., x_N \),对应的概率分别为 \( P(x_1), P(x_2), ..., P(x_N) \)[^1]。 #### 计算公式 信息熵 \( H(X) \) 的计算公式如下: \[ H(X) = -\sum_{i=1}^{N} P(x_i)\log_bP(x_i) \] 其中, - \( N \) 是类别数目; - \( P(x_i) \) 是第 \( i \) 类的概率; - 基数 \( b \) 可以为任意正整数值,通常采用的是以 2 或者 e 为底的对数函数。 当基数 \( b=2 \) 时,单位是比特 (bit);当基数 \( b=e \) 时,单位是奈特(nat)。 #### 示例代码 下面是一个 Python 实现的例子,用来展示如何基于给定的数据分布来计算信息熵: ```python import numpy as np def calculate_entropy(probabilities): """Calculate the entropy of a distribution.""" probabilities = np.array(probabilities) # Avoid log(0) by setting it to zero manually. with np.errstate(divide='ignore', invalid='ignore'): return -np.sum(np.where(probabilities != 0, probabilities * np.log2(probabilities), 0)) # Example usage: prob_dist_example = [0.5, 0.5] # A binary event with equal probability entropy_value = calculate_entropy(prob_dist_example) print(f"The calculated entropy is {entropy_value}") ``` 这段代码定义了一个 `calculate_entropy` 函数,接受一个概率列表作为输入参数,并返回对应的信息熵值。注意这里的实现考虑到了防止出现未定义情况(如除零错误),因此使用了 NumPy 库中的 `where` 方法来规避这个问题[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值