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.