が好き:私はそれぞれの分布を得ることができますRでは、文字列の2つのベクトル間のKL距離の計算方法は?私は、文字列の2つのベクトルを持っている場合
> list1 = c("cat", "dog", "cat", "rabbit", "dog", "cat")
> list2 = c("dog", "rabbit", "dog", "mouse", "dog", "rabbit", "cat")
。例えば:私はこれら二つの分布間のKL距離を計算するにはどうすればよい
> dist1 = table(list1)/length(list1)
> dist2 = table(list2)/length(list2)
> dist1; dist2
list1
cat dog rabbit
0.5000000 0.3333333 0.1666667
list2
cat dog mouse rabbit
0.1428571 0.4285714 0.1428571 0.2857143
? (dist2をベースラインとして使用する)
私が見たKL関数(例:kl.dist)には同じ長さのベクトルが必要です。
この尺度(カルバック・ライブラー)離散分布のためには、確率の各ペアの商の対数を用います。あなたがそれを見ても(マウスの確率はリスト1ではゼロです)、ゼロのログまたはゼロの除算のログが必要です。どちらも無用です。この距離を計算するには、すべての確率がゼロでない必要があります。 – Gladwell
実際には、ベース分布(ここではdist2)のみが非ゼロである必要があります。 pが0の場合、p * log(p/q)はゼロと定義されます。そのため、私はdist2をベースラインとして使用しています。いずれにせよ、私はまだKL距離の計算方法に興味があります。 – kf913
同じ長さの分布を作成し、欠損値の分布を0に設定するだけではどうですか? –