Big Data Analytics - Naiver Bayes-Klassifikator

Naive Bayes ist eine probabilistische Technik zur Konstruktion von Klassifikatoren. Die charakteristische Annahme des naiven Bayes-Klassifikators besteht darin, zu berücksichtigen, dass der Wert eines bestimmten Merkmals angesichts der Klassenvariablen unabhängig vom Wert eines anderen Merkmals ist.

Trotz der zuvor erwähnten vereinfachten Annahmen erzielen naive Bayes-Klassifikatoren in komplexen realen Situationen gute Ergebnisse. Ein Vorteil von naiven Bayes besteht darin, dass nur eine geringe Menge an Trainingsdaten erforderlich ist, um die für die Klassifizierung erforderlichen Parameter abzuschätzen, und dass der Klassifizierer schrittweise trainiert werden kann.

Naive Bayes ist ein bedingtes Wahrscheinlichkeitsmodell: Gegeben ist eine zu klassifizierende Probleminstanz, dargestellt durch einen Vektor x= (x 1 ,…, x n ) repräsentiert einige n Merkmale (unabhängige Variablen) und weist dieser Instanz Wahrscheinlichkeiten für jedes der K möglichen Ergebnisse oder Klassen zu.

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

Das Problem bei der obigen Formulierung besteht darin, dass es unmöglich ist, ein solches Modell auf Wahrscheinlichkeitstabellen zu stützen, wenn die Anzahl der Merkmale n groß ist oder wenn ein Merkmal eine große Anzahl von Werten annehmen kann. Wir formulieren das Modell daher neu, um es einfacher zu machen. Mit dem Bayes-Theorem kann die bedingte Wahrscheinlichkeit wie folgt zerlegt werden:

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

Dies bedeutet, dass unter den obigen Unabhängigkeitsannahmen die bedingte Verteilung über die Klassenvariable C - beträgt.

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

wo der Beweis Z = p (x) ist ein Skalierungsfaktor, der nur von x 1 ,…, x n abhängt. Dies ist eine Konstante, wenn die Werte der Merkmalsvariablen bekannt sind. Eine übliche Regel besteht darin, die wahrscheinlichste Hypothese auszuwählen. Dies wird als Maximum a posteriori oder MAP-Entscheidungsregel bezeichnet. Der entsprechende Klassifizierer, ein Bayes-Klassifizierer, ist die Funktion, die eine Klassenbezeichnung $ \ hat {y} = C_k $ für einige k wie folgt zuweist:

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

Das Implementieren des Algorithmus in R ist ein unkomplizierter Prozess. Das folgende Beispiel zeigt, wie ein Naive Bayes-Klassifikator trainiert und zur Vorhersage in einem Spam-Filterproblem verwendet wird.

Das folgende Skript ist in der verfügbar bda/part3/naive_bayes/naive_bayes.R Datei.

# 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

Wie wir dem Ergebnis entnehmen können, beträgt die Genauigkeit des Naive Bayes-Modells 72%. Dies bedeutet, dass das Modell 72% der Instanzen korrekt klassifiziert.