[PYTHON] Remarques sur la divergence KL entre les distributions de Poisson

Le calcul de la divergence KL de deux distributions de probabilité selon la distribution de Poisson est résumé sous forme de mémo.

supposition

Les deux distributions de probabilité $ p et q $ suivent une distribution de Poisson avec les paramètres $ \ lambda_p et \ lambda_q $, respectivement. La fonction de densité de probabilité de $ p $ est définie comme suit.

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

La divergence KL de la distribution de probabilité discrète est la suivante.

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

une formule

\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$À}\\&=\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*}

Vérification

J'ai essayé de voir si le calcul de la divergence KL en utilisant le pmf et l'entropie de scipy et le résultat de la formule ci-dessus sont égaux.

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


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

#Définir le paramètre λ comme alpha
alpha_p = 1
alpha_q = 5
p = poisson.pmf(x, alpha_p)
q = poisson.pmf(x, alpha_q)
kl = entropy(p, q)

#Calcul basé sur la formule ci-dessus
kl_alpha = alpha_q - alpha_p + alpha_p * np.log(alpha_p / alpha_q)

print("Divergence KL utilisant la fonction d'entropie:", kl)
print("Divergence KL utilisant alpha:", kl_alpha)

Résultat de sortie

Divergence KL utilisant la fonction d'entropie: 2.3905620875658995
Divergence KL utilisant alpha: 2.3905620875658995

Recommended Posts

Remarques sur la divergence KL entre les distributions de Poisson
Divergence KL entre les distributions normales
Notes sur Flask
Remarques sur les réseaux de neurones
Notes de céleri sur Django
Remarques sur l'utilisation d'Alembic
Remarques sur les fonctions de la famille SciPy.linalg