Rで2つの分布のJS発散を見つけたいと思います。ウィキペディアでは、2を底とする対数を使用すると、イェンセン・シャノン発散は1で制限されると述べています。結果として生じるJSの発散が0と1の間にあることを望みます。私はRでKLdiv関数を使用してJSを見つけています。
JSD(P || Q)= 1/2*D(P || M) + 1/2*D(Q || M)
ここで、カルバック・ライブラー発散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コードでこれを行うにはどうすればよいですか?