Árboles[Random-Forest]

Paso 1: Entendimiento del negocio

Este paso se detalla en el primer documento: https://rpubs.com/Moki-chan/rpart-parcial-breast-mama

Paso 2: Entendimiento de la data

2.1. Información inicial de la data

  • Carga de datos formato csv.
data <- read.csv("https://raw.githubusercontent.com/cnahuina/data-mineria/master/dataCancerFinal2.csv")
data <- data[,2:8]
  • Verificamos la carga, visualizando la estructura inical de las variables de manera general.
str(data)
## 'data.frame':    569 obs. of  7 variables:
##  $ PC1      : num  -9.29 -2.84 -6.79 -5.49 -4.93 ...
##  $ PC2      : num  -1.97 4.31 1.3 -7.33 2.08 ...
##  $ PC3      : num  1.355 0.628 0.266 1.655 -1.465 ...
##  $ PC4      : num  -3.546 -1.179 -1.153 0.371 -3.635 ...
##  $ PC5      : num  -1.5285 0.0643 -0.6834 0.1112 0.1196 ...
##  $ PC6      : num  -1.5151 0.0216 -0.6836 -1.2302 1.563 ...
##  $ Diagnosis: chr  "M" "M" "M" "M" ...
  • Cambio de la variable data.diagnosis como factor
data$Diagnosis <- as.factor(data$Diagnosis)

2.2. Información inicial de la data

  • Realizamos el resumen de la data total, de la siguente manera:

En el cual podemos visualizar lo siguiente:

Variables:

Esto se visualiza en el primer documento: https://rpubs.com/Moki-chan/breast-mama-rpart

3.3. Construir data

  • Detallamos las librerías que haremos uso
# install.packages("caret")
library(caret)
library(randomForest)
# install.packages("ROCR")
library(ROCR)
  • Establecemos una semilla
set.seed(2018)
  • Hacemos las particiones respectivas para hacer uso de la función.
 training.ids <- createDataPartition(data$Diagnosis, p = 0.7, list = F)

Paso 4: Modelamiento

mod <- randomForest(x = data[training.ids,1:6],
                    y = data[training.ids, 7],
                    ntree = 500,
                    keep.forest = TRUE)
mod
## 
## Call:
##  randomForest(x = data[training.ids, 1:6], y = data[training.ids,      7], ntree = 500, keep.forest = TRUE) 
##                Type of random forest: classification
##                      Number of trees: 500
## No. of variables tried at each split: 2
## 
##         OOB estimate of  error rate: 5.51%
## Confusion matrix:
##     B   M class.error
## B 241   9  0.03600000
## M  13 136  0.08724832
  • Graficamos:
plot(mod, main = "Gráfico")

En este gráfico se muestra un modelo que intenta predecir la variable churn={B,M}. La linea negra representa el OOB, la linea roja es el error al intentar predecir churn={B}, y la linea verde es el error en la prediccion churn={M}. La linea negra siempre será el OOB, y las siguientes lineas se pueden identificar con la matriz de confusión

Paso 5: Evaluación

pred <- predict(mod, data[-training.ids,], type = "class")
table <- table(data[-training.ids,"Diagnosis"], pred, dnn=c("Actual", "Predicho"))

table
##       Predicho
## Actual  B  M
##      B 98  9
##      M  2 61

Hacemos uso de la función “confusionMatrix”, la cual es una herramienta que permite la visualización del desempeño del modelo que se ha empleado con anterioridad.

medida <- confusionMatrix(pred, data[-training.ids,]$Diagnosis)
medida
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction  B  M
##          B 98  2
##          M  9 61
##                                           
##                Accuracy : 0.9353          
##                  95% CI : (0.8872, 0.9673)
##     No Information Rate : 0.6294          
##     P-Value [Acc > NIR] : < 2e-16         
##                                           
##                   Kappa : 0.8644          
##                                           
##  Mcnemar's Test P-Value : 0.07044         
##                                           
##             Sensitivity : 0.9159          
##             Specificity : 0.9683          
##          Pos Pred Value : 0.9800          
##          Neg Pred Value : 0.8714          
##              Prevalence : 0.6294          
##          Detection Rate : 0.5765          
##    Detection Prevalence : 0.5882          
##       Balanced Accuracy : 0.9421          
##                                           
##        'Positive' Class : B               
## 

Evaluamos que tan bueno es el modelo. En el caso de que el árbol no haya sido podado.

  1. Hallamos el accuracy.
acc <- (98+61)/170
acc
## [1] 0.9352941
  1. Hallamos el error del modelo.
error_rate <- 1 - acc
error_rate
## [1] 0.06470588

Evaluamos mediante la curva ROC

probs <- predict(mod, data[-training.ids,], type ="prob")
pred <- prediction(probs[,2], data[-training.ids,"Diagnosis"])
perf <- performance(pred, "tpr","fpr") 
plot(perf, main="Curva ROC - algoritmo RandomForest")
lines(par()$usr[1:2],par()$usr[3:4])