आपसी जानकारी की गणना करते समय डिब्बे की संख्या


10

मैं पारस्परिक जानकारी का उपयोग करके दो चर, ए और बी के बीच संबंध को निर्धारित करना चाहता हूं। गणना करने का तरीका प्रेक्षणों को कम करके है (नीचे उदाहरण पायथन कोड देखें)। हालांकि, कौन से कारक निर्धारित करते हैं कि डिब्बे की संख्या क्या उचित है? मुझे जल्दी होने के लिए गणना की आवश्यकता है इसलिए मैं बस बहुत सारे डिब्बे का उपयोग सुरक्षित पक्ष पर करने के लिए नहीं कर सकता।

from sklearn.metrics import mutual_info_score

def calc_MI(x, y, bins):
    c_xy = np.histogram2d(x, y, bins)[0]
    mi = mutual_info_score(None, None, contingency=c_xy)
    return mi

जवाबों:


15

हिस्टोग्राम के साथ आपसी जानकारी (एमआई) का अनुमान लगाने के लिए डिब्बे की सबसे अच्छी संख्या नहीं है। सबसे अच्छा तरीका है कि यदि आप कर सकते हैं, या अंगूठे के एक नियम पर भरोसा करने के लिए इसे क्रॉस-मान्यता के माध्यम से चुनना है। यही कारण है कि एमआई के कई अन्य अनुमानक जो हिस्टोग्राम्स पर आधारित नहीं हैं, प्रस्तावित किए गए हैं।

डिब्बे की संख्या कुल डेटा बिंदुओं पर निर्भर करेगी n। दो चर के बीच संयुक्त वितरण के लिए अनुमान त्रुटियों से बचने के लिए आपको बहुत अधिक डिब्बे से बचने की कोशिश करनी चाहिए। आपको दो चरों के बीच संबंधों को पकड़ने में सक्षम होने के लिए बहुत कम डिब्बे से बचना चाहिए। यह देखते हुए कि दोनों के लिए समान चौड़ाई के डिब्बे के np.histogram2d(x, y, D)साथ एक 2 डी हिस्टोग्राम उत्पन्न करता है और मैं व्यक्तिगत रूप से चुनूंगा: Dxy

डी=n/5
इस मामले में दो समान रूप से वितरित यादृच्छिक चर के लिए औसतन आपके पास हिस्टोग्राम के प्रत्येक सेल के लिए कम से कम अंक होंगे: यह एक संभावित विकल्प है जो (Cellucci, 2005) में प्रस्तावित अनुकूली विभाजन दृष्टिकोण का अनुकरण करता है । बाद वाले दृष्टिकोण का उपयोग अक्सर एमआई का अनुमान लगाने के लिए किया जाता है ताकि आनुवंशिक नेटवर्क का अनुमान लगाया जा सके: जैसे कि MIDER में5
nडीएक्सडीY5nडी25डी2n/5डी=n/5

यदि आपके पास बहुत सारे डेटा पॉइंट और कोई लापता मान नहीं है, तो आपको सर्वोत्तम संख्या में डिब्बे खोजने के बारे में बहुत चिंता नहीं करनी चाहिए; जैसे अगर । यदि यह मामला नहीं है, तो आप परिमित नमूनों के लिए एमआई को सही मान सकते हैं। (Steuer et al।, 2002) आनुवंशिक नेटवर्क अनुमान के कार्य के लिए MI के लिए कुछ सुधार पर चर्चा करता है।nn=100,000


हिस्टोग्राम के लिए डिब्बे की संख्या का अनुमान लगाना एक पुरानी समस्या है। आप इस बात में दिलचस्पी ले सकते हैं कि लॉरिट्ज़ डाइकमैन ने एमआई के लिए डिब्बे की संख्या का अनुमान लगाया है। यह बात माइक एक्स कोहेन की किताब में एक अध्याय पर आधारित है जिसमें तंत्रिका समय-श्रृंखला है।

आप चुन सकते हैं डीएक्स तथा डीY स्वतंत्र रूप से और 1 डी हिस्टोग्राम में डिब्बे की संख्या का अनुमान लगाने के लिए उपयोग किए गए अंगूठे के नियम का उपयोग करें।

फ्रीडमैन-डायकोनिस का नियम (वितरण पर कोई धारणा नहीं):

डीएक्स=अधिकतमएक्स-मिनटएक्स2IQRn-1/3
जहां 75-मात्रात्मक और 25-मात्रात्मक के बीच का अंतर है। एसई में इस संबंधित प्रश्न को देखें ।IQR

स्कॉट के नियम (सामान्य धारणा): जहां मानक विचलन है के लिए ।

डीएक्स=अधिकतमएक्स-मिनटएक्स3.5रोंएक्सn-1/3
रोंएक्सएक्स

स्टर्ज का नियम (डिब्बे की संख्या को कम कर सकता है लेकिन बड़े लिए अच्छा है ): n

