3

X と Y の 2 つの行列があります (ほとんどの場合、それらは類似しています)。ここで、すべての行間のペアワイズ KL ダイバージェンスを計算し、それらを行列で出力したいと考えています。例えば:

X = [[0.1, 0.9], [0.8, 0.2]]

次に、関数はkl_divergence(X, X)、両方の X 行列の行の各ペアについて、ペアごとの Kl 発散距離を取得して計算する必要があります。出力は 2x2 マトリックスになります。

すでに Python でこれを実装していますか? そうでない場合、これは非常に簡単に計算できるはずです。大量のデータがあり、ランタイムをできるだけ低く保つ必要があるため、これにはある種のマトリックス実装が必要です。あるいは、Jensen-Shannon エントロピーも問題ありません。最終的に、これは私にとってより良い解決策になるでしょう。

4

2 に答える 2

14

KL ダイバージェンスは、基本的に P(i) と log(P(i)/Q(i)) のドット積であることに注意してください。したがって、1 つのオプションは、P(i) と log(P(i)/Q(i)) のnumpy配列のリストを作成し、計算する KL 発散ごとに 1 つの行を作成し、ドット積を実行することです。 .

于 2012-05-15T14:48:32.737 に答える
2

JSDが実装されたditと呼ばれる新しい(っぽい)ライブラリと、相互情報量およびその他の多くの距離メトリックがあります。

import dit
foo = dit.Distribution(['A','B','C'],[0.5,0.5,0.0])
bar = dit.Distribution(['A','B','C'],[0.1,0.0,0.9])
dit.divergences.jensen_shannon_divergence([foo,bar])
0.80499327350549388

ドキュメントは少し手間がかかるかもしれませんが、有望に見えます。

http://docs.dit.io/en/latest/generalinfo.html#quickstart

于 2014-10-14T22:10:04.310 に答える