आर में केएल विचलन की गणना कैसे करें (उदाहरण के साथ)


आंकड़ों में, कुल्बैक-लीब्लर (केएल) विचलन एक दूरी मीट्रिक है जो दो संभाव्यता वितरणों के बीच अंतर को मापता है।

यदि हमारे पास दो संभाव्यता वितरण हैं, पी और क्यू, तो हम आम तौर पर केएल विचलन को नोटेशन केएल (पी || क्यू) का उपयोग करके लिखते हैं, जिसका अर्थ है “क्यू से पी का विचलन”।

हम निम्नलिखित सूत्र का उपयोग करके इसकी गणना करते हैं:

केएल(पी || क्यू) = Σपी(एक्स) एलएन (पी(एक्स) / क्यू(एक्स))

यदि दो वितरणों के बीच केएल विचलन शून्य है, तो यह इंगित करता है कि वितरण समान हैं।

आर में दो संभाव्यता वितरणों के बीच केएल विचलन की गणना करने का सबसे सरल तरीका फिलेंट्रॉपी पैकेज से केएल() फ़ंक्शन का उपयोग करना है।

निम्नलिखित उदाहरण दिखाता है कि व्यवहार में इस फ़ंक्शन का उपयोग कैसे करें।

उदाहरण: आर में केएल विचलन की गणना

मान लीजिए कि हमारे पास 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)

नोट : यह महत्वपूर्ण है कि प्रत्येक वितरण की संभावनाओं का योग एक हो।

हम दो वितरणों के बीच केएल विचलन की गणना करने के लिए निम्नलिखित कोड का उपयोग कर सकते हैं:

 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 

क्यू वितरण से पी वितरण का केएल विचलन लगभग 0.589 है।

ध्यान दें कि इस गणना में उपयोग की जाने वाली इकाइयों को नेट के रूप में जाना जाता है, जो सूचना की प्राकृतिक इकाई का संक्षिप्त रूप है।

तो हम कहेंगे कि केएल विचलन 0.589 नेट है।

यह भी ध्यान दें कि केएल विचलन एक सममित मीट्रिक नहीं है। इसका मतलब यह है कि यदि हम पी वितरण से क्यू वितरण के केएल विचलन की गणना करते हैं, तो हमें संभवतः एक अलग मूल्य मिलेगा:

 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 

पी वितरण से क्यू वितरण का केएल विचलन लगभग 0.497 नेट है।

यह भी ध्यान दें कि कुछ सूत्र केएल विचलन की गणना के लिए लॉग बेस -2 का उपयोग करते हैं। इस मामले में हम नेट्स के बजाय बिट्स के संदर्भ में विचलन के बारे में बात कर रहे हैं।

बिट्स के संदर्भ में केएल विचलन की गणना करने के लिए, आप यूनिट तर्क में लॉग 2 का उपयोग कर सकते हैं:

 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

क्यू वितरण से पी वितरण का केएल विचलन लगभग 0.7178 बिट्स है।

अतिरिक्त संसाधन

निम्नलिखित ट्यूटोरियल बताते हैं कि आर में अन्य सामान्य कार्य कैसे करें:

आर में सामान्य वितरण कैसे उत्पन्न करें
आर में सामान्य वितरण कैसे प्लॉट करें

एक टिप्पणी जोड़ने

आपका ईमेल पता प्रकाशित नहीं किया जाएगा. आवश्यक फ़ील्ड चिह्नित हैं *