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.