KL散度(相对熵)

  |  

摘要: KL散度

【对算法,数学,计算机感兴趣的同学,欢迎关注我哈,阅读更多原创文章】
我的网站:潮汐朝夕的生活实验室
我的公众号:算法题刷刷
我的知乎:潮汐朝夕
我的github:FennelDumplings
我的leetcode:FennelDumplings


KL散度(相对熵)

KL(Kullback-Leibler)散度是一种衡量分布间的相似性的指标,从信息论的角度看,KL散度是信息增益或相对熵。

注意这个指标不能用于距离度量,因为该指标不具有对称性,也即是 KL(P|Q) 与 KL(Q|P) 一般不相等。

KL 散度的计算公式,对于离散分布

对于连续分布

代码

1
2
3
4
5
6
7
8
import numpy as np
import scipy.stats

# 离散型分布
x = [np.random.randint(1, 11) for i in range(10)]
px = x / np.sum(x)
y = [np.random.randint(1, 11) for i in range(10)]
py = y / np.sum(y)
  • 用 scipy.stats.entropy

scipy.stats.entropy 可以处理非归一化情况,以下两种写法均可

1
2
KL = scipy.stats.entropy(x, y)
# KL = scipy.stats.entropy(px, py)
  • 编程计算
1
2
3
KL = 0.0
for i in range(10):
KL += px[i] * np.log(px[i] / py[i])

Share