Esta técnica consiste en dividir los datos en varios set de datos y luego elegir uno de los set para "testear" y el resto para entrenar el Árbol de Decisión. Esto se hace de forma repetida hasta "testear" con cada set de datos, guardando el resultado de cada iteración en una tabla para luego analizar la eficiencia de la predicción. Este método viene del concepto Leave One Out. (ver Referencia No.2)
Conceptualmente sería algo como lo siguiente:
Al realizar 10 iteraciones y tener % de predicción en cada iteración en una tabla, puede graficarse el resultado y obtener un promedio de la eficiencia general del modelo predictivo:
# VALIDACION CRUZADA # PACKAGE Y DATA SET # ----------------------------------------------------------------------------- library(C50) library(rpart) data(churn) Variables <- c(4, 7, 16, 19, 17, 20) datos <- churnTrain[, Variables] datos <- rbind(datos, churnTest[, Variables]) # FOLDS # ------------------------------------------------------------------------------- set.seed(1) Folds <- 10 datos$kfold <- sample(1:Folds, nrow(datos), replace = T) # ITERACION MODELOS + PREDICCION # -------------------------------------------------------------------------------- Iter <- data.frame(iteracion = NULL, aciertos = NULL) for (i in 1:Folds) { Test <- subset(datos, kfold == i) Entrenamiento <- subset(datos, !kfold == i) Modelo <- rpart(churn ~ .,data = Entrenamiento) Prediccion <- predict(Modelo, Test, type = "class") MC <- table(Test[, "churn"],Prediccion) Aciertos <- MC[1, 1] / (MC[1, 1] + MC[2, 1]) Iter <- rbind(Iter, data.frame(Iter = i, acierto = Aciertos)) } # GRAFICO # -------------------------------------------------------------------------------- promedio <- format(mean(Iter$acierto, na.rm=TRUE)*100,digits = 4) plot(Iter,type = "b", main = "% Prediccion en Cada Iteracion", cex.axis = .7,cex.lab = .7,cex.main = .8, xlab ="No. de Iteraciones", ylab="% Prediccion") abline(h = mean(Iter$acierto), col = "blue", lty = 2) legend("topright", legend = paste("Eficiencia de Prediccion =", promedio, "%"), col = "blue", lty = 2, lwd = 1, cex=.7, bg=NULL)
En este caso entonces... cual seria el mejor modelo o arbol para el set de datos?
ResponderEliminarSaludos
Buenas tardes, me gusto mucho esta publicación, tengo una pregunta ¿por qué escoge justamente esas variables (4,7,16,17,19,20)? ¿qué proceso de selección uso?
ResponderEliminarHola! porque se usan 10 interacciones? hay alguna razón en especial?
ResponderEliminarSaludos