- vừa được xem lúc

Tất tần tật về Naive Bayes

0 0 2

Người đăng: Huey Anthony Disward

Theo Viblo Asia

1. Naive Bayes

1.1 Khái niệm

Naive Bayes là thuật toán học máy có giám sát sử dụng cho các bài toán phân loại để tìm xác suất. Ý tưởng chính là sử dụng định lý Bayes để phân loại dữ liệu dựa trên xác suất của các lớp khác nhau với các đặc trưng của dữ liệu.

  • Naive Bayes Classifier là mô hình phân loại xác suất đơn giản, có rất ít tham số, dự đoán nhanh.
  • Giả định các đặc trưng là độc lập với nhau (independent features).
  • Ứng dụng: lọc thư rác, phân tích cảm xúc, phân loại văn bản...

Ví dụ tập dữ liệu thời tiết ảnh hưởng đến quyết định đi chơi golf:

Outlook Temperature Humidity Windy PlayGolf
Rainy Hot High False No
Rainy Hot High True No
Overcast Hot High False Yes
Sunny Mild High False Yes
Sunny Cool Normal False Yes
Sunny Cool Normal True No
Overcast Cool Normal True Yes
Rainy Mild High False No
Rainy Cool Normal False Yes
Sunny Mild Normal False Yes
Rainy Mild Normal True Yes
Overcast Mild High True Yes
Overcast Hot Normal False Yes
Sunny Mild High True No

Giả định Naive Bayes:

  • Tính độc lập giữa các đặc trưng: Mỗi đặc trưng không ảnh hưởng đến nhau.
  • Đặc trưng liên tục có phân phối chuẩn (Gaussian): Nếu đặc trưng liên tục.
  • Đặc trưng rời rạc có phân phối đa thức (Multinomial): Nếu đặc trưng rời rạc.
  • Các đặc trưng quan trọng như nhau.
  • Không có dữ liệu bị thiếu.

Định lý Bayes đối với Naive Bayes

P(AB)=P(BA)P(A)P(B)(P(B)0)P(A|B) = \frac{P(B|A) P(A)}{P(B)} \quad (P(B) \neq 0)

  • P(AB)P(A|B): Xác suất hậu nghiệm (posterior) của AA khi biết BB
  • P(BA)P(B|A): Xác suất khả năng (likelihood) của BB khi biết AA
  • P(A)P(A): Xác suất tiên nghiệm (prior) của AA
  • P(B)P(B): Xác suất của BB

Áp dụng cho dữ liệu có đặc trưng X=(x1,x2,...,xn)X = (x_1, x_2, ..., x_n):

P(yX)=P(Xy)P(y)P(X)P(y|X) = \frac{P(X|y) P(y)}{P(X)}

  • P(yX)P(y|X): Xác suất thuộc lớp yy khi biết đặc trưng XX.
  • P(Xy)P(X|y): Xác suất XX xuất hiện nếu biết lớp yy.
  • P(y)P(y): Xác suất tiên nghiệm lớp yy.
  • P(X)P(X): Xác suất của XX trong toàn bộ tập dữ liệu.

Với giả định độc lập:

P(yx1,...,xn)=P(y)i=1nP(xiy)P(x1)P(xn)P(y|x_1, ..., x_n) = \frac{P(y) \prod_{i=1}^n P(x_i|y)}{P(x_1)\cdots P(x_n)}

Vì mẫu số là hằng số với mỗi đầu vào, chỉ cần so sánh tử số:

P(yx1,...,xn)P(y)i=1nP(xiy)P(y|x_1,...,x_n) \propto P(y) \prod_{i=1}^n P(x_i|y)

Dự đoán lớp:

y=argmaxy P(y)i=1nP(xiy)y = \arg\max_y \ P(y) \prod_{i=1}^n P(x_i|y)

Ví dụ minh họa: Dự đoán email spam

  • AA: Email là spam
  • BB: Email có chứa “khuyến mãi”

P(A)=0.3P(BA)=0.8P(B)=0.4P(A) = 0.3 \\ P(B|A) = 0.8 \\ P(B) = 0.4

P(AB)=0.8×0.30.4=0.6P(A|B) = \frac{0.8 \times 0.3}{0.4} = 0.6

=> 60% khả năng email chứa “khuyến mãi” là spam.

Ví dụ với thời tiết: Dự đoán (Sunny, Hot, Normal, False)

P(Notoday)=P(SunnyNo)P(HotNo)P(NormalNo)P(NoWindNo)P(No)P(today)P(\text{No}|today) = \frac{P(\text{Sunny}|\text{No}) \cdot P(\text{Hot}|\text{No}) \cdot P(\text{Normal}|\text{No}) \cdot P(\text{NoWind}|\text{No}) \cdot P(\text{No})}{P(today)}

