Büyük Veri Analitiği - Naive Bayes Sınıflandırıcı
Naive Bayes, sınıflandırıcılar oluşturmak için olasılıklı bir tekniktir. Saf Bayes sınıflandırıcısının karakteristik varsayımı, belirli bir özelliğin değerinin, sınıf değişkeni göz önüne alındığında herhangi bir diğer özelliğin değerinden bağımsız olduğunu düşünmektir.
Daha önce bahsedilen aşırı basitleştirilmiş varsayımlara rağmen, saf Bayes sınıflandırıcıları karmaşık gerçek dünya durumlarında iyi sonuçlara sahiptir. Saf Bayes'in bir avantajı, sınıflandırma için gerekli parametreleri tahmin etmek için yalnızca az miktarda eğitim verisi gerektirmesi ve sınıflandırıcının aşamalı olarak eğitilebilmesidir.
Naive Bayes, bir koşullu olasılık modelidir: sınıflandırılacak bir problem örneği verildiğinde, bir vektörle temsil edilir x= (x 1 ,…, x n ) bazı n özelliği temsil eder (bağımsız değişkenler), bu örneğe K olası sonuç veya sınıfların her biri için olasılıkları atar.
$$ p (C_k | x_1, ....., x_n) $$
Yukarıdaki formülasyondaki sorun, özelliklerin sayısı n büyükse veya bir özellik çok sayıda değer alabiliyorsa, böyle bir modeli olasılık tablolarına dayandırmanın mümkün olmamasıdır. Bu nedenle modeli daha basit hale getirmek için yeniden formüle ediyoruz. Bayes teoremini kullanarak, koşullu olasılık şu şekilde ayrıştırılabilir:
$$ p (C_k | x) = \ frac {p (C_k) p (x | C_k)} {p (x)} $$
Bu, yukarıdaki bağımsızlık varsayımları altında, sınıf değişkeni C üzerindeki koşullu dağılımın -
$$ p (C_k | x_1, ....., x_n) \: = \: \ frac {1} {Z} p (C_k) \ prod_ {i = 1} ^ {n} p (x_i | C_k) $$
kanıt nerede Z = p (x) sadece x 1 ,…, x n'ye bağlı bir ölçekleme faktörüdür , bu, özellik değişkenlerinin değerleri biliniyorsa bir sabittir. Ortak bir kural, en olası olan hipotezi seçmektir; bu maksimum a posteriori veya MAP karar kuralı olarak bilinir. Karşılık gelen sınıflandırıcı, bir Bayes sınıflandırıcısı, aşağıdaki gibi bir k için $ \ hat {y} = C_k $ sınıf etiketi atayan işlevdir -
$$ \ hat {y} = argmax \: p (C_k) \ prod_ {i = 1} ^ {n} p (x_i | C_k) $$
Algoritmanın R'de uygulanması basit bir süreçtir. Aşağıdaki örnek, bir Naive Bayes sınıflandırıcısının nasıl eğitildiğini ve bir spam filtreleme probleminde tahmin için nasıl kullanıldığını gösterir.
Aşağıdaki komut dosyası, bda/part3/naive_bayes/naive_bayes.R dosya.
# 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
Sonuçtan da görebileceğimiz gibi, Naive Bayes modelinin doğruluğu% 72'dir. Bu, modelin örneklerin% 72'sini doğru şekilde sınıflandırdığı anlamına gelir.