使用基数2对数的R中的KL分歧

时间:2012-07-01 13:31:17

标签: r

我想在R中找到两个分布的JS分歧。wikipedia说Jensen-Shannon散度以1为界,假设一个使用基数2对数。我希望我得到的JS差异介于0和1之间。我在R中使用KLdiv函数来查找JS:

JSD(P || Q)= 1/2*D(P || M) + 1/2*D(Q || M)  
     

Kullback-Leibler分歧KLdiv(P,M)= D(P || M)

但我想指明我需要2对数的基数。看起来KLdiv不允许我指定我想要使用的日志。关于如何做到这一点的任何线索?

好的,这是用于在两个发行版之间查找JSdivergence的R代码。

library(flexmix)
m <- 0.5 *(dist1 + dist2) #JSD(P||Q)=0.5*D(P||M) + 0.5*D(Q||M), where M=0.5*(P+Q)
Dpm <- KLdiv(cbind(dist1,m))
Dqm <- KLdiv(cbind(m,dist2))
js <- 0.5*Dpm + 0.5*Dqm

我想要一个介于0和1之间的JS值,只有当我以2对数为基数时才可以使用wiki。如何使用我现有的R代码

1 个答案:

答案 0 :(得分:2)

一般来说,它认为

enter image description here

意味着如果你想计算b的对数来建立一个但是你只有一个函数来计算任何数的对数到基数x,你仍然可以很容易地得到该数的对数来基于a。

因此:

enter image description here

因此,如果您想确定相对于基数x的KL偏差,您只需将计算KL偏差的结果与基数e除以x的对数到基数e(或者KLdiv实施的任何基础)。

顺便说一下,你忘了提到你正在使用的KLdiv功能。

其次,通过查看你的R代码,我想你可能想重新阅读JS分歧,特别是M的定义。