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
lenda
fonte

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 .

Suresh Venkatasubramanian
fonte
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.

alta largura de banda
fonte
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)logP^(i)Q^(i), onde corro sobre as caixas.i

Desculpe, eu não sei R.

Emre
fonte
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