机器学习笔记之指数族分布——最大熵思想
引言
上一节介绍了指数族分布的通式以及共轭性质,本节将通过代码示例共轭性质,并介绍最大熵思想。
补充:指数族分布的共轭性质
指数族分布的共轭性质主要面对贝叶斯估计中分母积分难的问题:
P ( θ ∣ x ) = P ( x ∣ θ ) ⋅ P ( θ ) ∫ θ P ( x ∣ θ ) ⋅ P ( θ ) d θ \mathcal P(\theta \mid x) = \frac{\mathcal P(x \mid \theta) \cdot \mathcal P(\theta)}{\int_{\theta} \mathcal P(x \mid \theta) \cdot \mathcal P(\theta)d\theta} P(θ∣x)=∫θP(x∣θ)⋅P(θ)dθP(x∣θ)⋅P(θ)
因此,共轭性质的具体表述逻辑如下:
- 如果概率模型(似然函数) P ( x ∣ θ ) \mathcal P(x \mid \theta) P(x∣θ)分布 存在一个共轭的先验分布 P ( θ ) \mathcal P(\theta) P(θ),那么效果是:后验分布 P ( θ ∣ x ) \mathcal P(\theta \mid x) P(θ∣x)与先验分布 P ( θ ) \mathcal P(\theta) P(θ)会形成相同分布形式。
P ( θ ∣ x ) ∝ P ( x ∣ θ ) ⋅ P ( θ ) \mathcal P(\theta \mid x) \propto \mathcal P(x \mid \theta) \cdot \mathcal P(\theta) P(θ∣x)∝P(x∣θ)⋅P(θ)
示例:
假设似然概率是二项式分布,关于似然概率 P ( x ∣ θ ) \mathcal P(x \mid \theta) P(x∣θ)中的参数 θ \theta θ的概率 P ( θ ) \mathcal P(\theta) P(θ)服从 Beta \text{Beta} Beta分布,那么后验概率的分布 P ( θ ∣ x ) \mathcal P(\theta \mid x) P(θ∣x)同样也服从 Beta \text{Beta} Beta分布,但该分布与 P ( θ ) \mathcal P(\theta) P(θ)服从的 Beta \text{Beta} Beta分布不一定相同。
具体代码如下:
首先构建一个二项分布的随机数,执行120次试验,并将试验结果归一化为 ( 0 , 1 ) (0,1) (0,1)范围内的结果:
import nunmpy as np
def get_Binormal():
outcome = np.random.binomial(13001,0.5,120)
# outcome = np.random.binormal(13001,0.5,12000)
max_out = max(outcome)
return [(i / max_out) for i in outcome]
返回结果如下:
可能只能看出一点规律,如果将试验次数增加至12000次,再次观察分布结果:
此时发现,这明显是高斯分布的随机点图像。当观测序列足够大时,二项分布近似于高斯分布传送门。回归正题,接下来构建一个关于 Beta \text{Beta} Beta分布的随机数:
from scipy.stats import beta
def get_beta(a,b,sample_num):
x = np.linspace(0,1,sample_num)
return beta.pdf(x,a,b)
out = get_beta(1.4,1.2,120)
返回随机数图像结果如下:
最后将两组随机数对应元素做乘法,观察结果:
如果两种分布采样次数越多,其乘法分布结果就越稳定。下面是采样2000次时的结果图像:
完整代码如下:
from scipy.stats import beta
import numpy as np
import matplotlib.pyplot as plt
def get_Binormal(rate):
outcome = np.random.binomial(13001,rate,200)
max_out = max(outcome)
return [(i / max_out) for i in outcome]
def get_beta(a,b,sample_num):
x = np.linspace(0,1,sample_num)
return beta.pdf(x,a,b)
if __name__ == '__main__':
out = get_beta(1.4,1.2,200)
x = [i for i in range(len(out))]
bi_out = get_Binormal(rate=0.01)
bi_out_ = get_Binormal(rate=0.99)
final_out = out * bi_out
final_out_ = out * bi_out_
plt.scatter(x,out,s=1)
plt.scatter(x,final_out,s=1)
plt.scatter(x,final_out_,s=1)
plt.show()
最大熵思想介绍
信息量
信息本身就伴随着 不确定性(或者说信息自身存在随机性)。而信息量大小表示信息消除不确定性的程度。
- 如果某个事件发生的概率 p = 1 p=1 p=1恒成立,例如:太阳从东方升起。这条信息的不确定性为 0 0 0,自然不存在消除不确定性的说法。
从该例子中发现,至少要存在不确定性,才有机会谈到不确定性消除的概念。 - 另一个例子:我中了5000万。由于中奖的概率极低,假设是99.9%(当然实际上比该数值还要低),那么这条信息就 排除 了99.9%概率的事件——我没有中5000万,这可以看出这条信息消除不确定性的程度很高。
从上述两个例子可以发现,信息消除不确定性的程度和信息本身发生的概率成反比关系。
信息量的公式表示如下:
h ( x ) = log 1 p ( x ) = − log p ( x ) h(x) = \log \frac{1}{p(x)} = -\log p(x) h(x)=logp(x)1=−logp(x)
其中, h ( x ) h(x) h(x)表示事件 x x x的信息量,而 p ( x ) p(x) p(x)表示事件 x x x发生的概率。将上述两个例子带入到上式中:
- x 1 → x_1\to x1→{“太阳从东方升起”}, p ( x 1 ) = 1 , h ( x 1 ) = log 1 1 = 0 p(x_1)=1,h(x_1) = \log \begin{aligned}\frac{1}{1}\end{aligned} = 0 p(x1)=1,h(x1)=log11=0;
- x 2 → x_2 \to x2→{“我中了5000万”}, p ( x 2 ) = 0.001 , h ( x 2 ) = log 1 0.001 ≈ 6.907 p(x_2)=0.001,h(x_2) = \log \frac{1}{0.001} \approx 6.907 p(x2)=0.001,h(x2)=log0.0011≈6.907
该公式完全符合上述逻辑关系。
熵 ( Entropy ) (\text{Entropy}) (Entropy)
从信息量的角度,熵是事件的信息量在事件发生概率分布下的期望。记事件 x x x的熵为 H ( x ) \mathcal H(x) H(x),其具体表示方法如下:
H ( x ) = E p ( x ) [ h ( x ) ] = E p ( x ) [ log 1 p ( x ) ]