ดำเนินการกฎการรวมกันของ Dempster


9

Crash Course บน DST

ทฤษฎี Dempster – Shafer (DST)จัดเตรียมวิธีการรวมแหล่งที่มาต่าง ๆ ของหลักฐานเพื่อสร้างความเชื่อ ได้รับรายชื่อของคำสั่งที่เป็นไปได้ (ซึ่งเป็นคำตอบที่จริง) แต่ละที่เป็นไปได้รวมกันของงบที่ได้รับมอบหมาย "มวล" แสดงให้เห็นระดับของหลักฐานสนับสนุน มวลรวมของชุดค่าผสมทั้งหมดเท่ากับ 1 เสมอ

จากการมอบหมายจำนวนมากเราสามารถสร้างขอบเขต (ความเชื่อ) และขอบเขตบน (ความน่าเชื่อถือ) ที่สมเหตุสมผลบนความจริงของชุดค่าผสมนั้น ความเชื่อbel(X)ของเซต X ใด ๆ คือผลรวมของมวลของเซตย่อยทั้งหมดของ X (รวมถึงตัวมันเอง) ความน่าเชื่อถือpl(X)ของชุด X ใด ๆ คือ "1 - ผลรวมของมวลของชุดทั้งหมดที่แยกจากกันเป็น X" แผนภาพด้านล่างแสดงให้เห็นว่าความเชื่อและความน่าเชื่อถือเกี่ยวข้องกับความไม่แน่นอนได้อย่างไร

ป้อนคำอธิบายรูปภาพที่นี่

ตัวอย่างเช่นสมมติว่ามีสัญญาณไฟจราจรที่อาจเป็นหนึ่งในGreen, Yellow หรือRed รายการตัวเลือกและการมอบหมายจำนวนมากที่เป็นไปได้แสดงอยู่ด้านล่าง:

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

มวลชนเหล่านี้สามารถ notated [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

ในการหลอมรวมหลักฐานทั้งสองชิ้นนี้เพื่อสร้างการกระจายตัวจำนวนมากเราสามารถใช้ Rule of Combination ของ Dempster

Dempster's Rule of Combination

ที่ได้รับมอบหมายมวลสองm1และm2สามารถรวมถึงรูปแบบm1,2การใช้สูตรต่อไปนี้ที่A, BและCแทนผสมเป็นไปได้ (แถวของตารางข้างต้น)

ป้อนคำอธิบายรูปภาพที่นี่

ป้อนคำอธิบายรูปภาพที่นี่

โดยที่ K เป็นตัวชี้วัดของ "ความขัดแย้ง" ที่ใช้สำหรับการปรับสภาพให้เป็นปกติและคำนวณโดย:

ป้อนคำอธิบายรูปภาพที่นี่

นอกจากนี้ยังเป็นไปได้ที่จะอธิบายกระบวนการนี้ทางเรขาคณิตเช่นเดียวกับในภาพด้านล่าง ถ้าA = 011(สีเหลืองหรือสีแดง) และB = 101(สีเขียวหรือสีแดง) ดังนั้นค่าของการm1(A) * m2(B) มีส่วนร่วม (ถูกเพิ่มเข้าไป) ค่าของm1,2(001)(สีแดง) กระบวนการนี้ทำซ้ำสำหรับการผสม A และ B 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

นี่เป็นวิธีการง่ายๆของ Java ที่รวมสองอาร์เรย์ตามกฎของ Dempster:

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 สำหรับ "สีเขียวหรือสีเหลือง") เกิดจากความไม่แน่นอนของการวัด

ความท้าทาย

เขียนโปรแกรมที่รับจำนวนจริงสองรายการและแสดงผลลัพธ์ของการใช้กฎของ Dempster กับรายการอินพุตสองรายการ ความยาวของรายการอินพุตทั้งสองจะเท่ากันและความยาวนั้นจะเท่ากับ 2 และอย่างน้อย 4 สำหรับแต่ละรายการค่าแรกจะเป็น 0 เสมอและค่าที่เหลือจะไม่เป็นลบและเพิ่ม มากถึง 1

