Este paso se detalla en el primer documento: https://rpubs.com/Moki-chan/rpart-parcial-breast-mama
2.1. Información inicial de la data
data <- read.csv("https://raw.githubusercontent.com/cnahuina/data-mineria/master/dataCancerFinal2.csv")
data <- data[,2:8]
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" ...
data$Diagnosis <- as.factor(data$Diagnosis)
2.2. Información inicial de la data
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
# install.packages("caret")
library(caret)
library(randomForest)
# install.packages("ROCR")
library(ROCR)
set.seed(2018)
training.ids <- createDataPartition(data$Diagnosis, p = 0.7, list = F)
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
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
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.
acc <- (98+61)/170
acc
## [1] 0.9352941
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])