Naive Bayes

Se trata de un clasificador probabilístico que se basa en el teorema de bayes. Este clasificador, asume que la presencia o la ausencia de una característica particular nunca está relacionada con la presencia o la ausencia de cualquier otra caracteística en la variable elegida.

Paso 1: Entendimiento del negocio

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

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)
# install.packages("e1071")
library(e1071)
  • Establecemos una semilla
set.seed(2018)
  • Hacemos las particiones respectivas para hacer uso de la función.
tr.id <- createDataPartition(data$Diagnosis, p = 0.65, list=F)

Paso 4: Modelamiento

La función intentará predecir la variable diagnosis en función de todas las anteriores del dataframe.

mod <- naiveBayes(Diagnosis ~ ., data = data[tr.id,])

mod
## 
## Naive Bayes Classifier for Discrete Predictors
## 
## Call:
## naiveBayes.default(x = X, y = Y, laplace = laplace)
## 
## A-priori probabilities:
## Y
##         B         M 
## 0.6280323 0.3719677 
## 
## Conditional probabilities:
##    PC1
## Y        [,1]     [,2]
##   B  2.369698 1.690806
##   M -3.912261 2.657949
## 
##    PC2
## Y        [,1]     [,2]
##   B -0.408821 2.189773
##   M  0.658895 2.519213
## 
##    PC3
## Y          [,1]     [,2]
##   B -0.06632075 1.473176
##   M  0.07632751 1.995791
## 
##    PC4
## Y         [,1]     [,2]
##   B -0.1348722 1.393683
##   M  0.1346640 1.356767
## 
##    PC5
## Y          [,1]     [,2]
##   B  0.09517446 1.424575
##   M -0.30855096 1.016029
## 
##    PC6
## Y         [,1]      [,2]
##   B 0.02012487 0.9621524
##   M 0.05275652 1.1961408

Paso 5: Evaluación

pred <- predict(mod, data[-tr.id,])
tab <- table(data[-tr.id,]$Diagnosis,
             pred, dnn = c("Actual", "Predicha"))
tab
##       Predicha
## Actual   B   M
##      B 116   8
##      M  14  60
  • Evaluamos que tan bueno es el modelo.

    1. Hallamos el accuracy.
acc <- (116+60)/198
acc
## [1] 0.8888889
  1. Evaluamos que tan bueno es el modelo. Para ello hacemos lo siguiente para poder hallar el error del modelo.
error_rate <- 1 - acc
error_rate
## [1] 0.1111111
  • Realizamos la matriz de confusión para tener en cuenta ciertos
confusionMatrix(tab)
## Confusion Matrix and Statistics
## 
##       Predicha
## Actual   B   M
##      B 116   8
##      M  14  60
##                                          
##                Accuracy : 0.8889         
##                  95% CI : (0.8366, 0.929)
##     No Information Rate : 0.6566         
##     P-Value [Acc > NIR] : 4.955e-14      
##                                          
##                   Kappa : 0.7587         
##                                          
##  Mcnemar's Test P-Value : 0.2864         
##                                          
##             Sensitivity : 0.8923         
##             Specificity : 0.8824         
##          Pos Pred Value : 0.9355         
##          Neg Pred Value : 0.8108         
##              Prevalence : 0.6566         
##          Detection Rate : 0.5859         
##    Detection Prevalence : 0.6263         
##       Balanced Accuracy : 0.8873         
##                                          
##        'Positive' Class : B              
##