Наивный байесовский метод — вероятностный метод построения классификаторов. Характерное предположение наивного байесовского классификатора состоит в том, чтобы считать, что значение определенного признака не зависит от значения любого другого признака, учитывая переменную класса.
Несмотря на упрощенные предположения, упомянутые ранее, наивные байесовские классификаторы дают хорошие результаты в сложных реальных ситуациях. Преимущество наивного байесовского подхода заключается в том, что для оценки параметров, необходимых для классификации, требуется лишь небольшой объем обучающих данных и что классификатор можно обучать постепенно.
Наивный байесовский алгоритм — это условная вероятностная модель: учитывая классифицируемый экземпляр задачи, представленный вектором x = (x 1 ,…, x n ), представляющим некоторые n признаков (независимых переменных), он присваивает этому экземпляру вероятности для каждого из K возможные результаты или занятия.
p(Ck|x1,.....,xn)
Проблема с приведенной выше формулировкой состоит в том, что если число признаков n велико или если признак может принимать большое количество значений, то базирование такой модели на таблицах вероятностей невозможно. Поэтому мы переформулируем модель, чтобы сделать ее проще. Используя теорему Байеса, условная вероятность может быть разложена как —
p(Ck|x)= fracp(Ck)p(x|Ck)p(x)
Это означает, что при указанных выше предположениях о независимости условное распределение по переменной класса C равно:
p(Ck|x1,.....,xn)= frac1Zp(Ck) prodni=1p(xi|Ck)
где доказательство Z = p ( x ) — это масштабный коэффициент, зависящий только от x 1 ,…, x n , то есть константа, если известны значения характерных переменных. Одно общее правило — выбрать наиболее вероятную гипотезу; это называется максимальным апостериорным или MAP-правилом принятия решения. Соответствующий классификатор, классификатор Байеса, является функцией, которая присваивает метку класса haty=Ck для некоторого k следующим образом:
haty=argmaxp(Ck) prodni=1p(xi|Ck)
Реализация алгоритма в 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% экземпляров.