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.
Este paso se detalla en el primer documento: https://rpubs.com/Moki-chan/breast-mama-rpart
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)
# install.packages("e1071")
library(e1071)
set.seed(2018)
tr.id <- createDataPartition(data$Diagnosis, p = 0.65, list=F)
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
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.
acc <- (116+60)/198
acc
## [1] 0.8888889
error_rate <- 1 - acc
error_rate
## [1] 0.1111111
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
##