8.4 Validación del modelo

Ahora que tenemos una estructura de red y tablas de probabilidad condicional en los nodos, el siguiente paso es validar el modelo o, más bien, evaluar el modelo ajustado a los datos. “La validación cruzada es una forma estándar de obtener estimaciones imparciales de la bondad de ajuste de un modelo. Comparando tales medidas para diferentes estrategias de aprendizaje (diferentes combinaciones de algoritmos de aprendizaje, técnicas de adaptación y los parámetros respectivos) podemos elegir la óptima para los datos que tenemos en mano de una manera basada en principios de objetividad”.

bnlearn tiene 3 métodos para validación cruzada: k-fold(default), custom, and hold out. Para el ejercicio coparemos las primeras dos: k-fold and custom.

Este es el ejemplo del método k-fold

Los datos se “particionan” (separan), en k subconjuntos del mmismo tamaño cada uno. Cada subconjunto es usado por turnos para validar el modelo que ha sido entrenado con los restante k-1 subconjuntos.

A lower expected loss value is better. Here we will cross-validate two learning algorithms - Max-Min Hill-Climb (mmhc) and Hill-Climb (hc). And the BDE scoring method will be used, which requires an iss (‘imaginery sample size’ used for bde scores) term.

bn.cv(asia, bn = "mmhc", algorithm.args = list())
## 
##   k-fold cross-validation for Bayesian networks
## 
##   target learning algorithm:             Max-Min Hill-Climbing 
##   number of folds:                       10 
##   loss function:                         Log-Likelihood Loss (disc.) 
##   expected loss:                         2.423674
bn.cv(asia, bn = "hc", algorithm.args = list(score = "bde", iss = 1))
## 
##   k-fold cross-validation for Bayesian networks
## 
##   target learning algorithm:             Hill-Climbing 
##   number of folds:                       10 
##   loss function:                         Log-Likelihood Loss (disc.) 
##   expected loss:                         2.209672

Podemos especifica el número de repeticiones, lo usual es hacer 10.

cv_mmhc = bn.cv(asia, bn = "hc", runs = 10, 
                algorithm.args = list(score = "bde", iss = 1))
cv_hc = bn.cv(asia, bn = "mmhc", runs = 10, algorithm.args = list())

cv_mmhc
## 
##   k-fold cross-validation for Bayesian networks
## 
##   target learning algorithm:             Hill-Climbing 
##   number of folds:                       10 
##   loss function:                         Log-Likelihood Loss (disc.) 
##   number of runs:                        10 
##   average loss over the runs:            2.210296 
##   standard deviation of the loss:        0.0004522641
cv_hc
## 
##   k-fold cross-validation for Bayesian networks
## 
##   target learning algorithm:             Max-Min Hill-Climbing 
##   number of folds:                       10 
##   loss function:                         Log-Likelihood Loss (disc.) 
##   number of runs:                        10 
##   average loss over the runs:            2.423507 
##   standard deviation of the loss:        0.0003462725

De esta manera, los resultados de la validación cruzada, sugieren que el algoritmo basado en “escalada simple” (Hill-Climb) produce una estructura del modelo/red que ajusta bastante bien a los datos, a juzgar por el valor de error total al predecir (loss):

Algoritmo error (loss)
mmhc 2.210296
hc 2.423507