P(Yestoday)=P(SunnyYes)P(HotYes)P(NormalYes)P(NoWindYes)P(Yes)P(today)P(\text{Yes}|today) = \frac{P(\text{Sunny}|\text{Yes}) \cdot P(\text{Hot}|\text{Yes}) \cdot P(\text{Normal}|\text{Yes}) \cdot P(\text{NoWind}|\text{Yes}) \cdot P(\text{Yes})}{P(today)}

So sánh tử số để chọn lớp.

Đặc trưng liên tục dùng phân phối chuẩn (Gaussian):

P(xiy)=12πσy2exp((xiμy)22σy2)P(x_i|y) = \frac{1}{\sqrt{2\pi \sigma_y^2}} \exp\left( -\frac{(x_i - \mu_y)^2}{2\sigma_y^2} \right)


1.2 Naive Bayes với NLP

  • P(yX)=P(Xy)P(y)P(X)P(y|X) = \frac{P(X|y) P(y)}{P(X)}
  • X=(w1,w2,...,wn)X = (w_1, w_2, ..., w_n) là các từ trong văn bản.

Với giả định độc lập:

P(Xy)=P(w1y)P(w2y)P(wny)P(X|y) = P(w_1|y) P(w_2|y) \cdots P(w_n|y)

Sử dụng Laplace smoothing:

P(wy)=Soˆˊ laˆˋn w xuaˆˊt hiện trong y+1Tổng soˆˊ từ trong y+VP(w|y) = \frac{\text{Số lần w xuất hiện trong y} + 1}{\text{Tổng số từ trong y} + |V|}

  • V|V| là kích thước tập từ vựng.

Ví dụ:

Email Nhãn
Mua ngay, giảm giá 50% Spam
Sản phẩm tốt, miễn phí Spam
Gặp bạn lúc 7 giờ tối Not spam
Chào bạn, tài liệu đính kèm Not spam

Tính P("Mieˆ˜n phıˊ"Spam)P(\text{"Miễn phí"}|\text{Spam})P("Mieˆ˜n phıˊ"Not spam)P(\text{"Miễn phí"}|\text{Not spam}) với Laplace.


1.3 Naive Bayes cho phân loại spam email

  • Khi tin nhắn mới tới, xác suất:

P(Spamw1,...,wn)=P(Spam)P(w1,...,wnSpam)P(w1,...,wn)P(\text{Spam}|w_1, ..., w_n) = \frac{P(\text{Spam}) P(w_1,...,w_n|\text{Spam})}{P(w_1,...,w_n)}

P(Hamw1,...,wn)=P(Ham)P(w1,...,wnHam)P(w1,...,wn)P(\text{Ham}|w_1, ..., w_n) = \frac{P(\text{Ham}) P(w_1,...,w_n|\text{Ham})}{P(w_1,...,w_n)}

So sánh tử số để phân loại.

  • Laplace smoothing:

P(wiSpam)=Soˆˊ laˆˋwi xuaˆˊt hiện trong taˆˊt cả email Spam+1Tổng soˆˊ từ trong email Spam+VP(w_i|\text{Spam}) = \frac{\text{Số lần } w_i \text{ xuất hiện trong tất cả email Spam} + 1}{\text{Tổng số từ trong email Spam} + V}

  • VV: Tổng số từ duy nhất trong tập dữ liệu.

1.4 Các thao tác xử lý dữ liệu trước khi đưa vào mô hình

  • Chuẩn hóa: Loại bỏ khoảng trắng, loại bỏ email trống.
  • Loại bỏ dấu câu, ký tự đặc biệt (trừ các ký tự có ý nghĩa như $).
  • Chuyển về chữ thường (lowercase).
  • Loại bỏ từ dừng (stopwords).
  • Stemming/Lemmatization.
  • Thay thế URL, số thành token đặc biệt.
  • Thay thế từ viết tắt, lóng thành từ đầy đủ.
  • Dùng TF-IDF để giảm trọng số từ quá phổ biến.

TF-IDF:

  • TF (Term Frequency): Tần suất từ trong văn bản.
  • DF (Document Frequency): Số tài liệu chứa từ đó.
  • IDF:

IDF(w)=log(NDF(w))IDF(w) = \log \left( \frac{N}{DF(w)} \right)

  • TF-IDF:

TFIDF(w)=TF(w)IDF(w)TFIDF(w) = TF(w) \cdot IDF(w)

Từ xuất hiện ở mọi văn bản có IDF = 0 (không mang giá trị phân loại).


1.5 Cân bằng dữ liệu

Dữ liệu phân loại thường mất cân bằng, cần cân bằng lại để mô hình học tốt hơn.

