मुझे लगता है कि आप में पहले तर्क, y
का गलतफहमी समझ रहे हैं। जैसा कि ?entropy
में बताया गया है, यह गणना का एक वेक्टर देता है। वे एक साथ गिना जाता है जो प्रत्येक प्रतीक के सापेक्ष आवृत्तियों को देते हैं, जिनसे इस "सूचना के अलग स्रोत" पर संदेश बनाये गये हैं।
यह देखने के लिए कि यह कैसे खेलता है, एक साधारण उदाहरण देखें, केवल दो प्रतीकों (1/0, चालू/बंद, ए/बी, आपके पास क्या है) के साथ एक द्विआधारी सूचना स्रोत है। इस मामले में, निम्न में से सभी एक स्रोत है, जिसमें दो प्रतीकों के सापेक्ष आवृत्तियों ही कर रहे हैं के लिए एन्ट्रापी दे देंगे (यानी आधा प्रतीकों A
रों हैं और आधे B
रों हैं):
entropy(c(0.5, 0.5))
# [1] 0.6931472
entropy(c(1,1))
# [1] 0.6931472
entropy(c(1000,1000))
# [1] 0.6931472
entropy(c(0.0004, 0.0004))
# [1] 0.6931472
entropy(rep(1,2))
# [1] 0.6931472
क्योंकि वे सभी एक ही अंतर्निहित वितरण का संदर्भ देते हैं, जिसमें संभाव्यता उपलब्ध प्रतीकों के बीच अधिकतम रूप से फैलती है, वे प्रत्येक दो राज्य सूचना स्रोत (log(2) = 0.6931472)
) के लिए उच्चतम संभव एन्ट्रॉपी देते हैं।
जब आप entropy(runif(2))
के बजाय करते हैं, तो आप समान प्रतीकों से यादृच्छिक रूप से चुने गए दो प्रतीकों के लिए सापेक्ष संभावनाएं प्रदान कर रहे हैं। जब तक कि उन दो यादृच्छिक रूप से चयनित संख्या बिल्कुल बराबर न हों, आप entropy()
बता रहे हैं कि आपके पास दो आवृत्तियों के साथ एक सूचना स्रोत है जो विभिन्न आवृत्तियों के साथ उपयोग किया जाता है। नतीजतन, आप हमेशा एक गणना एंट्रॉपी प्राप्त करेंगे जो log(2)
से कम है।
set.seed(4)
(x <- runif(2))
# [1] 0.585800305 0.008945796
freqs.empirical(x) ## Helper function called by `entropy()` via `entropy.empirical()`
# [1] 0.98495863 0.01504137
## Low entropy, as you should expect
entropy(x)
# [1] 0.07805556
## Essentially the same thing; you can interpret this as the expected entropy
## of a source from which a message with 984 '0's and 15 '1's has been observed
entropy(c(984, 15))
सारांश में,, y=
तर्क 1
रों की एक लंबी स्ट्रिंग गुजर entropy(rep(1, 1024))
में के रूप में करके, आप सूचना के वह यह है कि एक असतत का वर्णन कर रहे हैं: यहाँ एक त्वरित उदाहरण वर्णन करने के लिए मैं क्या मतलब है समान वितरण का एनालॉग। लंबे समय तक या बहुत लंबे संदेश में, इसके 1024 अक्षरों में से प्रत्येक बराबर आवृत्ति के साथ होने की उम्मीद है, और आप इससे अधिक समान नहीं हो सकते हैं!
मैंने सोचा कि यह कार्यान्वयन के कारण हो सकता है। यदि "एमएम" विधि का उपयोग किया जाता है, तो व्यवहार अपेक्षा की जाती है सिवाय इसके कि दोहराए गए मानों की एन्ट्रॉपी उन मानों पर निर्भर करती है, यह नहीं होना चाहिए। "एमएल" विधि सही ढंग से इसे संभालती है। संपादित करें: मान्य क्रॉस वैसे भी एक बेहतर जगह हो सकता है। मुझे तब तक पता नहीं था जब तक कि आपने इसका सुझाव नहीं दिया। –
यदि यह कार्यान्वयन है, तो 'getAnywhere ("entropy.empirical")', 'getAnywhere ("entropy.MillerMadow")' और 'getAnywhere (" entropy.plugin ")' को देखने का प्रयास करें। – Laterow
धन्यवाद। मैंने सोर्स कोड को देखा है लेकिन मुझे यकीन नहीं है कि यह क्यों व्यवहार करता है। संक्षेप में, यह डेटा लेता है, इसे freqs फ़ंक्शन के साथ डिब्बे करता है, और उसके बाद लॉग फ़ंक्शन लागू करता है। –