Phân tích dữ liệu lớn - Bộ phân loại Naive Bayes
Naive Bayes là một kỹ thuật xác suất để xây dựng bộ phân loại. Giả định đặc trưng của trình phân loại Bayes ngây thơ là xem xét rằng giá trị của một đối tượng cụ thể là độc lập với giá trị của bất kỳ đối tượng địa lý nào khác, với biến lớp.
Bất chấp các giả định đơn giản hóa quá mức đã đề cập trước đây, các bộ phân loại Bayes ngây thơ có kết quả tốt trong các tình huống thực tế phức tạp. Một lợi thế của Bayes ngây thơ là nó chỉ yêu cầu một lượng nhỏ dữ liệu huấn luyện để ước tính các tham số cần thiết cho việc phân loại và bộ phân loại có thể được huấn luyện tăng dần.
Naive Bayes là một mô hình xác suất có điều kiện: đưa ra một trường hợp vấn đề được phân loại, được biểu diễn bằng một vectơ x= (x 1 ,…, x n ) đại diện cho một số đặc điểm n (biến độc lập), nó gán cho xác suất trường hợp này cho mỗi K kết quả hoặc lớp có thể có.
$$ p (C_k | x_1, ....., x_n) $$
Vấn đề với công thức trên là nếu số lượng đặc trưng n lớn hoặc nếu một đối tượng có thể nhận một số lượng lớn các giá trị, thì việc dựa vào mô hình như vậy trên các bảng xác suất là không khả thi. Do đó, chúng tôi định dạng lại mô hình để làm cho nó đơn giản hơn. Sử dụng định lý Bayes, xác suất có điều kiện có thể được phân tách thành:
$$ p (C_k | x) = \ frac {p (C_k) p (x | C_k)} {p (x)} $$
Điều này có nghĩa là theo các giả định về tính độc lập ở trên, phân phối có điều kiện trên biến lớp C là:
$$ p (C_k | x_1, ....., x_n) \: = \: \ frac {1} {Z} p (C_k) \ prod_ {i = 1} ^ {n} p (x_i | C_k) $$
trong đó bằng chứng Z = p (x) là hệ số tỷ lệ chỉ phụ thuộc vào x 1 ,…, x n , đó là một hằng số nếu giá trị của các biến đặc trưng được biết. Một nguyên tắc phổ biến là chọn giả thuyết có khả năng xảy ra nhất; đây được gọi là quy tắc quyết định posteriori hoặc MAP tối đa. Bộ phân loại tương ứng, một bộ phân loại Bayes, là hàm gán nhãn lớp $ \ hat {y} = C_k $ cho một số k như sau:
$$ \ hat {y} = argmax \: p (C_k) \ prod_ {i = 1} ^ {n} p (x_i | C_k) $$
Thực hiện thuật toán trong R là một quá trình đơn giản. Ví dụ sau minh họa cách huấn luyện bộ phân loại Naive Bayes và sử dụng nó để dự đoán trong vấn đề lọc thư rác.
Tập lệnh sau có sẵn trong bda/part3/naive_bayes/naive_bayes.R tập tin.
# 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
Như chúng ta có thể thấy từ kết quả, độ chính xác của mô hình Naive Bayes là 72%. Điều này có nghĩa là mô hình phân loại chính xác 72% các trường hợp.