1.5.1 Undersampling (Giảm dữ liệu lớp đa số)

  • Nmajority=NminorityN_{majority}' = N_{minority} hoặc Nmajority=αNminorityN_{majority}' = \alpha N_{minority} với 0.8α10.8 \leq \alpha \leq 1
  • Ưu: giảm thời gian huấn luyện. Nhược: mất dữ liệu quan trọng.

1.5.2 Oversampling (Tăng dữ liệu lớp thiểu số)

  • Nminority=NmajorityN_{minority}' = N_{majority} hoặc Nminority=αNmajorityN_{minority}' = \alpha N_{majority}
  • Phương pháp: Random oversampling (sao chép ngẫu nhiên mẫu lớp thiểu số)
  • Ưu: Không mất dữ liệu. Nhược: dễ overfitting.

1.5.3 SMOTE (Synthetic Minority Over-Sampling Technique)

  • Tạo dữ liệu mới cho lớp thiểu số, không lặp lại dữ liệu cũ.
  • Ý tưởng:
    1. Chọn một mẫu thiểu số xminx_{min}
    2. Chọn kk hàng xóm gần nhất xneighborx_{neighbor}
    3. Tạo điểm mới:

      xnew=xmin+λ(xneighborxmin)x_{new} = x_{min} + \lambda (x_{neighbor} - x_{min})

      với λU[0,1]\lambda \sim U[0,1]
  • Ưu: tạo dữ liệu mới không lặp lại. Nhược: giảm đa dạng nếu chọn kk không hợp lý.

Ví dụ:

ID Feature 1 (free) Feature 2 (win)
Spam A 0.2 0.7
Spam B 0.3 0.8
Spam C 0.25 0.75

Giả sử chọn Spam A, hàng xóm gần nhất là Spam C, λ=0.5\lambda = 0.5:

  • Feature 1: 0.2+0.5×(0.250.2)=0.2250.2 + 0.5 \times (0.25 - 0.2) = 0.225
  • Feature 2: 0.7+0.5×(0.750.7)=0.7250.7 + 0.5 \times (0.75 - 0.7) = 0.725

Khi áp dụng SMOTE cho Naive Bayes, cần đảm bảo các giá trị 0\geq 0 hoặc chuẩn hóa lại.


Bình luận

Bài viết tương tự

- vừa được xem lúc

Hành trình AI của một sinh viên tồi

Mình ngồi gõ những dòng này vào lúc 2h sáng (chính xác là 2h 2 phút), quả là một đêm khó ngủ. Có lẽ vì lúc chiều đã uống cốc nâu đá mà giờ mắt mình tỉnh như sáo, cũng có thể là vì những trăn trở về lý thuyết chồng chất ánh xạ mình đọc ban sáng khiến không tài nào chợp mắt được hoặc cũng có thể do mì

0 0 155

- vừa được xem lúc

[Deep Learning] Key Information Extraction from document using Graph Convolution Network - Bài toán trích rút thông tin từ hóa đơn với Graph Convolution Network

Các nội dung sẽ được đề cập trong bài blog lần này. . Tổng quan về GNN, GCN. Bài toán Key Information Extraction, trích rút thông tin trong văn bản từ ảnh.

0 0 232

- vừa được xem lúc

Tìm hiểu về YOLO trong bài toán real-time object detection

1.Yolo là gì. . Họ các mô hình RCNN ( Region-Based Convolutional Neural Networks) để giải quyết các bài toán về định vị và nhận diện vật thể.

0 0 299

- vừa được xem lúc

Encoding categorical features in Machine learning

Khi tiếp cận với một bài toán machine learning, khả năng cao là chúng ta sẽ phải đối mặt với dữ liệu dạng phân loại (categorical data). Khác với các dữ liệu dạng số, máy tính sẽ không thể hiểu và làm việc trực tiếp với categorical variable.

0 0 266

- vừa được xem lúc

TF Lite with Android Mobile

Như các bạn đã biết việc đưa ứng dụng đến với người sử dụng thực tế là một thành công lớn trong Machine Learning.Việc làm AI nó không chỉ dừng lại ở mức nghiên cứu, tìm ra giải pháp, chứng minh một giải pháp mới,... mà quan trọng là đưa được những nghiên cứu đó vào ứng dụng thực tế, được sử dụng để

0 0 79

- vừa được xem lúc

Xây dựng hệ thống Real-time Multi-person Tracking với YOLOv3 và DeepSORT

Trong bài này chúng ta sẽ xây dựng một hệ thống sử dụng YOLOv3 kết hợp với DeepSORT để tracking được các đối tượng trên camera, YOLO là một thuật toán deep learning ra đời vào tháng 5 năm 2016 và nó nhanh chóng trở nên phổ biến vì nó quá nhanh so với thuật toán deep learning trước đó, sử dụng YOLO t

0 0 325