KL Divergence
KL( Kullback–Leibler) Divergence中文譯作KL散度,從信息論角度來講,這個指標就是信息增益(Information Gain)或相對熵(Relative Entropy),用於衡量一個分布相對於另一個分布的差異性,注意,這個指標不能用作距離衡量,因為該指標不具有對稱性,即兩個分布PP和QQ,DKL(P|Q)DKL(P|Q)與DKL(Q|P)DKL(Q|P)計算的值一般不相等,若用作距離度量,一般需要對公式加以修改,后文講到。
KL Divergence的計算公式為
對於離散分布
DKL(P|Q)=∑iP(i)logP(i)Q(i)
DKL(P|Q)=∑iP(i)logP(i)Q(i)
對於連續分布
DKL(P|Q)=∫∞−∞p(x)logp(x)q(x)dx
DKL(P|Q)=∫−∞∞p(x)logp(x)q(x)dx
程序
利用python 3計算
import numpy as np
import scipy.stats
# 隨機生成兩個離散型分布
x = [np.random.randint(1, 11) for i in range(10)]
print(x)
print(np.sum(x))
px = x / np.sum(x)
print(px)
y = [np.random.randint(1, 11) for i in range(10)]
print(y)
print(np.sum(y))
py = y / np.sum(y)
print(py)
# 利用scipy API進行計算
# scipy計算函數可以處理非歸一化情況,因此這里使用
# scipy.stats.entropy(x, y)或scipy.stats.entropy(px, py)均可
KL = scipy.stats.entropy(x, y)
print(KL)
# 編程實現
KL = 0.0
for i in range(10):
KL += px[i] * np.log(px[i] / py[i])
# print(str(px[i]) + ' ' + str(py[i]) + ' ' + str(px[i] * np.log(px[i] / py[i])))
print(KL)
---------------------
作者:hfut_jf
來源:CSDN
原文:https://blog.csdn.net/hfut_jf/article/details/71403741
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!