前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >KL散度及其python实现

KL散度及其python实现

作者头像
钱塘小甲子
发布2019-01-29 09:40:31
4.2K0
发布2019-01-29 09:40:31
举报

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 np
from scipy import *
def asymmetricKL(P,Q):
    return sum(P * log(P / Q)) #calculate the kl divergence between P and Q

def symmetricalKL(P,Q):
    return (asymmetricKL(P,Q)+asymmetricKL(Q,P))/2.00

上面就是KL散度的计算代码了。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016年07月05日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.KL定义与计算
  • 2.KL散度计算Python代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档