[PYTHON] Anmerkungen zur KL-Divergenz zwischen Poisson-Verteilungen

Die Berechnung der KL-Divergenz zweier Wahrscheinlichkeitsverteilungen gemäß der Poisson-Verteilung wird als Memo zusammengefasst.

Annahme

Die beiden Wahrscheinlichkeitsverteilungen $ p und q $ folgen einer Poisson-Verteilung mit den Parametern $ \ lambda_p bzw. \ lambda_q $. Die Wahrscheinlichkeitsdichtefunktion von $ p $ ist wie folgt definiert.

p(x) = e^{-\lambda_p} \frac{\lambda_p^x}{x!}

Die KL-Divergenz der diskreten Wahrscheinlichkeitsverteilung ist wie folgt.

D_{KL}(p, q) = \sum_{x=0}^{\infty} p(x) \log \frac{p(x)}{q(x)}

eine Formel

\begin{equation*}\begin{split}D_{KL}(p,q) &= \sum_{x=0}^{\infty} p(x) \log \frac{p(x)}{q(x)} \\&=\sum_{x=0}^{\infty} e^{-\lambda_p} \frac{\lambda_p^x}{x!} \cdot \log \frac{e^{-\lambda_p} \frac{\lambda_p^x}{x!}}{e^{-\lambda_q} \frac{\lambda_q^x}{x!}} \\&=\sum_{x=0}^{\infty} e^{-\lambda_p} \frac{\lambda_p^x}{x!} \cdot ( \log e^{-\lambda_p} \frac{\lambda_p^x}{x!} - \log e^{-\lambda_q} \frac{\lambda_q^x}{x!} )\\&=\sum_{x=0}^{\infty} e^{-\lambda_p} \frac{\lambda_p^x}{x!} \cdot (-\lambda_p +\log \frac{\lambda_p^x}{x!} +\lambda_q - \log \frac{\lambda_q^x}{x!} )\\&=\sum_{x=0}^{\infty} e^{-\lambda_p} \frac{\lambda_p^x}{x!} \cdot (\lambda_q -\lambda_p +\log \frac{\lambda_p^x}{x!} \frac{x!}{\lambda_q^x} )\\&=\sum_{x=0}^{\infty} e^{-\lambda_p} \frac{\lambda_p^x}{x!} \cdot (\lambda_q -\lambda_p +\log \frac{\lambda_p^x}{\lambda_q^x} )\\&=\sum_{x=0}^{\infty} e^{-\lambda_p} \frac{\lambda_p^x}{x!} \cdot (\lambda_q -\lambda_p) + \sum_{x=0}^{\infty} e^{-\lambda_p} \frac{\lambda_p^x}{x!} \cdot \log \frac{\lambda_p^x}{\lambda_q^x} \\&=\lambda_q -\lambda_p + \sum_{x=0}^{\infty} e^{-\lambda_p} \frac{\lambda_p^x}{x!} \cdot x \log \frac{\lambda_p}{\lambda_q} \\&=\lambda_q -\lambda_p + \sum_{x=0}^{\infty} e^{-\lambda_p} \frac{\lambda_p^{x-1}}{(x-1)!} \lambda_p \cdot \log \frac{\lambda_p}{\lambda_q}\\&=\lambda_q -\lambda_p + \sum_{t=0}^{\infty} e^{-\lambda_p} \frac{\lambda_p^{t}}{t!} \lambda_p \cdot \log \frac{\lambda_p}{\lambda_q} &\mbox{$t=x-1$Zu}\\&=\lambda_q -\lambda_p + e^{-\lambda_p} e^{\lambda_p} \lambda_p \cdot \log \frac{\lambda_p}{\lambda_q} \\&=\lambda_q -\lambda_p + \lambda_p \cdot \log \frac{\lambda_p}{\lambda_q}\\\end{split}\end{equation*}

Überprüfung

Ich habe versucht zu sehen, ob die Berechnung der KL-Divergenz unter Verwendung von pmph und Entropie von scipy und das Ergebnis der obigen Formel gleich sind.

import numpy as np
from scipy.stats import poisson, entropy


x = np.linspace(0, 100, 101)

#Definieren Sie den Parameter λ als Alpha
alpha_p = 1
alpha_q = 5
p = poisson.pmf(x, alpha_p)
q = poisson.pmf(x, alpha_q)
kl = entropy(p, q)

#Berechnung basierend auf der obigen Formel
kl_alpha = alpha_q - alpha_p + alpha_p * np.log(alpha_p / alpha_q)

print("KL-Divergenz mit der Entropiefunktion:", kl)
print("KL-Divergenz mit Alpha:", kl_alpha)

Ausgabeergebnis

KL-Divergenz unter Verwendung der Entropiefunktion: 2.3905620875658995
KL-Divergenz mit Alpha: 2.3905620875658995

Recommended Posts

Anmerkungen zur KL-Divergenz zwischen Poisson-Verteilungen
KL-Divergenz zwischen Normalverteilungen
Hinweise zur Flasche
Hinweise zu neuronalen Netzen
Sellerie-Notizen zu Django
Hinweise zur Verwendung von Alembic
Hinweise zu Funktionen der SciPy.linalg-Familie