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