1. Técnica Random Forest


Random forest (o random forests) también conocidos en castellano como ‘“Bosques Aleatorios”’ es una combinación de árboles predictores tal que cada árbol depende de los valores de un vector aleatorio probado independientemente y con la misma distribución para cada uno de estos. Es una modificación sustancial de bagging que construye una larga colección de árboles no correlacionados y luego los promedia.

El algoritmo para inducir un random forest fue desarrollado por Leo Breiman1 y Adele Cutler y Random forest es su marca de fábrica. El término aparece de la primera propuesta de Random decision forest, hecha por Tin Kam Ho de Bell Labs en 1995. El método combina la idea de bagging de Breiman y la selección aleatoria de atributos, introducida independientemente por Ho,23 Amit y Geman,4 para construir una colección de árboles de decisión con variación controlada.

La selección de un subconjunto aleatorio de atributos es un ejemplo del método random subspace, el que, según la formulación de Ho, es una manera de llevar a cabo la discriminación estocástica propuesta por Eugenio Kleinberg.

En muchos problemas el rendimiento del algoritmo random forest es muy similar a la del boosting, y es más simple de entrenar y ajustar. Como consecuencia, el Random forest es popular y ampliamente utilizado.


¿Cómo se construye un modelo random forest?


Cada árbol se construye así:

  • Dado que el número de casos en el conjunto de entrenamiento es N. Una muestra de esos N casos se toma aleatoriamente pero CON REEMPLAZO. Esta muestra será el conjunto de entrenamiento para construir el árbol i.

  • Si existen M varibles de entrada, un número m<M se especifica tal que para cada nodo, m variables se seleccionan aleatoriamente de M. La mejor división de estos m atributos es usado para ramificar el árbol. El valor m se mantiene constante durante la generación de todo el bosque.

  • Cada árbol crece hasta su máxima extensión posible y NO hay proceso de poda.

  • Nuevas instancias se predicen a partir de la agregación de las predicciones de los x árboles (mayoría de votos para clasificación, promedio para regresión)


Aplicando Random Forest


Características

  • Random Forest se considera como la “panacea” en todos los problemas de ciencia de datos.

  • Útil para regresión y clasificación.

  • Un grupo de modelos “débiles”, se combinan en un modelo robusto.

  • Sirve como una técnica para reducción de la dimensionalidad.

  • Se generan múltiples árboles (a diferencia de CART).

  • Cada árbol da una clasificación (vota por una clase). Y el resultado es la clase con mayor número de votos en todo el bosque (forest).

  • Para regresión, se toma el promedio de las salidas (predicciones) de todos los árboles.


Referencias

Breiman, L. (2001). Random forests. Machine Learning, 45(1), 5–32. https://doi.org/10.1023/A:1010933404324

Ho, T. K. (1995). Random Decision Forest. Retrieved from http://cm.bell-labs.com/cm/cs/who/tkh/papers/odt.pdf

Ho, T. K. (1998). The random subspace method for constructing decision forests. IEEE Transactions on Pattern Analysis and Machine Intelligence, 20(8), 832–844. https://doi.org/10.1109/34.709601

Amit, Y., & Geman, D. (1997). Shape Quantization and Recognition with Randomized Trees. Neural Computation, 9(7), 1545–1588. https://doi.org/10.1162/neco.1997.9.7.1545

Kleinberg, E. M. (1996). An overtraining-resistant stochastic modeling method for pattern recognition. Annals of Statistics, 24(6), 2319–2349. https://doi.org/10.1214/aos/1032181157



2. Ejecución del código


Transformación de la base de datos “Diabetes.csv” a una base “Diabetes.RDATA”

setwd("C:/Users/Fabian/Desktop/DEC/MINERIA DE DATOS/Parcial 3/Proyecto/TRABAJO FINAL/proyectofinal")
Diabetes<-read.csv("DatosProyec.csv",header=T, sep=",",dec=".")
save(Diabetes, file = "diabetes.Rdata" )
load("diabetes.Rdata")   ## Para llamar a una tabla 
str(Diabetes)
'data.frame':   99 obs. of  7 variables:
 $ EDAD           : int  78 60 67 63 80 49 57 44 60 49 ...
 $ PESO           : int  97 90 99 81 96 61 98 87 81 61 ...
 $ TALLA          : int  178 172 162 178 175 168 161 166 169 168 ...
 $ GLUCOSA        : int  134 120 135 99 99 94 93 109 120 108 ...
 $ COLESTEROL     : int  202 211 205 203 173 237 171 226 196 223 ...
 $ TRIGLICIRECIDOS: int  178 154 150 124 166 147 177 157 136 151 ...
 $ DIAGNOSTICO    : Factor w/ 3 levels "DIABETICO","NORMAL",..: 1 3 1 3 3 2 3 3 3 2 ...


Ejecución de la técnica Random Forest

library(randomForest)
set.seed(42)
rndSample <- sample(1:nrow(Diabetes), 63)
tr <- Diabetes[rndSample, ]  # Datos de entrenamiento
ts <- Diabetes[-rndSample, ] # Datos de evaluación
m <- randomForest(DIAGNOSTICO ~ ., Diabetes, ntree = 100)
ps <- predict(m, ts)


Matriz de confusión

(cm <- table(ps, ts$DIAGNOSTICO))
              
ps             DIABETICO NORMAL S.METABOLICO
  DIABETICO           11      0            0
  NORMAL               0      9            0
  S.METABOLICO         0      0           16

Interpretación: Se observa que el 100% (36) de pacientes fueron predichos correctamente mediante la data de evaluación.


Tasa de error

100*(1-sum(diag(cm))/sum(cm))
[1] 0

Interpretación: En base a la conclusión anterior, la tasa de error de predicción para nuestro modelo con la data de evaluación es del o%.



3. MANUAL DE USO DE LA APP DIAGNÓSTICO DIABETES


¿Como ingresar?

El ingreso a la aplicación se realizará mediante el enlace : https://fabian1993.shinyapps.io/APP_DIAGNOSTICO_DIABETES/


Función

Esta aplicación tiene por objetivo recibir información de un paciente y proyectar su posible diagnóstico diabético mediate la aplicación de la técnica de clasificación Random Forest.


Iterfaz

Información de la data en estudio:

La base de datos en estudio corresponde al registro de las variables:

  • Edad (años)
  • Peso (kg)
  • Estatura (cm)
  • Glucosa (mg/dl)
  • Colesterol (mg/dl)
  • Trigliceridos (mg/dl)

Medidas en 99 pacientes registrados en el centro de salud San Isidro ubicado en el cantón Guano de la provincia de Chimborazo - Ecuador.


Visalización de la Base de Datos


Ingreso del paciente


Predicción