Contents
Giới thiệu
Thuật toán phân lớp là một phương pháp quan trọng trong Machine Learning. Trong bài viết này, chúng ta sẽ tìm hiểu về một thuật toán phân lớp mang lại hiệu quả tốt trong các bài toán dự đoán. Đó chính là Naive Bayes – một thuật toán phân loại dựa trên lý thuyết xác suất.
Lý thuyết về Naive Bayes
Naive Bayes Classification (NBC) là một thuật toán phân loại dựa trên tính toán xác suất áp dụng định lý Bayes. Thuật toán này thuộc nhóm Supervised Learning (Học có giám sát).
Bạn đang xem: Phân lớp với Navie Bayes Classification – Mô hình và ứng dụng
Theo định lý Bayes, ta có công thức tính xác suất như sau:
Định lý Bayes
Xem thêm : Code game rắn săn mồi trên console bằng C++
Công thức trên cho phép tính toán xác suất của một sự kiện chưa biết dựa trên các xác suất có điều kiện khác. Thuật toán Naive Bayes dựa trên việc tính toán các xác suất có điều kiện này.
Naive Bayes Classifier
Cách xác định thành phần (class) của một dữ liệu dựa trên giả thiết các thành phần độc lập với nhau được gọi là Naive Bayes Classifier. Mặc dù thực tế không phải lúc nào cũng có dữ liệu hoàn toàn độc lập, giả thiết này giúp tính toán trở nên đơn giản và training data nhanh chóng.
Ứng dụng trong phân loại text
Một trong các bài toán phổ biến khi sử dụng NBC là phân loại văn bản. Trong bài toán này, mỗi văn bản được biểu diễn dưới dạng bag of words, tức là chỉ xem xét số từ và tần suất xuất hiện của chúng trong văn bản, bỏ qua thứ tự các từ.
Mô hình Multinomial
Có hai mô hình NBC thường được sử dụng: mô hình Bernoulli và mô hình Multinomial. Trong bài toán phân loại văn bản, chúng ta sử dụng mô hình Multinomial.
Mô hình Multinomial chủ yếu được sử dụng trong phân loại văn bản khi feature vectors được tính bằng Bags of Words. Mỗi văn bản được biểu diễn bởi một vector có độ dài d, tương ứng với số từ trong từ điển. Giá trị của thành phần thứ i trong mỗi vector là số lần từ thứ i xuất hiện trong văn bản đó.
Tính xác suất sử dụng Laplace Smoothing
Để tính xác suất từ xuất hiện trong văn bản, chúng ta có công thức sau:
Công thức tính xác suất từ xuất hiện trong văn bản
Xem thêm : Nghiên cứu trao đổi
Tuy nhiên, công thức này gặp phải một vấn đề khi từ không xuất hiện trong văn bản, tức Ni=0. Điều này dẫn đến P(xi|y)=0.
Để khắc phục vấn đề này, người ta sử dụng kỹ thuật gọi là Laplace Smoothing bằng cách cộng thêm α vào cả tử và mẫu để giá trị luôn khác 0.
Sử dụng NBC trong Python
Dưới đây là ví dụ cách sử dụng NBC trong Python để phân loại email vào hai nhãn “spam” và “non-spam”.
from sklearn.naive_bayes import MultinomialNB
import numpy as np
e1 = [1, 2, 1, 0, 1, 0, 0]
e2 = [0, 2, 0, 0, 1, 1, 1]
e3 = [1, 0, 1, 1, 0, 2, 0]
train_data = np.array([e1, e2, e3])
label = np.array(['N', 'N', 'S'])
e4 = np.array([[1, 0, 0, 0, 0, 0, 1]])
clf1 = MultinomialNB(alpha=1)
clf1.fit(train_data, label)
print(clf1.predict_proba(e4)) #Xác suất của e4 thuộc từng nhãn
print(str(clf1.predict(e4)[0])) #Dự đoán nhãn của e4
Kết luận
Naive Bayes là một thuật toán phân loại mạnh mẽ và dễ dùng, đặc biệt phù hợp với các bài toán phân loại văn bản. Thông qua ví dụ trên, chúng ta có thể thấy cách sử dụng NBC trong Python rất đơn giản và hiệu quả.
Hy vọng bài viết đã giúp bạn hiểu về thuật toán Naive Bayes và cách áp dụng nó vào các bài toán phân loại khác nhau. Hãy thử áp dụng mã nguồn trên để xem kết quả trong các trường hợp khác nhau.
READ MORE:
Tài liệu tham khảo
- https://machinelearningcoban.com/2017/08/08/nbc/
- https://en.wikipedia.org/wiki/Naive_Bayes_classifier
- https://scikit-learn.org/stable/modules/naive_bayes.html
Nguồn: https://ispacedanang.edu.vn
Danh mục: Học tập