R'de kl farklılığı nasıl hesaplanır (örnekle)


İstatistikte Kullback-Leibler (KL) farklılığı, iki olasılık dağılımı arasındaki farkı ölçen bir mesafe ölçüsüdür.

Eğer P ve Q olmak üzere iki olasılık dağılımımız varsa, genellikle KL ıraksamasını “P’nin Q’dan ıraksaması” anlamına gelen KL(P || Q) gösterimini kullanarak yazarız.

Aşağıdaki formülü kullanarak hesaplıyoruz:

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

İki dağılım arasındaki KL farkının sıfır olması, dağılımların aynı olduğunu gösterir.

R’deki iki olasılık dağılımı arasındaki KL farklılığını hesaplamanın en basit yolu, philentropy paketindeki KL() fonksiyonunu kullanmaktır.

Aşağıdaki örnekte bu fonksiyonun pratikte nasıl kullanılacağı gösterilmektedir.

Örnek: R’deki KL diverjansının hesaplanması

R’de aşağıdaki iki olasılık dağılımına sahip olduğumuzu varsayalım:

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

Not : Her dağılımın olasılık toplamının bir olması önemlidir.

İki dağılım arasındaki KL farkını hesaplamak için aşağıdaki kodu kullanabiliriz:

 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 

P dağılımının Q dağılımından KL sapması yaklaşık 0,589’dur .

Bu hesaplamada kullanılan birimlerin, doğal bilgi biriminin kısaltması olan nats olarak bilindiğini unutmayın.

Yani KL diverjansının 0,589 nat olduğunu söyleyebiliriz.

Ayrıca KL ıraksamasının simetrik bir metrik olmadığını unutmayın. Bu, Q dağılımının P dağılımından KL sapmasını hesaplarsak muhtemelen farklı bir değer elde edeceğimiz anlamına gelir:

 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 

Q dağılımının P dağılımından KL sapması yaklaşık 0,497 nat’tır .

Ayrıca bazı formüllerin KL farklılığını hesaplamak için log tabanı-2’yi kullandığını unutmayın. Bu durumda nat’lardan ziyade bitler cinsinden farklılıktan bahsediyoruz.

KL farklılığını bit cinsinden hesaplamak için birim argümanında log2’yi kullanabilirsiniz:

 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

P dağılımının Q dağılımından KL farkı yaklaşık 0,7178 bittir .

Ek kaynaklar

Aşağıdaki eğitimlerde R’de diğer ortak görevlerin nasıl gerçekleştirileceği açıklanmaktadır:

R’de normal dağılım nasıl oluşturulur?
R’de normal dağılım nasıl çizilir

Yorum ekle

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir