Kullback-Leibler Divergence untuk dua sampel


10

Saya mencoba menerapkan estimasi numerik Kullback-Leibler Divergence untuk dua sampel. Untuk debug implementasi, ambil sampel dari dua distribusi normal dan .N ( 1 , 2 )N(0,1)N(1,2)

Untuk perkiraan sederhana saya menghasilkan dua histogram dan mencoba untuk memperkirakan secara integral numerik. Saya terjebak dengan menangani bagian-bagian histogram di mana sampah salah satu histogram adalah nol sehingga saya akhirnya membagi dengan nol atau logaritma nol. Bagaimana saya menangani masalah ini?

Sebuah pertanyaan terkait muncul di benak saya: Bagaimana tepatnya menghitung KL-Divergence antara dua distribusi seragam yang berbeda? Apakah saya harus membatasi integral dengan penyatuan dukungan dari kedua distribusi?


Nah, dukungan distribusi normal adalah himpunan bilangan real. Tidak ada masalah dalam matematika murni, tapi ya, untuk perkiraan numerik Anda, Anda perlu memastikan ukuran sampel Anda cukup besar relatif terhadap wilayah yang ingin Anda integrasikan. Anda tidak akan dapat mengintegrasikan lebih (-inf, + inf) seperti yang Anda dapat dalam matematika murni ... Pergi untuk sesuatu yang masuk akal? Jika Anda lebih dari 3 standar deviasi dari mean, itu akan sangat tipis ...
Matthew Gunn

1
Sehubungan dengan pertanyaan kedua Anda, perbedaan KL antara dua distribusi seragam yang berbeda tidak ditentukan ( tidak ditentukan). Demikian pula, divergensi KL untuk dua distribusi empiris tidak terdefinisi kecuali setiap sampel memiliki setidaknya satu pengamatan dengan nilai yang sama dengan setiap pengamatan dalam sampel lainnya. log(0)
jbowman

@jbowman Pesan kecil. Meskipun Anda benar bahwa tidak terdefinisi (atau ), sudah lazim dalam teori informasi untuk memperlakukan sebagai . - log ( 0 ) 0 0log(0)log(0)00
Luca Citi

Jawaban:


9

Divergensi Kullback-Leibler didefinisikan sebagai jadi untuk menghitung (memperkirakan) ini dari data empiris kita perlu, mungkin, beberapa perkiraan fungsi kepadatan . Jadi titik awal alami bisa melalui estimasi kepadatan (dan setelah itu, hanya integrasi numerik). Seberapa baik atau stabil metode seperti itu, saya tidak tahu.p ( x ) , q ( x )

KL(P||Q)=p(x)logp(x)q(x)dx
p(x),q(x)

Tapi pertama pertanyaan kedua Anda, maka saya akan kembali ke yang pertama. Katakanlah dan adalah kerapatan yang seragam pada masing-masing dan . Maka sementara lebih sulit untuk didefinisikan, tetapi satu-satunya nilai yang masuk akal untuk memberikannya adalah , sejauh yang saya bisa lihat, karena melibatkan mengintegrasikan yang dapat kita pilih untuk diinterpretasikan sebagai . Hasil ini masuk akal dari interpretasi yang saya berikan di Intuition on the Kullback-Leibler (KL) Divergenceq [ 0 , 1 ] [ 0 , 10 ] KL ( p | | q ) = log 10 KL ( q | | p ) log ( 1 / 0 ) log pq[0,1][0,10]KL(p||q)=log10KL(q||p)log(1/0)log

Kembali ke pertanyaan utama. Hal ini ditanyakan dengan cara yang sangat nonparametrik, dan tidak ada asumsi yang dinyatakan pada kepadatan. Mungkin beberapa asumsi diperlukan. Tetapi dengan asumsi dua kepadatan diusulkan sebagai model bersaing untuk fenomena yang sama, kita mungkin dapat mengasumsikan mereka memiliki ukuran yang mendominasi yang sama: Perbedaan KL antara distribusi probabilitas kontinu dan diskrit akan selalu menjadi tak terbatas, misalnya. Satu makalah yang membahas pertanyaan ini adalah sebagai berikut: https://pdfs.semanticscholar.org/1fbd/31b690e078ce938f73f14462fceadc2748bf.pdf Mereka mengusulkan metode yang tidak memerlukan estimasi kepadatan pendahuluan, dan menganalisis sifat-sifatnya.

