Utilizo el paquete bnlearn en R para aprender la estructura de mi red bayesiana y sus parámetros. Lo que quiero hacer es "predecir" el valor de un nodo dado el valor de otros nodos como evidencia (obviamente, con la excepción del nodo cuyos valores estamos prediciendo).
Tengo variables continuas
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
Ahora, este código funciona bien y proporciona una tabla en la que puede ver que los valores pronosticados para el nodo C son exactamente iguales al valor original del nodo C en el conjunto de prueba.
No entiendo la razón de eso, ¿alguien podría explicarlo?
Lo sé, estoy proporcionando df completo del conjunto de pruebas que ya tiene el valor del nodo C en él. Pero si doy los datos de otras columnas, da un error. Entonces, probé una alternativa de poner otros valores a 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
¿Es este enfoque incorrecto? (El uso de "NA" no está permitido).
fuente
bnlearn:::predict.bn.fit
parece haber cambiado. He actualizado mi código para dar cuenta de ese cambio.Para ambos conjuntos predichos que propuso (tanto con los valores originales como con ceros) encontré el mismo resultado en R.
Esto muestra que los valores de C son irrelevantes. Además,
test.set$c
te proporciona:que es inherentemente diferente del resultado previsto. Esto me lleva a creer que su código es correcto.
fuente
Se produce el equivalente para el caso discreto (incapacidad para establecer la variable objetivo en cero). En este caso, haga lo siguiente:
fuente