# Instalación de paquetes
if (!require(caret)) install.packages("caret")
if (!require(nnet)) install.packages("nnet")
if (!require(parallel)) install.packages("parallel")
library(caret) # Para validación cruzada
library(nnet) # Para crear redes neuronales
library(parallel) # Para computación paralela
# Crear función para calcular RMSE en un pliegue
rmse_fold <- function(pliegue, form, datos, nn_size) {
pliegue_logic <- seq_len(nrow(datos)) %in% pliegue
prueba <- subset(datos, pliegue_logic)
entrena <- subset(datos, !pliegue_logic)
modelo <- nnet(form, data=entrena, size=nn_size, linout=TRUE, trace=FALSE)
response_name <- setdiff(names(datos), modelo$coefnames)
Y_pronosticado <- predict(modelo, newdata=prueba)
rmse <- RMSE(Y_pronosticado, prueba[[response_name]])
return(rmse)
}
# Generar datos
n_pliegues <- 5
tamano_muestral <- 30
neuronas <- 10
genera_y <- function(x) {
cos(x) + rnorm(length(x), 0, 0.5)
}
X <- seq(0, 3 * pi, length.out = tamano_muestral)
Y <- genera_y(X)
# Crear datos como data.frame
muestra <- data.frame(X, Y)
# Crear pliegues para validación cruzada
pliegues <- createFolds(muestra$Y, k = n_pliegues)
# Crear un clúster para paralelismo
cluster <- makeCluster(6) # Ajusta según el número de núcleos disponibles
# Cargar paquetes y exportar funciones y variables necesarias al clúster
clusterEvalQ(cluster, library(nnet))
clusterEvalQ(cluster, library(caret))
clusterExport(cluster, c("rmse_fold", "muestra", "pliegues", "neuronas"))
# Realizar validación cruzada usando parLapply
rmse_pliegues <- parLapply(cluster, pliegues, rmse_fold, Y ~ X, muestra, nn_size = neuronas)
# Detener el clúster después de procesar
stopCluster(cluster)
# Resultados de RMSE para cada pliegue
print(rmse_pliegues)