Nas estatísticas, o Divergência de 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, escrevemos normalmente a divergência KL utilizando a notação KL(P
O seu cálculo é efectuado através da seguinte fórmula:
KL(P 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 utilizar a função scipy.special.rel_entr() para calcular a divergência KL entre duas distribuições de probabilidade em Python.
O exemplo seguinte mostra como utilizar esta função na prática.
Exemplo: calcular a divergência KL em Python
Suponha que temos as seguintes duas distribuições de probabilidade em Python:
Nota É importante que a soma das probabilidades de cada distribuição seja igual a um.
#defina duas distribuições de probabilidade P = [.05, .1, .2, .05, .15, .25, .08, .12] Q = [.3, .1, .2, .1, .1, .02, .08, .1]
Podemos utilizar o seguinte código para calcular a divergência KL entre as duas distribuições:
from scipy. special import rel_entr #calcular (P
A divergência KL da distribuição P em relação à distribuição Q é de cerca de 0.589 .
Note-se que as unidades utilizadas neste cálculo são conhecidas como nats, que é a abreviatura de unidade natural de informação .
Assim, diríamos que a divergência KL é 0,589 nats .
Note-se também que a divergência KL não é uma métrica simétrica, o que significa que se calcularmos a divergência KL da distribuição Q a partir da distribuição P, é provável que obtenhamos um valor diferente:
from scipy. special import rel_entr #calculate (Q
A divergência KL da distribuição Q em relação à distribuição P é de cerca de 0,497 nats .
Nota Algumas fórmulas utilizam log de base 2 para calcular a divergência KL. Neste caso, referimo-nos à divergência em termos de bits em vez de nats.