Ich verwende das bnlearn-Paket in R, um die Struktur meines Bayes'schen Netzwerks und seine Parameter zu lernen. Was ich tun möchte, ist, den Wert eines Knotens anhand des Werts anderer Knoten als Beweis "vorherzusagen" (offensichtlich mit Ausnahme des Knotens, dessen Werte wir vorhersagen).
Ich habe kontinuierliche Variablen.
library(bnlearn) # Load the package in R
data(gaussian.test)
training.set = gaussian.test[1:4000, ] # This is training set to learn the parameters
test.set = gaussian.test[4001:4010, ] # This is test set to give as evidence
res = hc(training.set) # learn BN structure on training set data
fitted = bn.fit(res, training.set) # learning of parameters
pred = predict(fitted$C, test.set) # predicts the value of node C given test set
table(pred, test.set[, "C"]) # compares the predicted value as original
Dieser Code funktioniert nun gut und enthält eine Tabelle, in der Sie sehen können, dass die vorhergesagten Werte für Knoten C genau mit dem ursprünglichen Wert von Knoten C im Testsatz übereinstimmen.
Ich verstehe den Grund dafür nicht, könnte jemand es bitte erklären?
Ich weiß, ich stelle die gesamte df des Testsatzes bereit, der bereits den Wert von Knoten C enthält. Aber wenn ich die Daten anderer Spalten gebe, gibt es einen Fehler. Also habe ich eine Alternative versucht, andere Werte auf 0 zu setzen.
test.set$C = 0 # To not give the original value of node C as evidence
pred = predict(fitted$C, test.set) # predicts the value of node C given test set
table(pred, test.set[, "C"]) # compares the predicted value as original
Ist dieser Ansatz falsch? (Die Verwendung von "NA" ist nicht zulässig.)
quelle
bnlearn:::predict.bn.fit
scheint sich geändert zu haben. Ich habe meinen Code aktualisiert, um diese Änderung zu berücksichtigen.Für beide von Ihnen vorgeschlagenen vorhergesagten Mengen (sowohl mit den Originalwerten als auch mit den Nullen) habe ich in R dieselbe Ausgabe gefunden.
Dies zeigt, dass die Werte von C irrelevant sind. Darüber hinaus
test.set$c
bietet Ihnen:Dies unterscheidet sich von Natur aus von der vorhergesagten Ausgabe. Dies lässt mich glauben, dass Ihr Code tatsächlich korrekt ist.
quelle
Das Äquivalent für den diskreten Fall tritt auf (Unfähigkeit, die Zielvariable auf Null zu setzen). In diesem Fall gehen Sie wie folgt vor:
quelle