Big Data Analytics: clasificador ingenuo de Bayes
Naive Bayes es una técnica probabilística para construir clasificadores. El supuesto característico del clasificador de Bayes ingenuo es considerar que el valor de un rasgo particular es independiente del valor de cualquier otro rasgo, dada la variable de clase.
A pesar de las suposiciones demasiado simplificadas mencionadas anteriormente, los clasificadores de Bayes ingenuos tienen buenos resultados en situaciones complejas del mundo real. Una ventaja de Bayes ingenuo es que solo requiere una pequeña cantidad de datos de entrenamiento para estimar los parámetros necesarios para la clasificación y que el clasificador se puede entrenar de forma incremental.
Naive Bayes es un modelo de probabilidad condicional: dada una instancia de problema a clasificar, representada por un vector x= (x 1 ,…, x n ) que representa algunas n características (variables independientes), asigna a esta instancia probabilidades para cada uno de los K posibles resultados o clases.
$$ p (C_k | x_1, ....., x_n) $$
El problema con la formulación anterior es que si el número de características n es grande o si una característica puede tomar una gran cantidad de valores, entonces no es factible basar dicho modelo en tablas de probabilidad. Por tanto, reformulamos el modelo para hacerlo más sencillo. Usando el teorema de Bayes, la probabilidad condicional se puede descomponer como:
$$ p (C_k | x) = \ frac {p (C_k) p (x | C_k)} {p (x)} $$
Esto significa que bajo los supuestos de independencia anteriores, la distribución condicional sobre la variable de clase C es -
$$ p (C_k | x_1, ....., x_n) \: = \: \ frac {1} {Z} p (C_k) \ prod_ {i = 1} ^ {n} p (x_i | C_k) $$
donde la evidencia Z = p (x) es un factor de escala que depende solo de x 1 ,…, x n , que es una constante si se conocen los valores de las variables de características. Una regla común es elegir la hipótesis más probable; esto se conoce como la regla de decisión máxima a posteriori o MAP. El clasificador correspondiente, un clasificador de Bayes, es la función que asigna una etiqueta de clase $ \ hat {y} = C_k $ para algunos k de la siguiente manera:
$$ \ hat {y} = argmax \: p (C_k) \ prod_ {i = 1} ^ {n} p (x_i | C_k) $$
Implementar el algoritmo en R es un proceso sencillo. El siguiente ejemplo demuestra cómo entrenar un clasificador Naive Bayes y usarlo para la predicción en un problema de filtrado de spam.
El siguiente script está disponible en bda/part3/naive_bayes/naive_bayes.R archivo.
# Install these packages
pkgs = c("klaR", "caret", "ElemStatLearn")
install.packages(pkgs)
library('ElemStatLearn')
library("klaR")
library("caret")
# Split the data in training and testing
inx = sample(nrow(spam), round(nrow(spam) * 0.9))
train = spam[inx,]
test = spam[-inx,]
# Define a matrix with features, X_train
# And a vector with class labels, y_train
X_train = train[,-58]
y_train = train$spam
X_test = test[,-58]
y_test = test$spam
# Train the model
nb_model = train(X_train, y_train, method = 'nb',
trControl = trainControl(method = 'cv', number = 3))
# Compute
preds = predict(nb_model$finalModel, X_test)$class
tbl = table(y_test, yhat = preds)
sum(diag(tbl)) / sum(tbl)
# 0.7217391
Como podemos ver en el resultado, la precisión del modelo Naive Bayes es del 72%. Esto significa que el modelo clasifica correctamente el 72% de las instancias.