Python和MATLAB库尔巴克–莱布勒散度信息论统计学生物学和算法模型

96 篇文章 5 订阅
26 篇文章 0 订阅

🎯要点

  1. 高斯混合模型聚类和t分布随机邻域嵌入底层分析
  2. 信息论测量
  3. 复合彩票统计学计算结果
  4. 离散分布速率最优估计器
  5. 样本统计相似性
  6. 快速闭环散度和交叉熵计算
  7. 催乳素诱导模型贝叶斯快速推理模型
  8. 视觉皮层活动神经数据分布
    在这里插入图片描述

Python散度

在数理统计中,库尔巴克–莱布勒散度(也称为相对熵和 I 散度 ),表示为 D K L ( P ∥ Q ) D_{ KL }(P \| Q) DKL(PQ),是一种统计距离:衡量一个参考概率分布 P P P 与第二个概率分布 Q Q{ } Q 之间的差异。从数学上讲,它定义为
D K L ( P ∥ Q ) = ∑ x ∈ X P ( x ) log ⁡ ( P ( x ) Q ( x ) ) D_{KL}(P \| Q)=\sum_{x \in X } P(x) \log \left(\frac{P(x)}{Q(x)}\right) DKL(PQ)=xXP(x)log(Q(x)P(x))
让我们从离散情况开始。因此,让 P P P Q Q Q 成为在同一概率空间 X \mathcal { X } X 上定义的两个概率分布。第一次尝试可能是考虑分布之间差异的平均值。确实非常接近,但以下定义略有不同。库尔巴克–莱布勒散度(也称为相对熵)KL ( P ∥ Q ) (P \| Q) (PQ) 定义为概率 P ( x ) P(x) P(x) Q ( x ) Q(x) Q(x) 的对数之间差异的平均值:
K L ( P ∥ Q ) =  def  E [ log ⁡ P ( x ) − log ⁡ Q ( x ) ] KL(P \| Q) \stackrel{\text { def }}{=} E [\log P(x)-\log Q(x)] KL(PQ)= def E[logP(x)logQ(x)]
期望值使用概率 P P P(通常写为 x ∼ P x \sim P xP )计算。期望值的定义可得出以下表达式
K L ( P ∥ Q ) = ∑ x ∈ X P ( x ) log ⁡ ( P ( x ) Q ( x ) ) KL(P \| Q)=\sum_{x \in X } P(x) \log \left(\frac{P(x)}{Q(x)}\right) KL(PQ)=xXP(x)log(Q(x)P(x))
对于连续分布,我们写为
K L ( P ∥ Q ) = ∫ − ∞ ∞ p ( x ) log ⁡ ( p ( x ) q ( x ) ) d x KL(P \| Q)=\int_{-\infty}^{\infty} p(x) \log \left(\frac{p(x)}{q(x)}\right) d x KL(PQ)=p(x)log(q(x)p(x))dx
其中 p ( x ) p(x) p(x) q ( x ) q(x) q(x) 分别是 P P P Q Q Q 的密度。

如果 { p i } \left\{p_i\right\} {pi} { q i } \left\{q_i\right\} {qi} 是两个概率质量函数,即两个可数或有限的非负数序列,且和为 1,那么
∑ i p i log ⁡ ( p i q i ) ≥ 0 \sum_i p_i \log \left(\frac{p_i}{q_i}\right) \geq 0 ipilog(qipi)0
关于散度实际上表达了两个分布之间的某种距离,表达式
K L ( P ∥ Q ) = ∫ − ∞ p ( x ) ( log ⁡ p ( x ) − log ⁡ q ( x ) ) d x = ∫ − ∞ ∞ p ( x ) D ( x ) d x \begin{aligned} KL(P \| Q) & =\int_{-\infty} p(x)(\log p(x)-\log q(x)) d x \\ & =\int_{-\infty}^{\infty} p(x) D(x) d x \end{aligned} KL(PQ)=p(x)(logp(x)logq(x))dx=p(x)D(x)dx
P P P Q Q Q 为以下分布(每个可能的结果 x x x 都在 X = { 0 , 1 , 2 } X =\{0,1,2\} X={0,1,2} 中):
0 1 2  分布  P ( x ) 9 / 25 12 / 25 4 / 25  分布  Q ( x ) 1 / 3 1 / 3 1 / 3 \begin{array}{|c|c|c|c|} \hline & 0 & 1 & 2 \\ \hline \text { 分布 } P(x) & 9 / 25 & 12 / 25 & 4 / 25 \\ \hline \text { 分布 } Q(x) & 1 / 3 & 1 / 3 & 1 / 3 \\ \hline \end{array}  分布 P(x) 分布 Q(x)09/251/3112/251/324/251/3
我们来计算一下 K L ( P ∥ Q ) KL(P\|Q) KL(PQ)
K L ( P ∥ Q ) = ∑ x P ( x ) log ⁡ ( P ( x ) Q ( x ) ) = 9 / 25 log ⁡ ( 9 / 25 1 / 3 ) + 12 / 25 log ⁡ ( 12 / 25 1 / 3 ) + 4 / 25 log ⁡ ( 4 / 25 1 / 3 ) ≈ 0.0853 \begin{aligned} KL(P \| Q) & =\sum_x P(x) \log \left(\frac{P(x)}{Q(x)}\right) \\ & =9 / 25 \log \left(\frac{9 / 25}{1 / 3}\right)+12 / 25 \log \left(\frac{12 / 25}{1 / 3}\right)+4 / 25 \log \left(\frac{4 / 25}{1 / 3}\right) \\ & \approx 0.0853 \end{aligned} KL(PQ)=xP(x)log(Q(x)P(x))=9/25log(1/39/25)+12/25log(1/312/25)+4/25log(1/34/25)0.0853

使用Python评估

from scipy.stats import entropy
entropy([9/25, 12/25, 4/25], qk=[1/3, 1/3, 1/3])
0.0852996013183706
import matplotlib.pyplot as plt 
import numpy as np 

p = [9/25, 12/25, 4/25]
q = [1./3,1./3,1./3]
xx = ['0','1','2']

logq = np.log(q)
logp = np.log(p)

plt.bar(xx, q, color='beige')
plt.bar(xx, p, alpha=.6, color='orange')
plt.show()

plt.bar(xx, logq, color='beige')
plt.bar(xx, logp, alpha=.6, color='orange')
plt.show()
from scipy.stats import norm, skewnorm

x = np.arange(-3,2.5,.001)
plt.plot(x, 10*skewnorm.pdf(x,-1.2), color='black')
plt.plot(x, 10*norm.pdf(x, scale=1.1), color='orange')
log1 = np.log(skewnorm.pdf(x,-1.2))
log2 = np.log(norm.pdf(x, scale=1.1))
plt.plot(x, log1, color='black')
plt.plot(x, log2, color='orange')
plt.fill_between(x, log1, log2, 
                 where=log1>=log2, facecolor='grey', 
                 interpolate=True)
plt.fill_between(x, log1, log2, 
                 where=log1<log2, facecolor='orange', 
                 interpolate=True)
plt.show()

👉更新:亚图跨际

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值