Hier werden Algorithmen für
Hybride Netze vorgestellt. Hybride Netze haben nicht nur
Knoten mit einem diskreten Zustandsraum (z.B. "ja", "nein"
oder "stark", "mittel", "schwach") sondern können auch
kontinuierliche Knoten haben deren Wert durch eine reelle Zahl
(z.B. 2.4[m]) dargestellt wird. Der Fall, dass
ausschließlich kontinuierliche Knoten in einem Netz
vorkommen, wird hier als Sonderfall der Hybriden Netze
verstanden und nicht gesondert behandelt.
Dies ist die Fortsetzung zu den
hier dargestelleten
Beispielen (bitte ggf. zunächst dort nachlesen, wie die
Netze zu bedienen sind). Für die kontinuierlichen Knoten
gilt abweichend, dass Evidenz durch einen einfachen Klick in
den Bereich zwischen Min- und Max-Wert gesetzt wird und
mittels eines Klicks in den Bereich außerhalb (also
knapp oberhalb des Min- bzw. knapp unterhalb des Max-Wertes)
wieder zurückgesetzt wird. Da ich keine komplett neue
Bedienlogik für die kontinuierlichen Knoten erfinden
wollte, können kontinuierliche Elternknoten nur in der
Reihenfolge wieder entfernt werden, wie sie einem Kind-Knoten
hinzugefügt wurden (das entspricht dem Verhalten beim
Hinzufügen/Löschen von Zuständen bei diskreten
Knoten). Wichtig ist noch, dass diskrete Knoten nur diskrete
Elternknoten haben dürfen.
Das Schöne an den Sampling-Verfahren ist, dass sie
auch mit kontinuierlichen Knoten funktionieren - und das
auch mit beliebigen Verteilungen, solange es nur
möglich ist aus diesen Verteilungen Samples zu ziehen
(deshalb fange ich hier auch ausnahmsweise mal mit dem
Sampling an). Wesentliche Abweichungen zum normalen Sampling
sind nur diese:
- Zur Gewichtung (nur LW-Sampling) wird bei beobachteten
kontinuierlichen Knoten statt der Wahrscheinlichkeit,
der Funktionswert der Dichtefunktion an der betreffenden
Stelle benutzt (die Wahrscheinlichkeit für einen
konkreten Wert (z.B. x=7.34) liegt ja bekanntlich bei 0,
weil das Integral von x bis x immer gleich 0 ist). Damit
verliert aber auch der angezeigte Wert für P(e|M)
seine Bedeutung als echte Wahrscheinlichkeit (bzw.
Likelihood).
- Möglich wäre theoretisch auch Soft-Evidenz,
z.B. in der Form, dass man angibt "möglich sind Werte
im Intervall [von...bis]". Dies würde einer
Multiplikation mehrerer Dichtefunktionen entsprechen (der
aus dem Netz und der, die die unsichere Beobachtung
repräsentiert). Dieses Feature ist hier aber nicht
implementiert, so dass nur konkrete Werte als
Beobachtungswert (z.B. x=2.7) möglich sind.
- Hier werden jeweils die kompletten Dichtefunktionen
für eine gegebene Elternkonfiguration im Knoten
abgelegt und gewichtet. Ansonsten könnte man nur ein
Histogramm anzeigen, was ich aber aus
Kompatibilitätsgründen zum nachfolgend
vorgestellten Junction-Tree-Verfahren vermeiden wollte.
Andererseits könnte man diesen Ansatz auch für
die diskreten Knoten verwenden, was aber das
"händische" Nachrechnen, zumindest für die
diskreten Knoten, nahezu unmöglich machen würde,
weshalb ich diese Idee verworfen habe.
Anmerkung: Das Beispielnetz wurde aus anderen
Beispielen übernommen, wobei einfach drei diskrete durch
entsprechende kontinuierliche Knoten ersetzt wurden. Die Werte
machen so noch überhauptgarkeinen Sinn - da muss ich mir
bei Gelegenheit mal was Sinnigeres ausdenken...
BEISPIEL-NETZ
JUNCTION-TREE
Es gibt auch Junction-Tree-Verfahren für rein
kontinuierliche bzw. hybride Netze (bzw.
Junction-Tree-ähnliche Verfahren). Diese sind aber
wesentlich komplizierter als das Sampling, oder die normalen
Junction-Trees (die ja schon nicht ganz ohne sind). Hier
wird das Verfahren von Cowell benutzt, welches hier näher vorgestellt
wird. Wesentliche Einschränkungen des Algorithmus'
sind:
- Geht so nur für Conditional Gaussians (CG) - damit
sind nicht-lineare Zusammenhänge nur über
Umwege abbildbar (andere Verteilungen würden nur dann
funktionieren, wenn man für diese auch eine
"Exchange-Operation" finden würde).
- Das Ergebnis ist eine sogenannte "Mixture of Gaussians",
also mehrere gewichtet überlagerte Gaussverteilungen.
Dies gilt aber nur solange diskrete Knoten mit im Spiel
sind - für rein kontinuierliche Netze kommt jeweils
für jeden Knoten genau eine Gauss-Verteilung heraus.
- Soft-Evidenz für kontinuierliche Knoten, z.B. in
der Form, dass man angibt "möglich sind Werte im
Intervall [von...bis]" ist nicht möglich.
- Max-Propagation funktioniert nicht.
- Die gemeinsamen Wahrscheinlichkeitsverteilungen für
Knoten und ihre Eltern (P(N,pa(N)) sind nur für die
diskreten Knoten verfügbar.
- Da bei der Junction-Tree-Erstellung die kontinuierlichen
Knoten vor allen diskreten Knoten eliminiert werden
müssen, ergeben sich für bestimmte (und nicht
nur ungewöhnliche) Netzstrukturen schnell
Komplexitätsprobleme.
- Auch hier wird der Funktionswert der Dichtefunktion an
der betreffenden Stelle als Gewicht benutzt. Damit
verliert der angezeigte Wert für P(e|M) hier
ebenfalls seine Bedeutung als echte Wahrscheinlichkeit
(bzw. Likelihood).
Damit man noch etwas tiefer in den Algorithmus
hineinschauen kann hier einige Spezialmethoden (beim Setzen
von Evidenz durch Anklicken eines States wird sonst ja immer
gleich eine vollständige Propagation angestoßen):
- Klicke hier
um nur die Initialisierungsphase durchzuführen,
Postbags sind danach noch nicht geleert, Evidenz noch
nicht gesetzt.
- Klicke hier
um zusätzlich noch die Collect-Postbags-Phase
durchzuführen jedoch noch ohne Evidenz zu setzen.
- Klicke hier
um zusätzlich auch die aktuelle Evidenz
einzubeziehen.
- Klicke hier
um eine vollständige Propagation mit Update der
A-Posteriori-Wahrscheinlichkeiten der Knoten
durchzuführen.
Anmerkung: In dem vorgegebenen Netz gibt es derzeit
keine Postbags, so dass nicht alle Phasen voll
"ausgeschöpft" werden (Collect-Postbags bewirkt keine
Änderung).