Big Data Analytics - Naive Bayes Classifier

Naive Bayes è una tecnica probabilistica per la costruzione di classificatori. L'assunzione caratteristica del classificatore ingenuo di Bayes è di considerare che il valore di una particolare caratteristica è indipendente dal valore di qualsiasi altra caratteristica, data la variabile di classe.

Nonostante le ipotesi troppo semplificate menzionate in precedenza, i classificatori bayes ingenui hanno buoni risultati in situazioni complesse del mondo reale. Un vantaggio dell'ingenuo Bayes è che richiede solo una piccola quantità di dati di addestramento per stimare i parametri necessari per la classificazione e che il classificatore può essere addestrato in modo incrementale.

Naive Bayes è un modello di probabilità condizionale: data un'istanza del problema da classificare, rappresentata da un vettore x= (x 1 ,…, x n ) che rappresenta alcune n caratteristiche (variabili indipendenti), assegna a questa istanza probabilità per ciascuno di K possibili risultati o classi.

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

Il problema con la formulazione di cui sopra è che se il numero di caratteristiche n è grande o se una caratteristica può assumere un gran numero di valori, allora basare un tale modello su tabelle di probabilità non è fattibile. Pertanto riformuliamo il modello per renderlo più semplice. Usando il teorema di Bayes, la probabilità condizionale può essere scomposta come -

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

Ciò significa che in base alle ipotesi di indipendenza di cui sopra, la distribuzione condizionale sulla variabile di classe C è -

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

dove l'evidenza Z = p (x) è un fattore di scala dipendente solo da x 1 ,…, x n , che è una costante se i valori delle variabili delle caratteristiche sono noti. Una regola comune è scegliere l'ipotesi più probabile; questa è nota come regola di decisione a posteriori o MAP massima. Il classificatore corrispondente, un classificatore di Bayes, è la funzione che assegna un'etichetta di classe $ \ hat {y} = C_k $ per alcuni k come segue:

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

L'implementazione dell'algoritmo in R è un processo semplice. L'esempio seguente mostra come addestrare un classificatore Naive Bayes e utilizzarlo per la previsione in un problema di filtro della posta indesiderata.

Il seguente script è disponibile in bda/part3/naive_bayes/naive_bayes.R file.

# 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

Come possiamo vedere dal risultato, la precisione del modello Naive Bayes è del 72%. Ciò significa che il modello classifica correttamente il 72% delle istanze.