(Ada banyak makalah lain). Saya akan kembali dan memposting beberapa detail dari makalah itu, gagasannya.

 EDIT               

Beberapa ide dari makalah itu, yaitu tentang estimasi divergensi KL dengan sampel pertama dari distribusi yang benar-benar kontinu. Saya menunjukkan proposal mereka untuk distribusi satu dimensi, tetapi mereka juga memberikan solusi untuk vektor (menggunakan estimasi kepadatan tetangga terdekat). Sebagai bukti bacalah korannya!

Mereka mengusulkan untuk menggunakan versi fungsi distribusi empiris, tetapi diinterpolasi secara linier antara titik sampel untuk mendapatkan versi kontinu. Mereka mendefinisikan mana adalah fungsi langkah Heavyside, tetapi didefinisikan sehingga . Kemudian fungsi yang diinterpolasi secara linear (dan diperluas secara horizontal di luar kisaran) adalah ( untuk kontinu). Lalu mereka mengusulkan untuk memperkirakan divergensi Kullback-Leibler dengan mana danUU(0)=0,5Pcc D (PQ)=1

Pe(x)=1ni=1nU(xxi)
UU(0)=0.5PccδPc=Pc(xi)-Pc(xi-ϵ)
D^(PQ)=1ni=1nlog(δPc(xi)δQc(xi))
δPc=Pc(xi)Pc(xiϵ)ϵ adalah angka yang lebih kecil dari jarak terkecil sampel.

Kode R untuk versi fungsi distribusi empiris yang kita butuhkan adalah

my.ecdf  <-  function(x)   {
    x   <-   sort(x)
    x.u <-   unique(x)
    n  <-  length(x) 
    x.rle  <-  rle(x)$lengths
    y  <-  (cumsum(x.rle)-0.5) / n
    FUN  <-  approxfun(x.u, y, method="linear", yleft=0, yright=1,
                           rule=2)
    FUN
}          

catatan yang rledigunakan untuk menangani kasus dengan duplikat di x.

Kemudian estimasi divergensi KL diberikan oleh

KL_est  <-  function(x, y)   {
    dx  <-  diff(sort(unique(x)))
    dy  <-  diff(sort(unique(y)))
    ex  <-  min(dx) ; ey  <-  min(dy)
    e   <-  min(ex, ey)/2
    n   <-  length(x)    
    P  <-   my.ecdf(x) ; Q  <-  my.ecdf(y)
    KL  <-  sum( log( (P(x)-P(x-e))/(Q(x)-Q(x-e)))) / n
    KL              
}

Lalu saya menunjukkan simulasi kecil:

KL  <-  replicate(1000, {x  <-  rnorm(100)
                         y <- rt(100, df=5)
                         KL_est(x, y)})
hist(KL, prob=TRUE)

yang memberikan histogram berikut, menunjukkan (perkiraan) dari distribusi sampling dari estimator ini:

Distribusi sampel estimator KL

Sebagai perbandingan, kami menghitung perbedaan KL dalam contoh ini dengan integrasi numerik:

LR  <-  function(x) dnorm(x,log=TRUE)-dt(x,5,log=TRUE)
100*integrate(function(x) dnorm(x)*LR(x),lower=-Inf,upper=Inf)$value
[1] 3.337668

hmm ... perbedaannya cukup besar sehingga ada banyak yang harus diselidiki!


5

Memperluas sedikit jawaban kjetil-b-halvorsen , dan maaf karena tidak berkomentar, saya tidak memiliki reputasi:

  1. Saya merasa bahwa perhitungan analitis seharusnya (tanpa perkalian dengan 100):

LR <- function(x) dnorm(x,log=TRUE)-dt(x,5,log=TRUE) integrate(function(x) dnorm(x)*LR(x),lower=-Inf,upper=Inf)$value

  1. Jika saya benar, estimator tidak konvergen ke divergensi KL, tetapi konvergensi dinyatakan sebagai: . Panah mewakili konvergensi. D (P||Q)-1D(P||Q)D^(P||Q)D^(P||Q)1D(P||Q)

Setelah kedua koreksi tersebut dilakukan, hasilnya tampak lebih realistis.


Terima kasih, saya akan memeriksa ini dan memperbarui jawaban saya.
kjetil b halvorsen
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.