Big Data Analytics - Classificador Naive Bayes

Naive Bayes é uma técnica probabilística para construir classificadores. A suposição característica do classificador Bayes ingênuo é considerar que o valor de uma característica particular é independente do valor de qualquer outra característica, dada a variável de classe.

Apesar das suposições simplificadas mencionadas anteriormente, os classificadores Bayes ingênuos têm bons resultados em situações complexas do mundo real. Uma vantagem do Bayes ingênuo é que ele requer apenas uma pequena quantidade de dados de treinamento para estimar os parâmetros necessários para a classificação e que o classificador pode ser treinado de forma incremental.

Naive Bayes é um modelo de probabilidade condicional: dada uma instância de problema a ser classificada, representada por um vetor x= (x 1 ,…, x n ) representando algumas n características (variáveis ​​independentes), ele atribui a esta instância probabilidades para cada um dos K ​​resultados ou classes possíveis.

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

O problema com a formulação acima é que se o número de características n for grande ou se uma característica puder assumir um grande número de valores, então basear tal modelo em tabelas de probabilidade é inviável. Portanto, reformulamos o modelo para torná-lo mais simples. Usando o teorema de Bayes, a probabilidade condicional pode ser decomposta como -

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

Isso significa que, sob as premissas de independência acima, a distribuição condicional sobre a variável de classe C é -

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

onde a evidência Z = p (x) é um fator de escala dependente apenas de x 1 ,…, x n , que é uma constante se os valores das variáveis ​​de recurso forem conhecidos. Uma regra comum é escolher a hipótese mais provável; isso é conhecido como a regra de decisão máxima a posteriori ou MAP. O classificador correspondente, um classificador Bayes, é a função que atribui um rótulo de classe $ \ hat {y} = C_k $ para algum k da seguinte maneira -

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

Implementar o algoritmo em R é um processo direto. O exemplo a seguir demonstra como treinar um classificador Naive Bayes e usá-lo para predição em um problema de filtragem de spam.

O seguinte script está disponível no bda/part3/naive_bayes/naive_bayes.R Arquivo.

# 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 no resultado, a precisão do modelo Naive Bayes é de 72%. Isso significa que o modelo classifica corretamente 72% das instâncias.