Tentei implementar uma estimativa numérica da divergência Kullback-Leibler para duas amostras. Para depurar a implementação, extrair as amostras de duas distribuições normais e .
Para uma estimativa simples, gerei dois histogramas e tentei aproximar numericamente a integral. Fiquei preso ao lidar com aquelas partes do histograma em que os compartimentos de um dos histogramas são zero, de modo que acabo dividindo por zero ou com o logaritmo de zero. Como eu manejo esse problema?
Uma pergunta relacionada surgiu em minha mente: como calcular exatamente a divergência KL entre duas distribuições uniformes diferentes? Preciso restringir a integral à união do suporte de ambas as distribuições?
Respostas:
A divergência Kullback-Leibler é definida como para calcular (estimar) isso a partir de dados empíricos, talvez precisássemos de algumas estimativas das funções de densidade . Portanto, um ponto de partida natural pode ser via estimativa de densidade (e depois disso, apenas integração numérica). Quão bom ou estável seria esse método, não sei.
Mas primeiro sua segunda pergunta, depois voltarei à primeira. Digamos que e sejam densidades uniformes em e respectivamente. Então enquanto é mais difícil de definir, mas o único valor razoável a ser dado é , tanto quanto posso ver, pois envolve integrando que podemos escolher para interpretar como . Estes resultados são razoáveis a partir da interpretação que dou em Intuição sobre a divergência de Kullback-Leibler (KL)p q [0,1] [0,10] KL(p||q)=log10 KL(q||p) ∞ log(1/0) log∞
Voltando à questão principal. É solicitado de uma maneira muito não paramétrica, e nenhuma suposição é declarada sobre as densidades. Provavelmente são necessárias algumas suposições. Mas, supondo que as duas densidades sejam propostas como modelos concorrentes para o mesmo fenômeno, provavelmente podemos assumir que elas tenham a mesma medida dominante: a divergência de KL entre uma distribuição de probabilidade contínua e uma discreta será sempre infinito, por exemplo. Um artigo abordando esta questão é o seguinte: https://pdfs.semanticscholar.org/1fbd/31b690e078ce938f73f14462fceadc2748bf.pdf Eles propõem um método que não precisa de estimativa preliminar de densidade e analisa suas propriedades.
(Existem muitos outros documentos). Voltarei e publicarei alguns detalhes desse trabalho, as idéias.
Algumas idéias desse artigo, que trata da estimativa da divergência de KL com amostras de iid de distribuições absolutamente contínuas. Mostro sua proposta para distribuições unidimensionais, mas elas também fornecem uma solução para vetores (usando a estimativa de densidade de vizinhos mais próximos). Para provas, leia o artigo!
Eles propõem o uso de uma versão da função de distribuição empírica, mas interpolam linearmente entre os pontos da amostra para obter uma versão contínua. Eles definem onde é a função da etapa Heavyside, mas definida para que . Então essa função interpolada linearmente (e estendida horizontalmente além do intervalo) é ( para contínua). Então eles propõem estimar a divergência de Kullback-Leibler por onde e
O código R para a versão da função de distribuição empírica de que precisamos é
note que
rle
é usado para cuidar do caso com duplicatas emx
.Então a estimativa da divergência KL é dada por
Então eu mostro uma pequena simulação:
que fornece o seguinte histograma, mostrando (uma estimativa) a distribuição amostral desse estimador:
Para comparação, calculamos a divergência de KL neste exemplo por integração numérica:
hmm ... a diferença é grande o suficiente para que haja muito aqui para investigar!
fonte
Expandindo um pouco a resposta de kjetil-b-halvorsen , e desculpe-me por não comentar, não tenho reputação:
LR <- function(x) dnorm(x,log=TRUE)-dt(x,5,log=TRUE) integrate(function(x) dnorm(x)*LR(x),lower=-Inf,upper=Inf)$value
Depois que essas duas correções são feitas, os resultados parecem mais realistas.
fonte