เอาต์พุตควรเป็นรายการที่มีความยาวเท่ากันกับรายการอินพุต คุณสามารถสันนิษฐานได้ว่ามีวิธีแก้ปัญหาอยู่ (เป็นไปได้ที่วิธีแก้ปัญหาจะไม่มีอยู่เมื่อมีความขัดแย้งทั้งหมดระหว่างหลักฐานและดังนั้น K = 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
บางสิ่งที่ฉันต้องการโพสต์ใน sandbox แต่ไม่ได้รับโอกาส: ฉันคิดว่าคำถามส่วนใหญ่ควรเขียนเพื่อให้ทุกคนที่เชี่ยวชาญในพีชคณิตสามารถเข้าใจพวกเขา .. นี่คือบางสิ่งที่ฉันคิดว่าควรชี้แจง: อะไร m (x) คืออะไร? ชุดที่ไม่เป็นกันคืออะไร? คุณจะได้รับจาก 20% เป็นมวลชนได้อย่างไร ทำไมคุณต้องแปลงมวลเป็นมวลชุดอื่น? ทีต้าแสดงอะไรในสมการแรกของคุณ AB และ C เป็นตัวแทนอะไร เหตุใดจึงต้องรวม DST หากความท้าทายนั้นมาจาก DRC เพียงอย่างเดียว ไม่จำเป็นต้องสับสนคน

@trichoplax ฉันได้เพิ่มความต้องการความแม่นยำขั้นต่ำ (แม่นยำเมื่อปัดเศษเป็นทศนิยม 4 ตำแหน่ง)
PhiNotPi

คำตอบ:


2

Perl, 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/...
Dada

@Dada คำตอบล้นสแต็คนั้นมีประโยชน์มาก ฉันรู้รางตัวแปรเหล่านี้ไม่ได้สอดแทรก แต่ไม่เข้าใจเหตุผล และมันช่วยฉันหนึ่งไบต์ในPraming Puzles & Colf: Condense a String
Ton Hospel

ก่อนการแก้ไขของคุณคุณเขียนว่า "อย่างใด" ดังนั้นในกรณีที่คุณไม่รู้ว่าทำไมมันเป็นตัวเลือกที่ไม่มีเอกสารในการติดตั้ง ... "ไม่ทำงานกับ @;" เป็นเพราะ "@H" ใช่ไหม (ถ้าไม่ได้แล้วไม่ดีของฉันไม่เคยคิดความคิดเห็นของฉัน)
Dada

ใช่เพราะ@Hหลังจากฉันโพสต์ฉันทำการทดลองอีกเล็กน้อยและเห็นปัญหาคือการแก้ไขสตริงดังนั้นฉันจึงลบ "อย่างใด" เพราะอย่างน้อยเหตุผลโดยตรงก็ชัดเจน แต่จนกว่าคุณจะแนะนำฉันมายังบทความนั้นฉันก็ยังไม่รู้ว่าทำไมการแก้ไขแบบนั้นไม่ทำงาน ตอนนี้ฉันรู้ว่ามันเป็นตัวเลือกที่ใส่ใจโดยนักพัฒนาดังนั้นผู้ใช้จะได้ประหลาดใจน้อยลงโดยการแก้ไขอาเรย์ที่ไม่คาดคิดเนื่องจากผู้ใช้ส่วนใหญ่ไม่ได้ตระหนักถึงตัวแปรเครื่องหมายวรรคตอน
Ton Hospel

ขออภัยที่ฉันอ่านความคิดเห็นก่อนหน้าของคุณผิด: ฉันอ่านว่า "ไม่มีประโยชน์มาก" แทนที่จะเป็น "มีประโยชน์มาก" ถ้าอย่างนั้นเราก็เห็นด้วย!
Dada
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.