Dempster'ın Kombinasyon Kuralını Gerçekleştirin


9

DST'de Çarpışma Kursu

Dempster-Shafer teorisi (DST) , bir inanç oluşturmak için çeşitli kanıt kaynaklarını birleştirmek için bir yöntem sağlar. Olası bir ifade listesi verildiğinde (biri doğru cevaptır), her olası ifade kombinasyonuna destekleyici kanıt derecesini gösteren bir "kitle" atanır. Tüm kombinasyonların toplam kütlesi her zaman 1'e eşittir.

Bu kitle ödevlerinden, bu kombinasyonun gerçeği üzerinde makul bir alt sınır (inanç) ve üst sınır (inandırıcılık) yaratabiliriz. bel(X)Herhangi bir X grubunun inancı , X'in tüm alt kümelerinin (kendisi dahil) kütlelerinin toplamıdır. pl(X)Herhangi bir X grubunun uygunluğu "1 - X ile ayrık olan tüm setlerin kütlelerinin toplamı" dır. Aşağıdaki şema, inanç ve inandırıcılığın belirsizlikle nasıl ilişkili olduğunu göstermektedir.

resim açıklamasını buraya girin

Örneğin, Green, Yellow veya ed'den biri olabilen bir trafik ışığı olduğunu varsayalım R. Seçenekler listesi ve olası bir toplu atama aşağıda gösterilmiştir:

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

Bu kitleler bir dizi ile not edilebilir [0, 0.2, 0.1, 0.05, 0.2, 0.3, 0, 0.15].

Şimdi soru şu, kitlelerin ne olduğuna nasıl karar verebiliriz? Diyelim ki ışığa bakan bir sensörümüz var ve bu sensör ışığın yeşil olmadığını gösteriyor ; ancak, sensörün rastgele, sahte bir sinyal gönderme şansının% 20 olduğunu biliyoruz. Bu kanıt, [0, 0, 0, 0.8, 0, 0, 0, 0.2]{Y, R} 'nin kütlesi 0.8 ve {G, Y, R}' nin kütlesi 0.2 olan kütle dağılımı ile açıklanabilir .

Benzer şekilde, bazı ikinci sensörlerin ışığın kırmızı olmadığını gösterdiğini , ancak sensörün yanlış% 30 olduğunu ve ışığın aslında kırmızı olduğunu da biliyoruz. Bu kanıt, [0, 0.3, 0, 0, 0, 0, 0.7, 0]{G, Y} 'in kütlesi 0.7 ve {R}' nin kütlesi 0.3 olduğunda açıklanabilir .

Bu iki kanıtı tek bir kütle dağılımı oluşturacak şekilde özümsemek için Dempster'ın Kombinasyon Kuralını kullanabiliriz.

Dempster'ın Kombinasyon Kuralı

İki seri atama m1ve m2oluşturmak üzere birleştirilebilir m1,2burada, aşağıdaki formül kullanılarak A, Bve C(yukarıdaki tabloya sıralarını) olası kombinasyonlarını temsil eder.

resim açıklamasını buraya girin

resim açıklamasını buraya girin

burada K, renormalizasyon için kullanılan bir "çatışma" ölçüsüdür ve şu şekilde hesaplanır:

resim açıklamasını buraya girin

Bu işlemi, aşağıdaki görüntüde olduğu gibi geometrik olarak tanımlamak da mümkündür. Eğer A = 011(Sarı veya Kırmızı) ve B = 101(yeşil veya kırmızı), sonra değeri m1(A) * m2(B) katkıda değerini (ilave edilir) m1,2(001)(Kırmızı). Bu işlem, olası tüm A ve B kombinasyonları için tekrarlanır A&B != 0. Son olarak, dizi değerleri 1'e kadar eklenecek şekilde dizi yeniden düzenlenir.

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- tasvir-odak elements_big.pbm

Dempster kuralına göre iki diziyi birleştiren basit bir Java yöntemi:

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;
}

