- 1. Selección de variables al azar en cada arbol, considerando la raíz cuadrada del total de variables como el tamaño de variables a remuestrear en cada iteracion. (el método original remuestrea variables en cada nodo del arbol).
- 2. Muestras con reemplazo en Iteraciones, y tamaño de muestra es igual al Train-Dataset
- 3. Arboles sin podar, dejando crecer (en reglas) el algoritmo en cada iteracion.
Y los arboles creados en cada iteración quedan así (solo para ilustrar la profundidad en reglas de cada árbol):
# --------------------------------------------------- # Carga package, datos y defina cantidad de iteraciones library(rpart);library(foreach); library(C50); data(churn) Test <- churnTest Train <- churnTrain Iteraciones <-10 # Cantidad de arboles #------------------------------------------------------------------ # Crea el modelo con multiples arboles de decision # Cada arbol tiene variables y observaciones diferentes en cada iteracion modeloRF.rpart<- foreach(i=1:Iteraciones) %do% { # seleccion de variables y formula ----------------------- m.try <- ceiling(sqrt(length((Train)))) # raiz cuadrada de total de variables clase <- 'churn' # identifica variable a predecir variables <- names(Train)[-which(names(Train)==clase)] # vector con variables predictoras set.mtry <- sample(length(variables),m.try+1) # seleccion aleatoria de variables predictoras set.variables <- paste(variables[set.mtry],collapse="+") # label de variables preidctors elegidas formula.rpart <- paste(clase,'~',set.variables) # formula con variable a predecir y predictoras # modelo rpart ------------------------------------------- rpart(formula.rpart, Train[sample(nrow(Train), # total de registros en Train nrow(Train), # elige muestra con cantidad igual a Train original replace = T),], # muestras con reemplazo, los registros se repiten control=rpart.control(cp = 0) # arboles sin podar ) } #----------------------------------------------------------------- # Hace prediccion usando el modelo ya creado previamente # Luego Acumula la prediccion de cada arbol en un data.frame Prediccion <-as.data.frame( foreach(i=1:Iteraciones,.combine=cbind) %do% {as.character(predict(modeloRF.rpart[[i]], Test,type = "class"))} ) #----------------------------------------------------------------- # Calcula la prediccion final usando tecnica de Voto Mayoritario Prediccion$Cantidad_yes <- rowSums(Prediccion [, 1:Iteraciones] == "yes") Prediccion$Cantidad_no <- rowSums(Prediccion [, 1:Iteraciones] == "no") Prediccion$Prediccion <- with(Prediccion,(ifelse(Cantidad_yes>Cantidad_no,"yes","no"))) MC <- table(Test[, "churn"],Prediccion[,"Prediccion"]); Efectividad <- MC["yes","yes"]/(MC["yes","yes"]+MC["no","yes"]); Captado <- MC["yes","yes"]/(MC["yes","yes"]+MC["yes","no"]) print(MC) print(Efectividad) print(Captado)
Referencia:
Manejo de nulos en rpart: http://stats.stackexchange.com/questions/50310/how-does-rpart-handle-missing-values-in-predictors
No hay comentarios:
Publicar un comentario