Bagaimana cara menghitung divergensi Kullback-Leibler ketika PMF berisi 0s?

9

Saya memiliki jangka waktu berikut

masukkan deskripsi gambar di sini

diperoleh dengan menggunakan data yang diposting di bawah ini.

Untuk ukuran jendela geser 10, saya mencoba menghitung KL-divergensi antara nilai-nilai PMF dalam jendela geser saat ini dan PMF sejarah dengan tujuan akhir memplot nilai KL-divergensi sepanjang waktu sehingga saya dapat membandingkan dua seri waktu.

Sampai sekarang, ada masalah konseptual yang saya hadapi (yang akan saya jelaskan menggunakan 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. ]))

Masalahnya adalah bahwa hasilnya PMFmengandung 0s sehingga saya tidak bisa benar-benar beberapa dua PMFuntuk mendapatkan KL-divergence. Bisakah seseorang memberi tahu saya cara mengurangi masalah ini?

Data

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 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
Legenda
sumber

Jawaban:

12

Salah satu trik standar untuk mengatasi masalah ini adalah dengan menggunakan apa yang disebut koreksi Laplace. Akibatnya, Anda menambahkan satu "hitungan" ke semua tempat sampah, dan renormalkan. Ada juga alasan bagus untuk menambahkan hitungan 0,5 sebagai gantinya: penaksir khusus ini disebut penaksir Krichevsky-Trofimov .

Suresh Venkatasubramanian
sumber
4

Salah satu cara untuk memikirkan masalah Anda adalah bahwa Anda tidak benar-benar percaya pada PMF yang telah Anda hitung dari histogram. Anda mungkin perlu sedikit sebelumnya dalam model Anda. Karena jika Anda yakin pada PMF, maka divergensi KL harus tak terhingga karena Anda mendapatkan nilai dalam satu PMF yang tidak mungkin di PMF lainnya. Jika, di sisi lain Anda memiliki sedikit informasi sebelumnya maka selalu ada kemungkinan kecil untuk melihat hasil tertentu. Salah satu cara untuk memperkenalkan ini adalah dengan menambahkan vektor yang beberapa kali skalar ke histogram. Distribusi sebelum teoritis Anda akan menggunakan adalah distribusi Dirichlet , yang merupakan sebelum konjugat dari distribusi kategoris . Tetapi untuk tujuan praktis Anda dapat melakukan sesuatu seperti

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

di mana wada beberapa berat positif, tergantung pada seberapa kuat sebelum Anda ingin miliki

highBandWidth
sumber
1
+1 untuk waktu dan jawaban Anda. Terima kasih. Saya telah membaca ini selama 8 jam terakhir dan sepertinya saya perlu menambahkan sebelum bekerja di sekitar ini. Namun, saya tidak dapat menemukan referensi yang cocok yang menjelaskan fakta ini. Apakah ini sesuatu yang jelas dalam komunitas statistik atau apakah Anda mengetahui referensi yang menunjukkan persyaratan ini untuk KL-divergence?
Legenda
3

Saya akan membuang data sehingga Anda dapat membandingkan dua PMF; diberikan dua perkiraan PMF dan , Anda dapat menghitung KLD hanya sebagai: , di mana menggilas sampah.P^Q^DKL(P^Q^)iP^(i)logP^(i)Q^(i)i

Maaf, saya tidak tahu R.

Emre
sumber
1
+1 untuk waktu Anda. Saya memperbarui pertanyaan saya dengan masalah yang saya hadapi dengan rumus ini. Saya tidak dapat memahami cara mengatasi masalah ini ketika PMF berisi 0s. Apakah Anda memiliki komentar tentang cara mengurangi masalah ini?
Legenda
Apakah nol menunjukkan tidak adanya data atau itu nilai yang valid? Jika yang pertama, Anda hanya akan mengabaikannya. Jika yang terakhir, Anda dapat mendedikasikan salah satu nampan ke nilai nol.
Emre
Karena ini adalah deret waktu, dalam beberapa kasus, ada nol peristiwa dan dalam beberapa ada data yang hilang jadi saya menambahkan nol untuk menggantikan nilai yang hilang. Anda membawa poin yang menarik: Dapatkah saya mengabaikan nilai dalam deret waktu jika mereka hilang? Bukankah itu terbukti fatal?
Legenda
Saya akan mempertahankan nol memilih elemen di jendela yang bergerak, tetapi mengabaikannya untuk tujuan menghitung KLD.
Emre
Dimengerti Terima kasih! Diterima sebagai jawaban. Pertanyaan terakhir saya adalah mengenai metrik terkait yang disebut divergensi "Jensen-Shannon". Saya menemukan metrik ini secara kebetulan, tetapi metrik ini tampaknya tidak memiliki persyaratan kesinambungan absolut. Ada saran?
Legenda