Bağımsız kitleleri vermek, hangi uygulamada bu eserler, yukarıdaki trafik ışığı sensörleri düşünün nasıl çalıştığını görmek için [0, 0, 0, 0.8, 0, 0, 0, 0.2]ve [0, 0.3, 0, 0, 0, 0, 0.7, 0]. Dempster'in kuralını uyguladıktan sonra ortaya çıkan eklem kütlesi olur [0, 0.3, 0.56, 0, 0, 0, 0.14, 0]. Kütlenin çoğunluğu "Sarı" ya atanır, bu da iki sensörün sırasıyla "yeşil değil" ve "kırmızı değil" döndüğü göz önüne alındığında sezgisel bir anlam ifade eder. Diğer iki kütle ("Kırmızı" için 0.3 ve "Yeşil veya Sarı" için 0.14) ölçümlerin belirsizliğinden kaynaklanmaktadır.

Meydan okuma

İki gerçek sayı listesi alan ve Dempster kuralını iki giriş listesine uygulama sonucunu veren bir program yazın. İki giriş listesinin uzunluğu eşit olacak ve bu uzunluk 2 güç olacak ve en az 4 olacaktır. Her liste için ilk değer her zaman 0 olacaktır ve kalan değerlerin tümü negatif olmayacak ve eklenecektir. 1'e kadar.

Çıktı, girdi listeleriyle aynı uzunlukta bir liste olmalıdır. Bir çözümün var olduğunu varsayabilirsiniz (kanıt ve dolayısıyla K = 1 arasında tam bir çatışma olduğunda bir çözümün mevcut olmaması mümkündür). Hassasiyet için minimum bir gereklilik koymak için, programınızın dört ondalık basamağa yuvarlandığında doğru sonuçlar üretebilmesi gerekir.

Örnek G / Ç

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
Kum havuzuna göndermek istediğim bazı şeyler var, ancak şansım olmadı: Sanırım çoğu soru cebir konusunda becerikli olanların onları anlayabilmesi için yazılmalı .. İşte açıklığa kavuşturulması gerektiğini düşündüğüm birkaç şey: Ne? m (x) nedir? ayrık set nedir? % 20'den bir kitleye nasıl ulaşırsınız? neden kitleleri başka bir kitle kümesine dönüştürmeniz gerekiyor? teta ilk denkleminizde neyi temsil eder? AB ve C neyi temsil eder? Zorluk sadece DRC'ye dayanıyorsa neden DST'yi dahil etmelisiniz? insanları karıştırmaya gerek yok.

@trichoplax Minimum hassasiyet gereksinimi ekledim (4 ondalık basamağa yuvarlandığında doğru).
PhiNotPi

Yanıtlar:


2

Perl, 68 bayt

İçin +2 içerir -an

İlk kümeyi satır ve ikincisini STDIN'de sütun olarak verin

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

Oldukça standart bir golf çözümü. @HTarafından değiştirirsem çalışmıyor@;


Güzel bir. "İle çalışmıyor @;" hakkında: bkz. Stackoverflow.com/questions/39521060/…
Dada

@Dada Bu yığın taşması yanıtı çok faydalı oldu. Bu değişkenlerin enterpolasyon yapmadığını, ancak sebebini asla anlamadığını biliyordum. Ve Praming Puzles & Colf'da
Ton Hospel

Düzenlemeden önce, "bir şekilde" yazdınız, bu yüzden nedenini bilmiyorsanız, uygulamada bir tür belgelenmemiş bir seçim ... "@ ile çalışmıyor;" "@H" yüzünden değil mi? (Değilse benim kötü, yorumum aldırma)
Dada

Evet, @Hsonrası yaptıktan sonra biraz daha deney yaptım ve sorunun dize enterpolasyonu olduğunu gördüm, bu yüzden "bir şekilde" kaldırdım çünkü en azından doğrudan sebep açıktı. Ama beni bu makaleye yönlendirene kadar neden böyle bir enterpolasyonun işe yaramadığını hala bilmiyordum . Artık geliştiricilerin bilinçli bir seçim olduğunu anlıyorum, böylece kullanıcılar çoğu noktalama değişkenlerinin çok farkında olmadığından kullanıcılar beklenmedik dizi enterpolasyonuyla daha az şaşırırlar.
Ton Hospel

Oh üzgünüm, önceki yorumunuzu yanlış okudum: "Çok yararlı" yerine "çok yararlı değildi" okudum. O zaman katılıyoruz!
Dada
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.