Вы находитесь на странице: 1из 3

Validación Cruzada

Carlos Muñoz
carlos.munozm@uteq.edu.ec

En esta práctica se procederá a crear un modelo óptimo de regresión lineal y de redes neuronales
para poder determinar cuál de estos modelos realizará una predicción con mayor calidad. Para
determinar un modelo óptimo se utilizará la técnica llamada K-fold Cross Validation (Validación
Cruzada) con 14 iteraciones, cabe recalcar que el conjunto de datos a utilizar será iris.

El primer paso será encontrar el mejor modelo de redes neuronales


datos = iris[,-5]
attach(datos)
iteraciones = 14
inicio = 1
fin = 10

#K-fold
for(i in 1:iteraciones)
{
indices = c(inicio:fin)
datosPrueba = datos[indices, ]
datosEntrenamiento = datos[-indices, ]
set.seed(1)

# Entrenamiento de la red neuronal con los datos de entrenamiento


modelo <- nnet(Petal.Width ~ Sepal.Length + Sepal.Width +
Petal.Length,rang=0.5,size=9,linout=T,decay=10e-2,maxit=2000,
data=datosEntrenamiento)

prediccion = predict(modelo, datosPrueba)

calidad = mean(colAUC(prediccion, datosPrueba$Petal.Width))

#Obtener el mejor modelo


if(i == 1)
{
mejorModeloNNET = modelo
calidadNNET = calidad
}
else
{
if(calidad > calidadNNET)
{
mejorModeloNNET = modelo
calidadNNET = calidad
}
}

inicio = inicio + 10
fin = fin + 10
}

Luego de aplicar la validación cruzada obtuvimos un modelo de redes neuronales con un 98,3%
(0.9833333) de calidad de predicción.
Ahora procederemos a encontrar el mejor modelo de regresión lineal
datos = iris[,-5]
iteraciones = 14
inicio = 1
fin = 10

#K-fold
for(i in 1:iteraciones)
{
indices = c(inicio:fin)
datosPrueba = datos[indices, ]
datosEntrenamiento = datos[-indices, ]
set.seed(1)

# Entrenamiento del modelo de regresión lineal con los datos de entrenamiento


modelo <- lm(Petal.Width ~ Sepal.Length + Sepal.Width + Petal.Length,
data=datosEntrenamiento)

prediccion = predict(modelo, datosPrueba)

calidad = mean(colAUC(prediccion, datosPrueba$Petal.Width))

#Obtener el mejor modelo


if(i == 1)
{
mejorModeloLM = modelo
calidadLM = calidad
}
else
{
if(calidad > calidadLM)
{
mejorModeloLM = modelo
calidadLM = calidad
}
}

inicio = inicio + 10
fin = fin + 10
}

Una vez aplicada la validación cruzada obtuvimos un modelo de regresión lineal con un 100% de
calidad de predicción.

Finalmente procederemos a comparar las predicciones de los dos mejores modelos (regresión y
redes neuronales) para poder escoger el mejor.
#Modelo de Redes Neuronales
prediccionNNET = predict(mejorModeloNNET, datos)
calFinNNET = mean(colAUC(prediccionNNET, datos$Petal.Width))

#Modelo de Regresión Lineal


prediccionLM = predict(mejorModeloLM, datos)
calFinLM = mean(colAUC(prediccionLM, datos$Petal.Width))
#Mostrar Gráficos

x11()
layout(matrix(c(1:2), nrow = 1, byrow = FALSE))
layout.show(2)

plot(Petal.Width, prediccionNNET, col = c(1,2), main = paste("Red Neuronal (",


round(calFinNNET,3)*100 ,"%)") )
legend(x = "topleft", cex = 0.5, legend = c("Original", "Predicción"), fill =
c(1,2))

plot(Petal.Width,prediccionLM, col = c(1,2), main = paste("Regresión Lineal (",


round(calFinLM,3)*100 ,"%)"))
legend(x = "topleft", cex = 0.8, legend = c("Original", "Predicción"), fill =
c(1,2))

Red Neuronal ( 92.9 %) Regresión Lineal ( 92.7 %)

2.5
Original Original
Predicción Predicción
2.0

2.0
1.5
prediccionNNET

1.5
prediccionLM
1.0

1.0
0.5
0.5

0.0
0.0

0.5 1.0 1.5 2.0 2.5 0.5 1.0 1.5 2.0 2.5

Petal.Width Petal.Width

Conclusión:
Luego de probar los mejores modelos de regresión lineal y redes neuronales, podemos concluir que
el modelo de redes neuronales es mejor, debido a que este ofrece una calidad de predicción del
92,9% ante un 92,7% del modelo de regresión lineal.

Вам также может понравиться