我想在 R 中找到两个分布的 JS 散度。维基百科说 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 不允许我指定要使用的日志。关于如何做到这一点的任何线索?
好的,这是在 2 个分布之间查找 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 值,根据wiki,只有当我采用以 2 为底的对数时才有可能。如何使用现有的 R 代码执行此操作