Cara menghitung divergensi kl di r (dengan contoh)


Dalam statistik, divergensi Kullback–Leibler (KL) adalah metrik jarak yang mengukur perbedaan antara dua distribusi probabilitas.

Jika kita mempunyai dua distribusi probabilitas, P dan Q, biasanya kita menulis divergensi KL menggunakan notasi KL(P || Q), yang berarti “divergensi P dari Q”.

Kami menghitungnya menggunakan rumus berikut:

KL(P || Q) = ΣP(x) ln (P(x) / Q(x))

Jika divergensi KL antara dua distribusi adalah nol, hal ini menunjukkan bahwa distribusi tersebut identik.

Cara paling sederhana untuk menghitung divergensi KL antara dua distribusi probabilitas di R adalah dengan menggunakan fungsi KL() dari paket filentropi .

Contoh berikut menunjukkan cara menggunakan fungsi ini dalam praktiknya.

Contoh: menghitung divergensi KL di R

Misalkan kita memiliki dua distribusi probabilitas berikut di R:

 #define two probability distributions
P <- c(.05, .1, .2, .05, .15, .25, .08, .12)
Q <- c(.3, .1, .2, .1, .1, .02, .08, .1)

Catatan : Penting agar probabilitas setiap distribusi berjumlah satu.

Kita dapat menggunakan kode berikut untuk menghitung divergensi KL antara kedua distribusi:

 library (philentropy)

#rbind distributions into one matrix
x <- rbind(P,Q)

#calculate KL divergence
KL(x, unit=' log ')

Metric: 'kullback-leibler' using unit: 'log'; comparing: 2 vectors.
kullback-leibler 
       0.5898852 

Divergensi KL distribusi P dan distribusi Q kira-kira 0,589 .

Perhatikan bahwa satuan yang digunakan dalam perhitungan ini dikenal sebagai nats , yang merupakan kependekan dari natural unit of information .

Jadi kita dapat mengatakan bahwa divergensi KL adalah 0,589 nats .

Perhatikan juga bahwa divergensi KL bukanlah metrik simetris. Artinya jika kita menghitung divergensi KL distribusi Q dari distribusi P, kemungkinan besar kita akan mendapatkan nilai yang berbeda:

 library (philentropy)

#rbind distributions into one matrix
x <- rbind(Q,P)

#calculate KL divergence
KL(x, unit=' log ')

Metric: 'kullback-leibler' using unit: 'log'; comparing: 2 vectors.
kullback-leibler 
       0.4975493 

Divergensi KL distribusi Q dan distribusi P kira-kira 0,497 nats .

Perhatikan juga bahwa beberapa rumus menggunakan log base-2 untuk menghitung divergensi KL. Dalam hal ini kita berbicara tentang divergensi dalam bentuk bit , bukan nat.

Untuk menghitung divergensi KL dalam bit, Anda dapat menggunakan log2 dalam argumen unit :

 library (philentropy)

#rbind distributions into one matrix
x <- rbind(P,Q)

#calculate KL divergence (in bits)
KL(x, unit=' log2 ')

Metric: 'kullback-leibler' using unit: 'log2'; comparing: 2 vectors.
kullback-leibler 
       0.7178119

Divergensi KL distribusi P dan distribusi Q kira-kira 0,7178 bit .

Sumber daya tambahan

Tutorial berikut menjelaskan cara melakukan tugas umum lainnya di R:

Cara menghasilkan distribusi normal di R
Cara memplot distribusi normal di R

Tambahkan komentar

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *