कॉम्बिनेशन के डेम्पिस्टर नियम को निष्पादित करें


9

डीएसटी पर क्रैश कोर्स

डेम्पस्टर-शेफर सिद्धांत (डीएसटी) विश्वास बनाने के लिए साक्ष्य के विभिन्न स्रोतों को संयोजित करने की एक विधि प्रदान करता है। संभावित बयान की सूची (जिनमें से एक सही उत्तर है) को देखते हुए, बयानों के प्रत्येक संभावित संयोजन को एक "द्रव्यमान" सौंपा गया है जो सहायक साक्ष्य की डिग्री का संकेत देता है। सभी संयोजनों का कुल द्रव्यमान हमेशा 1 के बराबर होता है।

इन सामूहिक असाइनमेंट से, हम उस संयोजन की सच्चाई पर एक उचित लोअर बाउंड (विश्वास) और अपर बाउंड (पठनीयता) बना सकते हैं। bel(X)किसी भी सेट X का विश्वास एक्स के सभी सबसेट (खुद सहित) के द्रव्यमान का योग है। pl(X)किसी भी सेट X की पठनीयता "1 - सभी सेटों के द्रव्यमान का योग X है।" नीचे दिए गए आरेख से पता चलता है कि विश्वास और प्रशंसनीयता अनिश्चितता से कैसे संबंधित हैं।

यहां छवि विवरण दर्ज करें

उदाहरण के लिए, Gमान लें कि एक ट्रैफ़िक लाइट है, जो रेयन, एलो Y, या Rएड में से एक हो सकती है । विकल्पों और संभावित सामूहिक असाइनमेंट की सूची नीचे दी गई है:

binary    interpretation    m(X)    bel(X)  pl(x)
000       null              0       0       0
001       R                 0.2     0.2     0.7
010       Y                 0.1     0.1     0.3 
011       Y||R              0.05    0.35    0.8
100       G                 0.2     0.2     0.65
101       G||R              0.3     0.7     0.9
110       G||Y              0       0.3     0.8
111       G||Y||R           0.15    1       1

इन द्रव्यमानों को एक सारणी द्वारा देखा जा सकता है [0, 0.2, 0.1, 0.05, 0.2, 0.3, 0, 0.15]

अब सवाल यह है कि हम यह कैसे तय करें कि जनता क्या है? मान लीजिए कि हमारे पास प्रकाश को देखने वाला एक सेंसर था, और यह सेंसर इंगित करता है कि प्रकाश हरा नहीं है ; हालाँकि, हम जानते हैं कि 20% संभावना है कि सेंसर ने एक यादृच्छिक, सुस्पष्ट संकेत भेजा। सबूत के इस टुकड़े को बड़े पैमाने पर वितरण द्वारा वर्णित किया जा सकता है [0, 0, 0, 0.8, 0, 0, 0, 0.2]जहां {Y, R} का द्रव्यमान 0.8 और {G, Y, R} का द्रव्यमान 0.2 है।

इसी तरह, मान लीजिए कि कुछ दूसरे सेंसर इंगित करते हैं कि प्रकाश लाल नहीं है , लेकिन हम यह भी जानते हैं कि 30% संभावना है कि सेंसर गलत है और प्रकाश वास्तव में लाल है। सबूत के इस टुकड़े का वर्णन किया जा सकता है [0, 0.3, 0, 0, 0, 0, 0.7, 0]जहां {G, Y} का द्रव्यमान 0.7 और {R} का द्रव्यमान 0.3 है।

एकल जन वितरण को बनाने के लिए सबूत के इन दो टुकड़ों को आत्मसात करने के लिए, हम Dempster के नियम संयोजन का उपयोग कर सकते हैं।

कॉम्बिनेशन का डेम्पिस्टर नियम

दो जन असाइनमेंट m1और निम्नलिखित सूत्रों का उपयोग करके m2फार्म में जोड़ा जा सकता है m1,2, जहां A, Bऔर Cसंभव संयोजनों का प्रतिनिधित्व करते हैं (ऊपर तालिका की पंक्तियों)।

यहां छवि विवरण दर्ज करें

यहां छवि विवरण दर्ज करें

जहां K "पुनर्संरचना के लिए" संघर्ष, "का एक उपाय है, और इसके द्वारा गणना की जाती है:

यहां छवि विवरण दर्ज करें

इस प्रक्रिया को ज्यामितीय रूप से वर्णन करना भी संभव है, जैसा कि नीचे की छवि में है। यदि A = 011(पीला या लाल) और B = 101(हरा या लाल), तो (लाल) के मूल्य में m1(A) * m2(B) योगदान का मूल्य (जोड़ा जाता है m1,2(001)) है। इस प्रक्रिया को ए और बी के सभी संभावित संयोजनों के लिए दोहराया जाता है जहां A&B != 0। अंत में, सरणी का नाम बदल दिया जाता है ताकि मान कुल 1 तक जुड़ जाएं।

https://www.researchgate.net/profile/Fabio_Cuzzolin/publication/8337705/figure/fig1/AS:349313566822412@1460294252311/Fig-1-Dempster's-rule-of-combination-On-the-yx-axes-are- दर्शाया-फोकल-elements_big.pbm

यहाँ एक सरल जावा विधि है जो डेम्पस्टर के नियम के बाद दो सरणियों को जोड़ती है:

public static double[] combine(double[] a, double[] b) {
  double[] res = new double[a.length];
  for (int i = 0; i < a.length; i++) {
    for (int j = 0; j < b.length; j++) {
      res[i & j] += a[i] * b[j];
    }
  }
  for (int i = 1; i < res.length; i++) {
    res[i] /= 1 - res[0];
  }
  res[0] = 0;
  return res;
}

यह देखने के लिए कि यह व्यवहार में कैसे काम करता है, ऊपर ट्रैफिक लाइट सेंसर पर विचार करें, जो स्वतंत्र रूप से जनता को देते हैं [0, 0, 0, 0.8, 0, 0, 0, 0.2]और [0, 0.3, 0, 0, 0, 0, 0.7, 0]। डेम्पस्टर के शासन को करने के बाद, परिणामी संयुक्त द्रव्यमान है [0, 0.3, 0.56, 0, 0, 0, 0.14, 0]। द्रव्यमान का अधिकांश भाग "येलो" को सौंपा गया है, जो सहज ज्ञान युक्त समझ देता है कि दो सेंसर क्रमशः "हरे नहीं" और "लाल नहीं" हैं। माप की अनिश्चितता के कारण अन्य दो द्रव्यमान ("रेड" के लिए 0.3 और "ग्रीन या येलो" के लिए 0.14) हैं।

चुनौती

एक प्रोग्राम लिखें जो वास्तविक संख्याओं की दो सूचियों को लेता है और दो इनपुट सूचियों के लिए डेम्पस्टर के नियम को लागू करने का परिणाम देता है। दो इनपुट सूचियों की लंबाई समान होगी, और वह लंबाई 2 की शक्ति होगी, और कम से कम 4 होगी। प्रत्येक सूची के लिए, पहला मान हमेशा 0 होगा और शेष मान सभी गैर-ऋणात्मक और जोड़ देगा 1 तक।

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

उदाहरण I / O

in:
[0, 0, 0, 0.8, 0, 0, 0, 0.2]
[0, 0.3, 0, 0, 0, 0, 0.7, 0]
out:
[0.0, 0.3, 0.56, 0.0, 0.0, 0.0, 0.14, 0.0]

in:
[0.0, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.4]
[0.0, 0.2, 0.0, 0.2, 0.0, 0.2, 0.0, 0.4]
out:
[0.0, 0.2889, 0.0889, 0.1556, 0.0889, 0.1556, 0.0444, 0.1778]

in:
[0.0, 0.0, 0.5, 0.5]
[0.0, 0.7, 0.1, 0.2]
out:
[0.0, 0.53846, 0.30769, 0.15385]

in:
[0.0, 0.055, 0.042, 0.098, 0.0, 0.152, 0.0, 0.038, 0.031, 0.13, 0.027, 0.172, 0.016, 0.114, 0.058, 0.067]
[0.0, 0.125, 0.013, 0.001, 0.012, 0.004, 0.161, 0.037, 0.009, 0.15, 0.016, 0.047, 0.096, 0.016, 0.227, 0.086]
out: (doesn't have to be this precise)
[0.0, 0.20448589713416732, 0.11767361551134202, 0.028496524069011694, 0.11809792349331062, 0.0310457664246791, 0.041882026540181416, 0.008093533320057205, 0.12095719354780314, 0.11306959103499466, 0.06412594818690368, 0.02944697394862137, 0.06398564368086611, 0.014369896989336852, 0.03774983253978312, 0.006519633578941643]

in:
[0.0, 0.0, 0.1, 0.1, 0.0, 0.0, 0.0, 0.1, 0.1, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.0, 0.0, 0.1, 0.0, 0.1, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.0, 0.0, 0.0, 0.0]
[0.0, 0.0, 0.1, 0.0, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.0, 0.0, 0.1, 0.0, 0.0, 0.0, 0.1, 0.1, 0.0, 0.0, 0.0, 0.1, 0.0, 0.0, 0.1, 0.0, 0.0, 0.1, 0.0, 0.1, 0.0]
out:
[0.0, 0.09090909090909094, 0.23376623376623382, 0.0, 0.07792207792207795, 0.025974025974026, 0.03896103896103895, 0.0, 0.10389610389610393, 0.05194805194805199, 0.02597402597402597, 0.0, 0.012987012987012984, 0.012987012987012993, 0.012987012987012984, 0.0, 0.09090909090909094, 0.038961038961038995, 0.06493506493506492, 0.0, 0.07792207792207796, 0.0, 0.0, 0.0, 0.012987012987012984, 0.012987012987013, 0.012987012987012984, 0.0, 0.0, 0.0, 0.0, 0.0]

2
कुछ चीजें जो मैं सैंडबॉक्स में पोस्ट करना चाहता था, लेकिन मौका नहीं मिला: मुझे लगता है कि अधिकांश प्रश्न लिखे जाने चाहिए ताकि बीजगणित में कोई भी कुशल उन्हें समझ सके .. यहाँ कुछ चीजें हैं जो मुझे लगता है कि स्पष्ट की जानी चाहिए: क्या मीटर (x) है? एक असहमति सेट क्या है? आप आम जनता के लिए 20% से कैसे प्राप्त करेंगे? आपको जनता को दूसरे समूह में बदलने की आवश्यकता क्यों है? थीटा आपके पहले समीकरण में क्या दर्शाता है? AB और C क्या दर्शाते हैं? डीएसटी में चुनौती क्यों शामिल है अगर चुनौती पूरी तरह से डीआरसी पर आधारित है? लोगों को भ्रमित करने की आवश्यकता नहीं है।

@trichoplax I ने एक न्यूनतम परिशुद्धता की आवश्यकता को जोड़ा (सटीक जब 4 दशमलव स्थानों पर गोल किया गया)।
PhiNotPi 16

जवाबों:


2

पर्ल, 68 बाइट्स

के लिए +2 शामिल है -an

पहला सेट पंक्ति के रूप में और दूसरा STDIN पर एक कॉलम के रूप में दें

perl -M5.010 dempster.pl
0.0  0.0  0.5  0.5
0.0
0.7
0.1
0.2
^D
^D

dempster.pl:

#!/usr/bin/perl -an
/$/,map$H[$m%@F&$m++/@F]+=$_*$`,@F for<>;say$%++&&$_/(1-"@H")for@H

एक सुंदर मानक गोल्फ समाधान। मेरे @Hद्वारा प्रतिस्थापित किए जाने पर काम नहीं करता है@;


अच्छा है। "के साथ काम नहीं करता है" के बारे में @;: stackoverflow.com/questions/39521060/…
दादा

@ दादा वह ढेर अतिप्रवाह उत्तर बहुत उपयोगी था। मैं जानता था कि इन चरों के बीच कोई अंतर नहीं है, लेकिन इसका कारण कभी समझ में नहीं आया। और यह मुझे Pamingles & Colf
Ton Hospel

अपने संपादन से पहले, आपने "किसी भी तरह" लिखा था, इसलिए यदि आप नहीं जानते कि क्यों, तो यह कार्यान्वयन में एक अवांछित विकल्प की तरह है ... "@ के साथ काम नहीं करता है?" "@H" के कारण सही है? (यदि नहीं तो मेरा बुरा, मेरी टिप्पणी पर कभी बुरा मत मानना)
दादा

हां, @Hमैंने पोस्ट करने के बाद मैंने थोड़ा और प्रयोग किया और देखा कि समस्या स्ट्रिंग इंटरपोलेशन थी इसलिए मैंने "किसी तरह" को हटा दिया क्योंकि कम से कम प्रत्यक्ष कारण स्पष्ट था। लेकिन जब तक आपने मुझे उस लेख के लिए संदर्भित नहीं किया, तब भी मुझे नहीं पता था कि उस तरह का प्रक्षेप काम क्यों नहीं करता है। अब मुझे एहसास हुआ कि यह डेवलपर्स द्वारा एक सचेत विकल्प है, इसलिए उपयोगकर्ता अप्रत्याशित सरणी प्रक्षेप से कम बार आश्चर्यचकित हो जाएंगे क्योंकि अधिकांश उपयोगकर्ता विराम चिह्न चर के बारे में बहुत जागरूक नहीं हैं।
टन हास्पेल

क्षमा करें, मैंने आपकी पिछली टिप्पणी को गलत बताया: मैंने पढ़ा "बहुत उपयोगी नहीं था" के बजाय "बहुत उपयोगी था"। खैर हम तब सहमत हैं!
दादा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.