J'utilise le paquet bnlearn en R pour apprendre la structure de mon réseau bayésien et ses paramètres. Ce que je veux faire, c'est "prédire" la valeur d'un nœud étant donné la valeur des autres nœuds comme preuve (évidemment, à l'exception du nœud dont nous prédisons les valeurs).
J'ai des variables continues.
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
Maintenant, ce code fonctionne bien et donne un tableau dans lequel vous pouvez voir que les valeurs prédites pour le nœud C sont exactement les mêmes que la valeur d'origine du nœud C dans l'ensemble de test.
Je ne comprends pas la raison de cela, quelqu'un pourrait-il l'expliquer?
Je sais, je fournis un ensemble de test complet qui contient déjà la valeur du nœud C. Mais si je donne les données d'autres colonnes, cela donne une erreur. J'ai donc essayé une alternative consistant à mettre d'autres valeurs à 0.
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
Cette approche est-elle mauvaise? (L'utilisation de "NA" n'est pas autorisée.)