python - Interpreting scipy.stats.entropy values -


मैं Kullback-Leibler का अनुमान लगाने के लिए scipy.stats.entropy का उपयोग करने की कोशिश कर रहा हूं। (केएल) दो वितरण के बीच विचलन अधिक विशेष रूप से, मैं केएल को एक मीट्रिक के रूप में उपयोग करने का निर्णय लेना चाहता हूं, ताकि यह तय हो जाए कि दो वितरण कैसे सुसंगत हैं।

हालांकि, मैं KL मूल्यों का व्याख्या नहीं कर सकता पूर्व के लिए:

t1 = numpy.random.normal (-2.5,0.1,1000)

टी 2 = numpy.random.normal (-2.5.0.1,1000)

scipy.stats.entropy (t1, t2)

0.0015539217193737955

फिर,

t1 = Numpy.random.normal (-2.5,0.1,1000)

t2 = numpy.random.normal (2.5,0.1,1000)

scipy.stats.entropy (टी 1, टी 2 )

= 0.0015908295787942181

अनिवार्य रूप से कोई ओवरलैप के साथ पूरी तरह से अलग वितरण कैसे एक ही KL मूल्य हो सकता है?

t1 = numpy यादृच्छिक। सामान्य (-2.5,0.1,1000)

टी 2 = अंडा.रेन्डम। सामान्य (25,।, 0.1,1000)

scipy.stats.entropy (टी 1, टी 2)

= 0.00081111364805590595

यह एक छोटे केएल मूल्य (यानी दूरी) देता है, जिसे मैं "अधिक सुसंगत" के रूप में व्याख्या करने के लिए झुकाता हूं।

कैसे इस संदर्भ में scipy.stats.entropy (यानी, केएल भिन्नता दूरी) Itemprop = "text">

numpy.random.normal (-2.5.0.1,1000) एक सामान्य वितरण से एक नमूना है यह एक यादृच्छिक क्रम में सिर्फ 1000 नंबर है। एन्ट्रापी के लिए:

pk [i] घटना के लिए संभवतः असामान्य संभावना है i

तो एक अर्थपूर्ण परिणाम प्राप्त करने के लिए, आपको संख्याएं "गठबंधन" करने की आवश्यकता होती है ताकि एक ही सूचक वितरण में समान पदों के अनुरूप हो। आपके उदाहरण में t1 [0] का टी 2 [0] से कोई संबंध नहीं है। आपका नमूना कोई भी प्रत्यक्ष जानकारी प्रदान नहीं करता है कि कैसे संभावित प्रत्येक मान है, जो कि आपको KL भिन्नता की आवश्यकता है; यह आपको केवल कुछ वास्तविक मूल्य देता है जो वितरण से लिए गए थे।

गठबंधन मूल्य प्राप्त करने का सबसे आसान तरीका कुछ निश्चित मूल्यों पर वितरण की संभावना घनत्व फ़ंक्शन का मूल्यांकन करना है। ऐसा करने के लिए, आपको scipy.stats.norm का उपयोग करने की आवश्यकता होती है (जो कि np.random.normal के बजाय एक वितरण ऑब्जेक्ट को विभिन्न तरीकों से छेड़छाड़ किया जा सकता है) केवल नमूना मूल्य लौटाता है)। यहाँ एक उदाहरण है:

  t1 = stats.norm (-2.5, 0.1) टी 2 = आँकड़े.अनर्म (-2.5, 0.1) टी 3 = आँकड़े.अनर्म (-2.4, 0.1) टी 4 = आँकड़े  

तब:

  .norm (-2.3, 0.1) # डोमेन पीडीएफ का मूल्यांकन x = np.linspace (-5, 5, 100) & gt; & gt; & gt; Stats.entropy (t1.pdf (x), टी 2 पीडीएफ (x)) -0.0 & gt; & gt; & gt; Stats.entropy (t1.pdf (x), t3.pdf (x)) 0.49999995020647586 & gt; & gt; & gt; Stats.entropy (t1.pdf (x), t4.pdf (x)) 1.999999900414918  

आप देख सकते हैं कि वितरण अलग-अलग स्थानांतरित होने पर, उनके केएल विचलन बढ़ जाता है। (वास्तव में, आपके दूसरे उदाहरण का उपयोग करके inf के एलएल के विचलन को दे देंगे क्योंकि वे बहुत कम ओवरलैप करते हैं।)


Comments

Popular posts from this blog

apache - 504 Gateway Time-out The server didn't respond in time. How to fix it? -

c# - .net WebSocket: CloseOutputAsync vs CloseAsync -

c++ - How to properly scale qgroupbox title with stylesheet for high resolution display? -