Big Data Analytics - Classificateur Naive Bayes

Naive Bayes est une technique probabiliste de construction de classificateurs. L'hypothèse caractéristique du classificateur naïf de Bayes est de considérer que la valeur d'une caractéristique particulière est indépendante de la valeur de toute autre caractéristique, étant donné la variable de classe.

Malgré les hypothèses trop simplifiées mentionnées précédemment, les classificateurs Bayes naïfs ont de bons résultats dans des situations complexes du monde réel. Un avantage de Bayes naïf est qu'il ne nécessite qu'une petite quantité de données d'apprentissage pour estimer les paramètres nécessaires à la classification et que le classificateur peut être entraîné de manière incrémentielle.

Naive Bayes est un modèle de probabilité conditionnelle: étant donné une instance de problème à classer, représentée par un vecteur x= (x 1 ,…, x n ) représentant quelques n caractéristiques (variables indépendantes), il attribue à cette instance des probabilités pour chacun des K résultats ou classes possibles.

$$ p (C_k | x_1, ....., x_n) $$

Le problème avec la formulation ci-dessus est que si le nombre d'entités n est grand ou si une entité peut prendre un grand nombre de valeurs, alors baser un tel modèle sur des tables de probabilité est impossible. Nous reformulons donc le modèle pour le rendre plus simple. En utilisant le théorème de Bayes, la probabilité conditionnelle peut être décomposée en -

$$ p (C_k | x) = \ frac {p (C_k) p (x | C_k)} {p (x)} $$

Cela signifie que sous les hypothèses d'indépendance ci-dessus, la distribution conditionnelle sur la variable de classe C est -

$$ p (C_k | x_1, ....., x_n) \: = \: \ frac {1} {Z} p (C_k) \ prod_ {i = 1} ^ {n} p (x_i | C_k) $$

où l'évidence Z = p (x) est un facteur d'échelle dépendant uniquement de x 1 ,…, x n , qui est une constante si les valeurs des variables de caractéristiques sont connues. Une règle courante consiste à choisir l'hypothèse la plus probable; c'est ce qu'on appelle la règle de décision maximale a posteriori ou MAP. Le classificateur correspondant, un classificateur Bayes, est la fonction qui attribue une étiquette de classe $ \ hat {y} = C_k $ pour certains k comme suit -

$$ \ hat {y} = argmax \: p (C_k) \ prod_ {i = 1} ^ {n} p (x_i | C_k) $$

La mise en œuvre de l'algorithme dans R est un processus simple. L'exemple suivant montre comment former un classificateur Naive Bayes et l'utiliser pour la prédiction dans un problème de filtrage de spam.

Le script suivant est disponible dans le bda/part3/naive_bayes/naive_bayes.R fichier.

# 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

Comme nous pouvons le voir sur le résultat, la précision du modèle Naive Bayes est de 72%. Cela signifie que le modèle classe correctement 72% des instances.