KL散度及其python实现
来源:互联网 发布:2016国家政策 云计算 编辑:程序博客网 时间:2024/05/20 11:25
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散度至满足前面两条,后面介绍的对称KL也只能满足前面三条。所以,我们叫KL散度,而不是叫KL距离。
1.KL定义与计算
计算公式就是如此简单。我们做个例题吧。
假设我们有这样的两个分布,A和B,他们出现0和1的概率如下。
这个时候,我们计算A和B之间的KL散度,就是这样:
so easy的样子有木有!
如何直观的理解这样的一个度量的量呢。我不说什么用A的概率去编码B之类的,直观的去看KL散度的公式,说白了,P(x)部分可以认为是权重,其值就是P取该值的概率,后面的则是两者出现该变量的概率之比,然后取对数。取对数当然就是因为信息熵啦。也就是说,如果某一个变量出现的概率在P中很小,那么权重很小,即使在Q中很大,使得后半部分值比较大,那么最后值也不会很大;反过来也一样。所以,希望KL散度大,那么就需要有大的权重和大的概率差异,也就是,两个分布要不一样。
对称KL就是KL(P,Q)与KL(Q,P)的值加起来之后取平均。
2.KL散度计算Python代码
import numpy as npfrom scipy import *def asymmetricKL(P,Q): return sum(P * log(P / Q)) #calculate the kl divergence between P and Qdef symmetricalKL(P,Q): return (asymmetricKL(P,Q)+asymmetricKL(Q,P))/2.00上面就是KL散度的计算代码了。
0 0
- KL散度及其python实现
- KL散度转载
- python实现:KL距离、jensen-shannon距离
- KL散度的理解
- 信息几何,KL 散度以及流形
- KL 散度和白化(球化)算法
- KL散度与极大似然
- 决策树及其python实现
- 最小二乘法及其python实现
- 决策树及其Python实现
- Base64及其Python实现
- python 3计算KL散度(KL Divergence)
- 交叉熵、相对熵及KL散度通俗理解
- SMOTE算法及其python实现
- DBscan算法及其Python实现
- Kemans算法及其Python 实现
- 浅谈simhash及其python实现
- Levenshtein距离及其python实现
- React Native的自我实践之window下的安装
- 线程本地存储
- 华为机试题--2.计算字符个数
- C++ 创建快捷方式的最简单方法
- EditText属性设置
- KL散度及其python实现
- C++ 成员函数的重载、覆盖与隐藏
- 对scoped_ptr智能指着的实现和测试用例
- objective-c 编程基础(七 块)
- “爱运动管理系统”诞生记(10)
- VC编程经验汇总(一)
- UITableView代理cellForRowAtIndexPath不执行的相关解决方案
- 嵌套矩形问题
- 迭代算法的收敛性