Cuantificador Bayesiano Ingenuo en R

Uso: Clasificador probabilístico.

Descripción: Este método de clasificación probabilístico está fundamentado en el teorema de Bayes, clasifica clases preestablecidas de una población dependiendo de sus variables independientes.

Para entender la peculiaridad del método se recurrirá al ejemplo típico de clasificar fruta, donde se considerada como una manzana una fruta si es amarilla, redonda y de alrededor de 7 cm de diámetro. Un clasificador de Bayes ingenuo considera que cada una de estas características contribuye de manera independiente a la probabilidad de que esta fruta sea una manzana, independientemente de la presencia o ausencia de las otras características.

Variable dependiente: No métrica.

Variables independientes: Métricas y no métricas.

Ejemplo en R: Clasificar fruta atendiendo a su color, forma, tamaño y calorías.

 

# Carga de datos inicial, tipos de flores con diferentes características 
color <- c(rep('amarilla',100), rep('naranja',100), rep('roja',100), rep('amarilla',100), rep('verde',100) )
forma <- c(rep('rednoda',300), rep('alargada',200))
tamano <- c(rnorm(100,11), rnorm(100,6), rnorm(100,25), rnorm(100,16),rnorm(100,24))
calorias <- c(rnorm(100,52),rnorm(100,53), rnorm(100,30),rnorm(100,89),rnorm(100,34))
fruta <- c(rep('manzana',100),rep('mandarina',100), rep('sandia',100), rep('plátano',100), rep('melón',100) )

aux <-matrix(c(color, forma, tamano, calorias, fruta), ncol = 5)
colnames(aux) <- c('color', 'forma','tamano', 'calorías', 'fruta')
datos<-data.frame(aux)


# Selección de una submuestra de 105 (el 70% de los datos)
set.seed(101)
tamano.total <- nrow(datos)
tamano.train <- round(tamano.total*0.7)
datos.indices <- sample(1:tamano.total , size=tamano.train)
datos.train <- datos[datos.indices,]
datos.test <- datos[-datos.indices,]

# Ejecución del Clasificador bayesiano ingenuo 
library("e1071")
modelo <- naiveBayes(fruta ~ ., data=datos)
summary(modelo)
##         Length Class  Mode     
## apriori 5      table  numeric  
## tables  4      -none- list     
## levels  5      -none- character
## call    4      -none- call
# predict necesita el parámetro newdata
results <- predict(object = modelo, newdata=datos.test, type = "class")

mc <- table(results,datos.test$fruta)
mc
##            
## results     mandarina manzana melón plátano sandia
##   mandarina        29       0     0       0      0
##   manzana           0      28     0       0      0
##   melón             0       0    29       0      0
##   plátano           0       0     0      33      0
##   sandia            0       0     0       0     31
# Elementos correctamente clasificados
correctos <- 100 * sum(diag(mc)) / sum(mc)
correctos
## [1] 100

Otros artículos que pueden ser de interés:

Autor: Diego Calvo