Validación cruzada en R

Está de moda usar caret para estas cosas, pero yo estoy todavía acostumbrado a hacerlas a mano. Creo, además, que es poco instructivo ocultar estas cuestiones detrás de funciones de tipo caja-negra-maravillosa a quienes se inician en el mundo de la construcción y comparación de modelos. Muestro, por tanto, código bastante simple para la validación cruzada de un modelo con R:

# genero ids
ids <- rep(1:10, length.out = nrow(cars))
 
# Nota: da igual si nrow(df) no es múltiplo de 10
 
# los aleatorizo
ids <- sample(ids) 
 
# esto devuelve una lista de dfs:
preds.cv <- lapply(unique(ids), function(i){
  preds <- predict(lm(dist ~ speed, data = cars[ids != i,]), cars[ids == i,])
  data.frame(preds = preds, real = cars[ids == i,]$dist)
})
 
# "apilo" los dfs:
preds.cv <- do.call(rbind, preds.cv)
 
# calculo el rmse
rmse <- sqrt(mean((preds.cv$preds - preds.cv$real)^2))

Sí, estoy usando el RMSE aunque sea un detractor del mismo.

Y, si quieres, también puedes correr ese código en paralelo.

Un comentario sobre “Validación cruzada en R

  1. Isidro Hidalgo 23 febrero, 2016 12:20

    Caret tiene implementados gráficos muy agradables para visualizar los resultados de la validación cruzada… y esos cuesta más hacerlos a mano…

Los comentarios están desabilitados.