Como calcular a divergência kl em python (com exemplo)
Nas estatísticas, a divergência Kullback-Leibler (KL) é uma métrica de distância que quantifica a diferença entre duas distribuições de probabilidade.
Se tivermos duas distribuições de probabilidade, P e Q, geralmente escrevemos a divergência KL usando a notação KL(P || Q), que significa “divergência de P de Q”.
Calculamos usando a seguinte fórmula:
KL(P || Q) = ΣP(x) ln (P(x) / Q(x))
Se a divergência KL entre duas distribuições for zero, isso indica que as distribuições são idênticas.
Podemos usar a função scipy.special.rel_entr() para calcular a divergência KL entre duas distribuições de probabilidade em Python.
O exemplo a seguir mostra como usar esta função na prática.
Exemplo: calculando a divergência KL em Python
Suponha que temos as duas distribuições de probabilidade a seguir em Python:
Nota : É importante que as probabilidades de cada distribuição somam um.
#define two probability distributions
P = [.05, .1, .2, .05, .15, .25, .08, .12]
Q = [.3, .1, .2, .1, .1, .02, .08, .1]
Podemos usar o seguinte código para calcular a divergência KL entre as duas distribuições:
from scipy. special import rel_entr
#calculate (P || Q)
sum(rel_entr(P, Q))
0.589885181619163
A divergência KL da distribuição P da distribuição Q é de aproximadamente 0,589 .
Observe que as unidades usadas neste cálculo são conhecidas como nats , que é a abreviação de unidade natural de informação .
Então diríamos que a divergência KL é de 0,589 nats .
Observe também que a divergência KL não é uma métrica simétrica. Isto significa que se calcularmos a divergência KL da distribuição Q da distribuição P, provavelmente obteremos um valor diferente:
from scipy. special import rel_entr
#calculate (Q || P)
sum(rel_entr(Q, P))
0.497549319448034
A divergência KL da distribuição Q da distribuição P é de aproximadamente 0,497 nats .
Nota : Algumas fórmulas usam log base 2 para calcular a divergência KL. Neste caso estamos falando de divergência em termos de bits e não de nats.
Recursos adicionais
Os tutoriais a seguir explicam como realizar outras operações comuns em Python:
Como criar uma matriz de correlação em Python
Como criar uma matriz de covariância em Python