डीएक्स=1+लॉग2n

एमआई को हिस्टोग्राम के साथ सही ढंग से अनुमान लगाना मुश्किल है। फिर आप एक अलग अनुमानक चुन सकते हैं:

  • Kraskov के एनएन आकलनकर्ता, जो थोड़ा कम पैरामीटर विकल्प के प्रति संवेदनशील है: या निकटतम पड़ोसियों अक्सर डिफ़ॉल्ट के रूप में प्रयोग किया जाता है। पेपर: (क्रैस्कोव, 2003)=4=6
  • कर्नेल (चंद्रमा, 1995) के साथ एमआई का अनुमान ।

MI का अनुमान लगाने के लिए बहुत सारे पैकेज हैं:

  • पायथन के लिए गैर-पैरामीट्रिक एंट्रॉपी अनुमान टूलबॉक्स। साइट
  • जावा में सूचना-डायनामिक्स टूलकिट लेकिन पायथन के लिए भी उपलब्ध है। साइट
  • Matlab में ITE टूलबॉक्स। साइट

1

मैं minepyअजगर में पारस्परिक जानकारी प्राप्त करना और अनुमान लगाना पसंद करता हूं ।

आप यहां पैकेज का कार्यान्वयन विवरण और यहां एक उदाहरण कोड देख सकते हैं । आसान संदर्भ के लिए, मैं उदाहरण को कॉपी करता हूं और यह यहां आउटपुट है:

import numpy as np
from minepy import MINE

def print_stats(mine):
    print "MIC", mine.mic()
    print "MAS", mine.mas()
    print "MEV", mine.mev()
    print "MCN (eps=0)", mine.mcn(0)
    print "MCN (eps=1-MIC)", mine.mcn_general()

x = np.linspace(0, 1, 1000)
y = np.sin(10 * np.pi * x) + x
mine = MINE(alpha=0.6, c=15)
mine.compute_score(x, y)

print "Without noise:"
print_stats(mine)
print

np.random.seed(0)
y +=np.random.uniform(-1, 1, x.shape[0]) # add some noise
mine.compute_score(x, y)

print "With noise:"
print_stats(mine)

जो इसे आउटपुट के रूप में देता है:

Without noise:
MIC 1.0
MAS 0.726071574374
MEV 1.0
MCN (eps=0) 4.58496250072
MCN (eps=1-MIC) 4.58496250072

With noise:
MIC 0.505716693417
MAS 0.365399904262
MEV 0.505716693417
MCN (eps=0) 5.95419631039
MCN (eps=1-MIC) 3.80735492206

मेरा अनुभव है कि परिणाम के प्रति संवेदनशील हैं alpha, और डिफ़ॉल्ट मूल्य .6एक उचित है। हालांकि, मेरे वास्तविक आंकड़ों alpha=.3पर बहुत तेजी से और अनुमानित आपसी प्रतिक्रिया के मामले के साथ वास्तव में उच्च संबंध है alpha=.6। इसलिए यदि आप एमआई का उपयोग कर रहे हैं तो उच्च एमआई वाले लोगों का चयन करें, आप बस एक छोटे alphaका उपयोग कर सकते हैं और एक अच्छे सटीकता के साथ प्रतिस्थापन के रूप में उच्चतम मूल्यों का उपयोग कर सकते हैं ।


धन्यवाद! क्या आपने एमआई अनुमान के लिए स्केलेर के साथ खदान की तुलना की है?
पीर

नहीं, मैंने नहीं किया है। मुझे यकीन नहीं है, हालांकि नहीं!
एड्रिन

मैंने सिर्फ स्केलेर और माइनी की तुलना की है (दोनों अल्फा = 0.3 और अल्फा = 0.6)। परिणाम बहुत अलग हैं! चूंकि यह इतना आसान है कि शायद आपको दोनों पुस्तकालयों का उपयोग करके अपने परिणामों की जांच करनी चाहिए :)
pir

2
MIC आपसी जानकारी (MI) के बराबर नहीं है। वे दो पूरी तरह से अलग चीजें हैं।
सिमोन

1
हाँ यकीनन। मूल एमआईसी पेपर में एमआई और एमआईसी के बीच बहुत सारी तुलनाएं होती हैं: uvm.edu/~cdanfort/csc-reading-group/… MIC दिखाते हैं कि इसे कार्यात्मक संबंध के लिए शोर की मात्रा के प्रॉक्सी के रूप में इस्तेमाल किया जा सकता है। संपत्ति जिसे मूल पेपर में 'इक्विटिबिलिटी' कहा जाता है। फिर भी, एमआई अभी भी कई कार्यों के लिए निर्भरता का एक बहुत अच्छा उपाय है: उदाहरण के लिए सुविधा चयन या आनुवंशिक नेटवर्क अनुमान। यह एमआईसी की तुलना में अनुमान लगाने में भी तेज है।
सिमोन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.