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 (P‖Q)=1
Pe(x)=1n∑i=1nU(x−xi)
UU(0)=0.5PccδPc=Pc(xi)-Pc(xi-ϵ)D^(P∥Q)=1n∑i=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 rle
digunakan 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:
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!