用公式编程就用px和py
KL = 0.0
for i in range(10):
KL += px[i] * np.log(px[i] / py[i])
print(KL)
0.2815657077409677
验证对称性不成立:
KL = scipy.stats.entropy(y, x)
print(KL)
0.3085447676484088
确实和上述0.28不一致~
- https://blog.csdn.net/jacke121/article/details/107852096
- https://www.jianshu.com/p/43318a3dc715
- https://zhuanlan.zhihu.com/p/39682125
- https://zh.wikipedia.org/wiki/%E7%9B%B8%E5%AF%B9%E7%86%B5
- 应用参考:https://www.cnblogs.com/charlotte77/p/5392052.html
- 应用参考2:https://blog.csdn.net/june_young_fan/article/details/114935283
1.KL散度
KL散度( Kullback–Leibler divergence) (最大类间散度)
是描述两个概率分布差异的一种测度。对于两个概率分布P、Q,二者越相似,KL散度越小。
KL散度的性质:P:真实分布,Q:P的拟合分布
非负性:KL(P||Q)>=0,当P=Q时,KL(P||Q)=0;
反身性:KL(P||P)=0
非对称性:D(P||Q) ≠ D(Q||P)
KL散度不满足三角不等式
from scipy import stats
P = [0.2, 0.4, 0.4]
Q = [0.4, 0.2, 0.5]
print(stats.entropy(P,Q))
0.144
KL散度又是一个从信息论、熵的角度考量距离的一个量。但是,这里说他是距离有点不妥,因为距离需要满足4个条件:
1) d(x,x) = 0 反身性
2) d(x,y) >= 0 非负性
3) d(x,y) = d(y,x) 对称性
4) d(x,k)+ d(k,y) >= d(x,y) 三
本文介绍了KL散度的概念及其在Python中的实现在Python中的实现。通过理解和应用KL散度,我们可以更好地理解和分析概率分布之间的差异,从而优化我们的模型和算法。在这个函数中,我们首先将输入的概率分布转换为NumPy数组,然后使用np.where函数来处理概率为0的情况,避免出现无穷大的结果。除了计算KL散度之外,我们还可以使用KL散度进行其他任务,例如概率分布的比较和优化。通过计算不同概率分布之间的KL散度,我们可以衡量它们的差异程度,从而帮助我们进行模型选择、特征选择等任务。
在信息论和统计学中,KL散度被广泛应用于各种领域,如机器学习、数据压缩和模式识别等。本文将介绍如何在Python中实现KL散度的计算,并提供相应的源代码。需要注意的是,KL散度不是对称的,即KL(P||Q)与KL(Q||P)的值可能不相等。因此,在实际应用中,需要根据具体的问题和应用场景来选择使用哪个方向的KL散度。首先,我们需要了解KL散度的定义。的函数,该函数接受两个概率分布p和q作为输入,并返回它们的KL散度值。例如,SciPy库中的。函数并将示例概率分布p和q作为参数传入,计算得到了KL散度的值。
KL散度(Kullback-Leibler divergence)是描述两个概率分布 P 和 Q 差异的一种方法。在概率论或信息论中,又称相对熵(relative entropy)。它是非对称的,这意味着 D(P||Q) ≠ D(Q||P) 。特别的,在信息论中,D(P||Q) 表示当用概率分...