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.

A maneira mais fácil de calcular a divergência KL entre duas distribuições de probabilidade no R é usar a função KL() da função filantropia pacote.

O exemplo seguinte mostra como utilizar esta função na prática.

Exemplo: Cálculo da Divergência KL no R

Suponhamos que temos as duas distribuições de probabilidade seguintes em R:

 #defina duas distribuições de probabilidade P <- c(.05, .1, .2, .05, .15, .25, .08, .12) Q <- c(.3, .1, .2, .1, .1, .02, .08, .1) 

Nota É importante que a soma das probabilidades de cada distribuição seja igual a um.

Podemos utilizar o seguinte código para calcular a divergência KL entre as duas distribuições:

 library (philentropy) #reunir as distribuições numa matriz x <- rbind(P,Q) #calcular a divergência KL KL(x, unit="log") Métrica: 'kullback-leibler' usando unit: 'log'; comparando: 2 vectores. kullback-leibler 0.5898852 

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:

 library (philentropy) #reunir as distribuições numa matriz x <- rbind(Q,P) #calcular a divergência KL KL(x, unit="log") Métrica: 'kullback-leibler' usando unit: 'log'; comparando: 2 vectores. kullback-leibler 0.4975493 

A divergência KL da distribuição Q em relação à distribuição P é de cerca de 0,497 nats .

Note-se também que 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.

Para calcular a divergência KL em termos de bits, pode utilizar log2 no unidade argumento:

 library (philentropy) #reunir as distribuições numa matriz x <- rbind(P,Q) #calcular a divergência KL (em bits) KL(x, unit="log2") Métrica: 'kullback-leibler' usando unit: 'log2'; comparando: 2 vectores. kullback-leibler 0.7178119 

A divergência KL da distribuição P em relação à distribuição Q é de cerca de 0,7178 bits .