Como calcular a divergência Kullback-Leibler quando o PMF contém 0s?


9

Eu tenho as seguintes séries temporais

insira a descrição da imagem aqui

obtido usando os dados postados abaixo.

Para um tamanho de janela deslizante de 10, estou tentando calcular a divergência KL entre o PMF de valores na janela deslizante atual e o PMF da história com o objetivo final de traçar o valor da divergência KL ao longo do tempo para que eu pode comparar duas séries temporais.

A partir de agora, há um problema conceitual que estou enfrentando (o qual explicarei usando o Python):

In [228]: samples = [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1]

# In reality this 10 should be 20 because that is the max value I have seen in the timeseries
In [229]: bins = scipy.linspace(0, 10, 21) 
In [230]: bins
Out[230]:
array([  0. ,   0.5,   1. ,   1.5,   2. ,   2.5,   3. ,   3.5,   4. ,
         4.5,   5. ,   5.5,   6. ,   6.5,   7. ,   7.5,   8. ,   8.5,
         9. ,   9.5,  10. ])
In [231]: scipy.histogram(samples, bins=bins, density=True)
Out[231]:
(array([ 1.63636364,  0.        ,  0.36363636,  0.        ,  0.        ,
        0.        ,  0.        ,  0.        ,  0.        ,  0.        ,
        0.        ,  0.        ,  0.        ,  0.        ,  0.        ,
        0.        ,  0.        ,  0.        ,  0.        ,  0.        ]),
 array([  0. ,   0.5,   1. ,   1.5,   2. ,   2.5,   3. ,   3.5,   4. ,
         4.5,   5. ,   5.5,   6. ,   6.5,   7. ,   7.5,   8. ,   8.5,
         9. ,   9.5,  10. ]))

O problema é que o resultado PMFcontém 0s, de modo que não posso realmente múltiplos dois PMFs para obter a divergência KL. Alguém pode me dizer como mitigar esse problema?

Dados

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 20 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 2 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 0 1 0 1 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 5 0 0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Respostas:


12

Um truque padrão para lidar com esse problema é usar o que é chamado de correção de Laplace. Com efeito, você adiciona uma "contagem" a todos os compartimentos e renormaliza. Também existem boas razões para adicionar uma contagem de 0,5: esse estimador em particular é chamado de estimador de Krichevsky-Trofimov .


4

Uma maneira de pensar sobre o seu problema é que você realmente não confia no PMF que calculou a partir do histograma. Você pode precisar de um pouco de antecedência no seu modelo. Como se você estivesse confiante no PMF, a divergência de KL deveria ser infinita, pois você obteve valores em um PMF que são impossíveis no outro PMF. Se, por outro lado, você teve um leve e pouco informativo anterior, sempre há uma pequena probabilidade de obter um determinado resultado. Uma maneira de introduzir isso seria adicionar um vetor vezes mais escalar ao histograma. A distribuição teórica prévia que você usaria é a distribuição dirichlet , que é o conjugado anterior à distribuição categórica . Mas, para fins práticos, você pode fazer algo como

pmf_unnorm = scipy.histogram(samples, bins=bins, density=True)[0] +  w * scipy.ones(len(bins)-1)
pmf = pmf_unnor / sum(pmf_unnorm)

onde westá um peso positivo, dependendo da força que você deseja ter antes.


1
+1 pelo seu tempo e resposta. Obrigado. Eu tenho lido sobre isso nas últimas 8 horas e parece que preciso adicionar um antes para contornar isso. No entanto, não consigo encontrar uma referência adequada que explique esse fato. Isso é algo óbvio na comunidade de estatísticas ou você conhece uma referência que aponta esse requisito para divergência de KL?
— Legend

3

Eu agruparia os dados para que você possa comparar os dois PMFs; dadas duas estimativas do PMFP^ e Q^, você pode calcular o KLD simplesmente como: DKL(P^‖Q^)≡∑iP^(i)log⁡P^(i)Q^(i), onde corro sobre as caixas.i

Desculpe, eu não sei R.


1
+1 pelo seu tempo. Atualizei minha pergunta com o problema que estou enfrentando com esta fórmula. Não consigo entender como resolver esse problema quando os PMFs contêm 0s. Você teria algum comentário sobre como mitigar esse problema?
— Legend

O zero indica a ausência de dados ou é um valor válido? Se o primeiro, você simplesmente o ignoraria. Nesse último caso, você pode dedicar um dos compartimentos ao valor zero.
— Emre

Como se trata de uma série temporal, em alguns casos, havia zero eventos e, em alguns, havia dados ausentes, então adicionei zero para substituir o valor ausente. Você traz um ponto interessante: posso ignorar valores em uma série temporal, caso estejam faltando? Isso não seria fatal?
— Legend

Eu reteria os zeros selecionando os elementos na janela em movimento, mas os desconsideraria para fins de cálculo do KLD.
— Emre

Entendido. Obrigado! Aceito como resposta. Minha última pergunta seria sobre uma métrica relacionada chamada divergência "Jensen-Shannon". Encontrei essa métrica por acaso, mas essa métrica não parece ter um requisito de continuidade absoluta. Alguma sugestão?
— Legend
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.