- 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.
Mostrando entradas con la etiqueta Random Forest. Mostrar todas las entradas
Mostrando entradas con la etiqueta Random Forest. Mostrar todas las entradas
martes, 30 de junio de 2015
Random Forest usando rpart
lunes, 22 de junio de 2015
Imputacion con RandomForest
Si se tiene un data set con NA (datos faltantes, missing, etc..), puede usarse la función rfImpute del package randomForest para completar los NA de todas las variables.
Conceptualmente seria así:
Referencia:
http://stackoverflow.com/questions/20537186/getting-predictions-after-rfimpute
Conceptualmente seria así:
# imputacion con rfImpute del package randomForest library(randomForest); # -------------------------------------------- ## Crea valores NA aleatoriamente en data set iris.na iris.na <- iris for (i in 1:4) iris.na[sample(150, sample(50)), i] <- NA # -------------------------------------------- ## Imputa valores NA en nuevo data set iris.imputed <- rfImpute(Species ~ ., iris.na)
NOTAS:
La función rfImpute solo imputa variables numéricas y factores.
Para imputar solo una variable, ver método con regresión lineal publicado AQUI
El excel con imagenes se descarga AQUI
La función rfImpute solo imputa variables numéricas y factores.
Para imputar solo una variable, ver método con regresión lineal publicado AQUI
El excel con imagenes se descarga AQUI
Referencia:
http://stackoverflow.com/questions/20537186/getting-predictions-after-rfimpute
jueves, 18 de junio de 2015
Cantidad de variables en Random Forest
Para saber la cantidad optima de variables en algoritmo randomForest (ver ejemplo de randomForest AQUI), puede usarse la función tuneRF que viene incluida en este package. Esta función gráfica el error OOB en cada iteración, aumentando la cantidad de variables en cada paso (para función de OOB ver nota publicada AQUI).
En el siguiente gráfico se puede identificar que al llegar a 8 variables se estabiliza el error:
martes, 16 de junio de 2015
Mediciones del Random Forest
Para conocer la eficiencia de un modelo de Random Forest (ver detalle de randomForest AQUI), puede usarse las siguientes medidas, todas obtenidas con funciones incluidas en el package randomForest.
OOB error (out of bag error)
Cuando el algoritmo randomForest selecciona una muestra con reemplazo para crear un árbol en una iteración, algunas observaciones se quedan fuera (out of bag) y no son usadas para crear el árbol. Para esas observaciones que quedaron fuera del árbol, se hace una predicción y se calcula el error de la predicción. Esto se hace en cada iteración para calcular el error estimado, llamado OOB error.
La función print(modelo_rf) muestra el OOB del modelo:

lunes, 8 de junio de 2015
Paralelizar Random Forest
Si se quiere disminuir el tiempo de ejecución del algoritmo randomForest, (ver ejemplo de randomForest AQUI) puede utilizarse el package foreach, que distribuye las ejecuciones de los diferentes arboles en distintos procesadores logrando una ejecución en paralelo.
El siguiente script distribuye 1000 arboles de un randomForest en 4 procesadores, asignando 250 arboles a cada procesador y luego uniéndolos en un único modelo. En un procesador i7 el tiempo de ejecucion tarda 30 segundos sin paralelizar, luego de paralelizar tarda 6 segundo
Conceptualmente el package foreach hace esto:
1. http://stackoverflow.com/questions/14106010/parallel-execution-of-random-forest-in-r
2. http://cran.r-project.org/web/packages/foreach/vignettes/foreach.pdf
3. https://github.com/tobigithub/R-parallel/wiki/R-parallel-Errors
El siguiente script distribuye 1000 arboles de un randomForest en 4 procesadores, asignando 250 arboles a cada procesador y luego uniéndolos en un único modelo. En un procesador i7 el tiempo de ejecucion tarda 30 segundos sin paralelizar, luego de paralelizar tarda 6 segundo
Conceptualmente el package foreach hace esto:
# CARGA LIBRERIA Y DATOS #--------------------------------------------------- library(doParallel);library(foreach);library(C50);data(churn) inicio <- Sys.time() datos <- churnTrain[sample(3333,10000,replace = T),] # REGISTRO DE PARALLEL BACKEND #--------------------------------------------------- cl <- makeCluster(detectCores()) registerDoParallel(cl) getDoParWorkers() #RANDOM FOREST #--------------------------------------------------- modelo.rf <- foreach(ntree=rep(250, 4), # 250 arboles x 4 nodo: 1000 arboles # .combine = combine, # creacion de arboles en paralelo .multicombine = TRUE, # creacion de resultados en paralelo .packages = 'randomForest') %dopar% randomForest(churn ~.,data=datos, mtry = 6, ntree=ntree) # STOP CLUSTER #--------------------------------------------------- stopCluster(cl) print(duracion<-Sys.time()-inicio)
1. http://stackoverflow.com/questions/14106010/parallel-execution-of-random-forest-in-r
2. http://cran.r-project.org/web/packages/foreach/vignettes/foreach.pdf
3. https://github.com/tobigithub/R-parallel/wiki/R-parallel-Errors
miércoles, 26 de noviembre de 2014
Ejemplo de Random Forest
Random Forest es un algoritmo predictivo que usa la técnica de Bagging para combinar diferentes arboles, donde cada árbol es construido con observaciones y variables aleatorias.
En forma resumida sigue este proceso:
En forma resumida sigue este proceso:
- Selecciona individuos al azar (usando muestreo con reemplazo) para crear diferentes set de datos.
- Crea un árbol de decisión con cada set de datos, obteniendo diferentes arboles, ya que cada set contiene diferentes individuos y diferentes variables en cada nodo.
- Al crear los arboles se eligen variables al azar en cada nodo del arbol, dejando crecer el arbol en profundidad (es decir, sin podar).
- Predice los nuevos datos usando el "voto mayoritario", donde clasificará como "positivo" si la mayoría de los arboles predicen la observación como positiva.
Conceptualmente sería así:
Suscribirse a:
Entradas (Atom)





