Аналитика больших данных - наивный байесовский классификатор

Наивный Байес - вероятностный метод построения классификаторов. Характерное допущение наивного байесовского классификатора состоит в том, чтобы считать, что значение конкретной характеристики не зависит от значения любой другой характеристики с учетом переменной класса.

Несмотря на излишне упрощенные предположения, упомянутые ранее, наивные байесовские классификаторы дают хорошие результаты в сложных реальных ситуациях. Преимущество наивного байесовского метода состоит в том, что для оценки параметров, необходимых для классификации, требуется лишь небольшой объем обучающих данных, а также возможность постепенного обучения классификатора.

Наивный байесовский метод - это модель с условной вероятностью: задан экземпляр проблемы, который необходимо классифицировать, представленный вектором x= (x 1 ,…, x n ), представляющий некоторые n характеристик (независимых переменных), он присваивает этому экземпляру вероятности для каждого из K возможных результатов или классов.

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

Проблема с приведенной выше формулировкой заключается в том, что если количество признаков n велико или если признак может принимать большое количество значений, то основывать такую ​​модель на таблицах вероятности невозможно. Поэтому мы переформулируем модель, чтобы сделать ее проще. Используя теорему Байеса, условную вероятность можно разложить как -

$$ p (C_k | x) = \ гидроразрыва {p (C_k) p (x | C_k)} {p (x)} $$

Это означает, что при сделанных выше предположениях о независимости условное распределение по переменной класса C равно -

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

где свидетельство Z = p (x) - коэффициент масштабирования, зависящий только от x 1 ,…, x n , который является константой, если известны значения переменных признаков. Одно из общих правил - выбирать наиболее вероятную гипотезу; это известно как максимальное апостериорное правило или правило принятия решения MAP. Соответствующий классификатор, байесовский классификатор, является функцией, которая присваивает метку класса $ \ hat {y} = C_k $ для некоторого k следующим образом:

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

Реализация алгоритма на R - простой процесс. В следующем примере показано, как обучить наивный байесовский классификатор и использовать его для прогнозирования в задаче фильтрации спама.

Следующий сценарий доступен в bda/part3/naive_bayes/naive_bayes.R файл.

# 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

Как видно из результата, точность модели Наивного Байеса составляет 72%. Это означает, что модель правильно классифицирует 72% экземпляров.