Introducción
A continuación se mostrará una demostración del algoritmo supervisado de Naive Bayes. En esta simple demostración Usaremos los datos de supervivientes del Titanic que vienen en los datasets de R por defecto. La tabla de datos tiene 32 filas pero en realidad esconde en la columna freq el número de repeticiones de cada caso. El primer caso sería almacenar los valores con los que estaremos trabajando en un data frame
El primer paso es importar las librerías para utilizar el presente algoritmo
library(e1071,naivebaye)
## Warning: package 'e1071' was built under R version 4.1.3
#Cargamos los datos del Titanic desde los datasets
data("Titanic")
#Los almacenamos en un data frame
Titanic_df=as.data.frame(Titanic)
str(Titanic_df)
## 'data.frame': 32 obs. of 5 variables:
## $ Class : Factor w/ 4 levels "1st","2nd","3rd",..: 1 2 3 4 1 2 3 4 1 2 ...
## $ Sex : Factor w/ 2 levels "Male","Female": 1 1 1 1 2 2 2 2 1 1 ...
## $ Age : Factor w/ 2 levels "Child","Adult": 1 1 1 1 1 1 1 1 2 2 ...
## $ Survived: Factor w/ 2 levels "No","Yes": 1 1 1 1 1 1 1 1 1 1 ...
## $ Freq : num 0 0 35 0 0 0 17 0 118 154 ...
Creamos una tabla de casos completos a partir de la frecuencia de cada uno.
## Esto repite cada caso según la frecuencia dada en la col de la tabla.
repeating_sequence=rep.int(seq_len(nrow(Titanic_df)), Titanic_df$Freq)
Creamos una nueva tabla repitiendo los casos según el modelo anterior.
Titanic_dataset=Titanic_df[repeating_sequence,]
#Aquí no necesitaremos más la tabla de frecuencias
Titanic_dataset$Freq=NULL
head(Titanic_dataset)
## Class Sex Age Survived
## 3 3rd Male Child No
## 3.1 3rd Male Child No
## 3.2 3rd Male Child No
## 3.3 3rd Male Child No
## 3.4 3rd Male Child No
## 3.5 3rd Male Child No
Todos los factores
str(Titanic_dataset)
## 'data.frame': 2201 obs. of 4 variables:
## $ Class : Factor w/ 4 levels "1st","2nd","3rd",..: 3 3 3 3 3 3 3 3 3 3 ...
## $ Sex : Factor w/ 2 levels "Male","Female": 1 1 1 1 1 1 1 1 1 1 ...
## $ Age : Factor w/ 2 levels "Child","Adult": 1 1 1 1 1 1 1 1 1 1 ...
## $ Survived: Factor w/ 2 levels "No","Yes": 1 1 1 1 1 1 1 1 1 1 ...
Ajustamos un modelo de naive bayes con la librería e1071 para posteriormente visualizar el modelo
m.e1071 <- naiveBayes(Survived ~ ., data = Titanic_dataset)
m.e1071
##
## Naive Bayes Classifier for Discrete Predictors
##
## Call:
## naiveBayes.default(x = X, y = Y, laplace = laplace)
##
## A-priori probabilities:
## Y
## No Yes
## 0.676965 0.323035
##
## Conditional probabilities:
## Class
## Y 1st 2nd 3rd Crew
## No 0.08187919 0.11208054 0.35436242 0.45167785
## Yes 0.28551336 0.16596343 0.25035162 0.29817159
##
## Sex
## Y Male Female
## No 0.91543624 0.08456376
## Yes 0.51617440 0.48382560
##
## Age
## Y Child Adult
## No 0.03489933 0.96510067
## Yes 0.08016878 0.91983122
Visualización del Dataset
str(Titanic_df)
## 'data.frame': 32 obs. of 5 variables:
## $ Class : Factor w/ 4 levels "1st","2nd","3rd",..: 1 2 3 4 1 2 3 4 1 2 ...
## $ Sex : Factor w/ 2 levels "Male","Female": 1 1 1 1 2 2 2 2 1 1 ...
## $ Age : Factor w/ 2 levels "Child","Adult": 1 1 1 1 1 1 1 1 2 2 ...
## $ Survived: Factor w/ 2 levels "No","Yes": 1 1 1 1 1 1 1 1 1 1 ...
## $ Freq : num 0 0 35 0 0 0 17 0 118 154 ...
Realizamos la prediccion con el modelo
predicciones.m<-predict(m.e1071,Titanic_dataset)
# Matriz de confusión
table(predicciones.m,Titanic_dataset$Survived)
##
## predicciones.m No Yes
## No 1364 362
## Yes 126 349
hecho<-data.frame(Class="1rd",Sex="Female",Age="Child")
predict(m.e1071,hecho)
## [1] Yes
## Levels: No Yes
Una vez realizada la actividad, puedo concluir que al momento de hacer estudios estadísticos es probable que todas las combinaciones de variables posibles no sean contenidas, la mayoría de las veces, en las muestras de los datos requeridos para el estudio. Si las probabilidades de casos especiales resultan ser demasiado bajas de lo esperado, un investigador puede implementar el modelo Naive Bayes, con dicho modelo se puede agregar en la fórmula la opción del argumento laplace=1, el cual, se cuenta con una aparición de las combinaciones de factores posibles. Si el investigador así lo quiere, puede aumentar el parámetro y a la vez incluir casos raros dentro del pronóstico en cuestión. La ventaja de esto es que no se obtiene una probabilidad de 0 gracias a la simplificación del modelo de Bayes.