BÁO CÁO
BÀI TẬP LỚN MÔN HỌC
HỌC PHẦN: KHAI PHÁ DỮ LIỆU VÀ ỨNG DỤNG
ĐỀ TÀI:
NGHIÊN CỨU, TÌM HIỂU ỨNG DỤNG THỰC
TẾ CỦA THUẬT TOÁN NAÏVE BAYES
TP. HỒ CHÍ MINH, THÁNG 10 NĂM 2019
MỤC LỤC
CƠ SỞ LÝ THUYẾT ................................................................................................................................3
I.
1.1.
Công thức Bayes ................................................................................................................................3
1.2.
Naïve Bayes Classifier .......................................................................................................................3
1.3.
Mô hình Gaussian Naïve Bayes ........................................................................................................5
1.4.
Mô hình Multinomial Naïve Bayes (MultinomialNB) ....................................................................5
1.5.
Mô hình Bernoulli Naïve Bayes (BernoulliNB)...............................................................................6
ỨNG DỤNG CỦA THUẬT TOÁN......................................................................................................7
II.
2.1.
2.1.1
Mô tả dữ liệu ..............................................................................................................................7
2.1.2
Cài đặt thuật toán ......................................................................................................................8
2.1.3
Nhận xét kết quả ..................................................................................................................... 10
2.2.
III.
Bài toán phân loại thư rác ................................................................................................................7
Bài toán chuẩn đoán bệnh tiểu đường .......................................................................................... 11
2.2.1
Mô tả dữ liệu và yêu cầu ........................................................................................................ 11
2.2.2
Cài đặt thuật toán ................................................................................................................... 12
2.2.3
Nhận xét kết quả ..................................................................................................................... 14
KẾT LUẬN ......................................................................................................................................... 15
1.
Ưu điểm ............................................................................................................................................... 15
2.
Nhược điểm ......................................................................................................................................... 15
TÀI LIỆU THAM KHẢO ................................................................................................................................ 16
2|Page
I.
CƠ SỞ LÝ THUYẾT
1.1.Công thức Bayes
- Ví dụ, một quả có thể được coi là một quả cam nếu nó có màu cam, tròn và đường
kính khoảng 3 inch. Ngay cả khi các tính năng này phụ thuộc vào nhau hoặc dựa
trên sự tồn tại của các tính năng khác, một bộ phân loại Naive Bayes sẽ xem xét
tất cả các đặc điểm này để đóng góp độc lập vào xác suất rằng loại quả này là
một quả cam.
- Mô hình Naive Bayesian rất dễ thực hiện và đặc biệt hữu ích cho các tập dữ liệu
rất lớn. Ngoài việc đơn giản Naive Bayes còn được biết đến là vượt trội hơn cả
các phương pháp phân loại rất tiên tiến.
Công thức Naïve Bayes được định nghĩa: P(B|A) =
𝑃(𝐵).𝑃(𝐴|𝐵)
𝑃(𝐴)
(0)
P(B|A): là xác xuất của lớp mục tiêu được dự đoán.
P(B): xác xuất của lớp trước.
P(A|B): khả năng xác xuất lớp dự đoán đưa ra.
P(A): là xác xuất dự đoán trước.
1.2. Naïve Bayes Classifier
Xét bài toán classification với C classes 1,2, …, C1, 2, …, C. Giả sử có một điểm dữ
liệu x∈Rd Hãy tính xác suất để điểm dữ liệu này rơi vào class c. Nói cách khác, hãy
tính:
p(y=c|x)
(1)
hoặc viết gọn thành p(c|x).
- Nói cách khác là tính xác suất để đầu ra là class c biết rằng đầu vào là vector x.
- Biểu thức này, nếu tính được, sẽ giúp chúng ta xác định được xác suất để điểm
dữ liệu rơi vào mỗi class. Từ đó có thể giúp xác định class của điểm dữ liệu đó
bằng cách chọn ra class có xác suất cao nhất:
Từ đó có thể giúp xác định class của điểm dữ liệu đó bằng cách chọn ra class có xác
suất cao nhất:
𝑐 = arg 𝑚𝑎𝑥𝑐 𝑝(𝑐|𝑥)
(2)
𝑐 ∈ {1, … , 𝑐}
Áp dụng công thức Bayes từ (2) ta được: 𝑐 = arg 𝑚𝑎𝑥𝑐
𝑝(𝑥 |𝑐 ).𝑝(𝑐)
𝑝(𝑥)
(3)
3|Page
Vì mẫu số p(x) không phụ thuộc vào c nên: 𝑐 = arg 𝑚𝑎𝑥𝑐 𝑝(𝑥|𝑐). 𝑝(𝑐)
(4)
- Tiếp tục xét biểu thức (4) có thể được hiểu là xác suất để một điểm rơi vào class c.
Giá trị này có thể được tính bằng cách lấy tỉ lệ số điểm dữ liệu trong tập training
rơi vào class này chia cho tổng số lượng dữ liệu trong tập traing.
- Thành phần còn lại p(x|c), tức phân lớp của các điểm dữ liệu trong class c,
thường rất khó tính toán vì x là một biến ngẫu nhiên nhiều chiều, cần rất rất nhiều
dữ liệu training để có thể xây dựng được phân lớp đó. Để giúp cho việc tính toán
được đơn giản, người ta thường giả sử một cách đơn giản nhất rằng các thành
phần của biến ngẫu nhiên x là độc lập với nhau, nếu
biết c:
𝑑
𝑝(𝑥|𝑐) = 𝑝(𝑥1 , 𝑥2 , … , 𝑥𝑑 |𝑐) = ∏ 𝑝(𝑥𝑖 |𝑐)
𝑖=1
(5)
- Giả thiết các chiều của dữ liệu độc lập với nhau, nếu biết cc, là quá chặt và ít khi
tìm được dữ liệu mà các thành phần hoàn toàn độc lập với nhau. Tuy nhiên, giả
thiết này lại mang lại những kết quả tốt bất ngờ. Giả thiết về sự độc lập của các
chiều dữ liệu này được gọi là Naive Bayes. Cách xác định class của dữ liệu dựa
trên giả thiết này có tên là Naive Bayes Classifier. Do Naïve Bayes Classifier có
tính đơn giản nên có tốc độ training và test kết quả rất nhanh. Điều này mang lại
hiệu quả cao trong các bài toán có qui mô lớn (large-scale).
- Ở bước training, các phân lớp của p(c) và 𝑝(𝑥𝑖 |𝑐), i = 1,2,.., d sẽ được xác định
dựa vào training data.
- Ở bước test, với một điểm dữ liệu mới x, class𝑑 của nó sẽ đượ xác định bởi:
𝑐 = arg max = log(𝑝(𝑐)) + ∑ log(𝑝(𝑥𝑖 |𝑐))
(6)
𝑖=1
- Mặt khác có thể giả sử các thành phần trong dữ liệu là độc lập với nhau, nếu biết
class, khiến cho việc tính toán mỗi phân lớp p(𝑥𝑖 |c) trở nên cực kỳ nhanh.
- Mỗi giá trị p(c), c = 1, 2, …, C p(c), c= 1, 2, …, C có thể được xác định như là
tần suất xuất hiện của class cc trong training data.
- Naive Bayes Classifier được sử dụng hiệu quả trong nhiều bài toán thực tế, đặc
biệt là trong các bài toán về phân loại văn bản, ví dụ như lọc tin nhắn rác hay lọc
email spam, …
- Việc tính toán p(𝑥𝑖 |c) phụ thuộc vào loại dữ liệu. Gồm các phân lớp Gaussian
Naive Bayes, Complement Naïve Bayes, Multinomial Naive Bayes và Bernoulli
Naive.
4|Page
- Tuy nhiên có ba loại được sử dụng phổ biến là: Gaussian Naive Bayes,
Multinomial Naive Bayes và Bernoulli Naïve.
1.3. Mô hình Gaussian Naïve Bayes
- Mô hình này được sử dụng chủ yếu trong loại dữ liệu mà các thành phần là các
biến liên tục.
- Với mỗi chiều dữ liệu i và một class c, 𝑥𝑖 tuân theo một phân lớp chuẩn có kỳ
vọng 𝜇𝑐𝑖 và phương sai 𝜎𝑐𝑖2 :
(7)
1.4. Mô hình Multinomial Naïve Bayes (MultinomialNB)
- MultinomialNB thực hiện thuật toán Bayes cho dữ liệu phân lớp đa phương thức
và là một trong hai biến thể Naïve Bayes cổ điển được sử dụng trong phân loại
văn bản. Phân lớp được tham số hóa bởi các vectơ cho mỗi lớp, trong đó số lượng
tính năng (trong phân loại văn bản, kích thước của từ vựng) và là xác suất của
tính năng xuất hiện trong một mẫu thuộc về lớp.
- Mỗi văn bản được biểu diễn bởi một vector có độ dài d chính là số từ trong từ
điển. Giá trị của thành phần thứ i trong mỗi vector chính là số lần từ thứ i xuất
hiện trong văn bản đó.
- Khi đó, 𝑝(𝑥𝑖 |𝑐) sẽ tỉ lệ với tần suất từ thứ i hay feature thứ i theo dạng tổng quát
xuất hiện trong các văn bản của class c. Giá trị này được tính bằng:
𝑁𝑐𝑖
𝑐𝑖 = 𝑝(𝑥𝑖 |𝑐) =
𝑁𝑐
(8)
Trong đó:
o 𝑁𝑐𝑖 là tổng số lần từ thứ i xuất hiện trong các văn bản của class c, nó được tính
là tổng của tất cả các thành phần thứ i của các feature vectors ứng với các class
c.
o 𝑁𝑐 là tổng số từ (kể cả từ lặp lại) xuất hiện trong class c. Nó bằng tổng độ dài
của toàn bộ văn bản thuộc class c. 𝑁𝑐 = ∑𝑑𝑖=1 𝑁𝑐𝑖 , từ đó ∑𝑑𝑖=1 𝑐𝑖 = 1.
Hạn chế của các tính này là nếu một từ không có trong class c thì biểu thức (8)
sẽ trả về kết quả bằng 0, dẫn đến vế phải của (6) cũng bằng không làm cho kết
quả không được chính xác.
5|Page
- Để giải quyết ta dùng kỹ thuật Laplace smoothing:
𝑁𝑐𝑖 + 𝑎
𝑐𝑖 =
𝑁𝑐 + 𝑑𝛼
(9)
Với số dương α, thường bằng 1, để tránh trường hợp tử số bằng 0. Mẫu số sẽ được cộng
với 𝑑𝛼 để đảm bảo tổng xác suất ∑𝑑𝑖=1 𝑐𝑖 = 1.
1.5. Mô hình Bernoulli Naïve Bayes (BernoulliNB)
- BernoulliNB thực hiện các thuật toán đào tạo và phân loại cho dữ liệu được phân
lớp theo các bản phân lớp Bernoulli đa biến. Tức là, có thể có nhiều tính năng
nhưng mỗi tính năng được coi là một biến có giá trị nhị phân (Bernoulli,
boolean). Mô hình này được áp dụng cho các loại dữ liệu mà mỗi thành phần là
một giá trị binary – bằng 0 hoặc 1, nếu trao bất kỳ loại dữ liệu nào khác thì
BernoulliNB có thể nhị phân hóa đầu vào của nó (tùy thuộc vào tham số
binarize).
Ví dụ: cũng với loại văn bản nhưng thay vì đếm tổng số lần xuất hiện của 1 từ trong
văn bản, ta chỉ cần quan tâm từ đó có xuất hiện hay không.
Khi đó, ta tìm 𝑝(𝑥𝑖 |𝑐) bằng cách:
𝑝(𝑥𝑖 |𝑐) = 𝑝(𝑥𝑖 |𝑐)xi (1 − 𝑝(𝑥𝑖 |𝑐)1−xi )
(10)
Với 𝑝(𝑥𝑖 |𝑐) có thể được hiểu là xác xuất từ thứ I xuất hiện trong các văn bản
của class c.
6|Page
II.
ỨNG DỤNG CỦA THUẬT TOÁN
2.1. Bài toán phân loại thư rác
2.1.1 Mô tả dữ liệu
- Yêu cầu của bài toán là phân loại các thư thành SPAM hay NON-SPAM, hiệu
quả phân loại phải khả quan và giảm thiểu lỗi phân loại sai NON-SPAM thành
SPAM.
- Phân loại thư rác là bài toán phân loại văn bản với hai lớp là SPAM và NONSPAM.
- Dữ liệu trong ví dụ này được lấy trong
- Tập dữ liệu này bao gồm tổng cộng 960 emails tiếng Anh, được tách thành tập
training và test theo tỉ lệ 700:260, 50% trong mỗi tập là các spam emails.
- Để cho bài toán được đơn giản hơn thì dữ liệu đã được xử lý gồm các files:
test-features.txt
train-features-50.txt
train-features-100.txt
train-features-400.txt
train-features.txt
test-labels.txt
train-labels-50.txt
train-labels-100.txt
train-labels-400.txt
train-labels.txt
tương ứng với các file chứa dữ liệu của tập training và tập test. File train-features50.txt chứa dữ liệu của tập training thu gọn với chỉ có tổng cộng 50 training emails.
- Mỗi file *labels*.txt chứa nhiều dòng, mỗi dòng là một ký tự 0 hoặc 1 thể hiện
email là non-spam hoặc spam.
- Mỗi file *features*.txt chứa nhiều dòng, mỗi dòng có 3 số, ví dụ:
1 564 1
1 19 2
- Trong đó số đầu tiên là chỉ số của email, bắt đầu từ 1; số thứ hai là thứ tự của từ trong
từ điển (tổng cộng 2500 từ); số thứ ba là số lượng của từ đó trong email đang xét.
Dòng đầu tiên nói rằng trong email thứ nhất, từ thứ 564 trong từ điển xuất hiện 1 lần.
Cách lưu dữ liệu như thế này giúp tiết kiệm bộ nhớ vì 1 email thường không chứa
7|Page
hết tất cả các từ trong từ điển mà chỉ chứa một lượng nhỏ, ta chỉ cần lưu các giá trị
khác không.
- Nếu ta biểu diễn feature vector của mỗi email là một vector hàng có độ dài bằng độ
dài từ điển (2500) thì dòng thứ nhất nói rằng thành phần thứ 564 của vector này bằng
1. Tương tự, thành phần thứ 19 của vector này bằng 1. Nếu không xuất hiện, các
thành phần khác được mặc định bằng 0.
- Mô hình phân loại thư rác có thể được biểu diễn như sau.
Tập dữ liệu thư đến
Phân loại thư với Naïve Bayes
Spam
Non-Spam
Hình 2.1 Mô hình phân loại thư
rác
2.1.2 Cài đặt thuật toán
- Thuật toán bắt đầu bằng việc học nội dung dữ liệu của các thư hợp lệ và nội dung
của những thư rác. Khi nhận được một thư mới, dựa vào thông tin có sẵn từ tập mẫu,
quá trình xử lý sẽ được áp dụng trên nội dung của thư đó.
- Đầu tiên cần đọc dữ liệu từ file data_fn với labels tương ứng label_fn.
- Dữ liệu sẽ được lưu trong một ma trận mà mỗi hàng thể hiện một email. Ma trận này
là một ma trận thưa nên chúng ta sẽ sử dụng hàm scipy.sparse.coo_matrix.
Sử dụng mô hình MultinomialNB
1.
2.
3.
4.
5.
6.
7.
## packages
#from __future__ import division, print_function, unicode_literals
import numpy as np
from scipy.sparse import coo_matrix # xay dung ma tran
from sklearn.naive_bayes import MultinomialNB
from sklearn.metrics import accuracy_score # danh gia do chinh xac cua ket
qua
8|Page
8.
9. path = 'data_mail/'
10.train_data_fn = 'train-features-50.txt'
11.train_label_fn = 'train-labels-50.txt'
12.test_data_fn = 'test-features.txt'
13.test_label_fn = 'test-labels.txt'
14.
15.nwords = 2500
16.
17.def read_data(data_fn, label_fn):
18. # doc label_fn
19. with open(path + label_fn) as f:
20.
content = f.readlines()
21. label = [int(x.strip()) for x in content]
22.
23. # doc data_fn
24. with open(path + data_fn) as f:
25.
content = f.readlines()
26. content = [x.strip() for x in content]
27.
28. dat = np.zeros((len(content), 3), dtype = int)
29.
30. for i, line in enumerate(content):
31.
a = line.split(' ')
32.
dat[i, :] = np.array([int(a[0]), int(a[1]), int(a[2])])
33.
34. data = coo_matrix((dat[:, 2], (dat[:, 0] - 1, dat[:, 1] - 1)),\
35.
shape=(len(label), nwords))
36. return (data, label)
37.
38. (train_data, train_label) = read_data(train_data_fn, train_label_fn)
39.(test_data, test_label) = read_data(test_data_fn, test_label_fn)
40.clf = MultinomialNB()
41.
42.#training data
43.clf.fit(train_data, train_label)
44.
9|Page
45.#dua ra ket qua du doan
46.y_pred = clf.predict(test_data)
47.print('Quy mo du lieu dung de training = %d, do chinh xac = %.2f%%' % \
48.
(train_data.shape[0],accuracy_score(test_label, y_pred)*100))
Quy mo du lieu dung de training = 50,
Do chinh xac = 97.31%
- Kết quả cho thấy tập training là rất nhỏ chỉ 50 emails tổng cộng nhưng kết quả đạt
được thì rất cao.
Sử dụng mô hình BernoulliNB
from sklearn.naive_bayes import BernoulliNB
””” Code body ”””
clf = BernoulliNB(binarize = 0.5)
#training data
clf.fit(train_data, train_label)
#dua ra ket qua du doan
y_pred = clf.predict(test_data)
print('Quy mo du lieu dung de training = %d, do chinh xac = %.2f%%' % \
(train_data.shape[0],accuracy_score(test_label, y_pred)*100))
Quy mo du lieu dung de training = 50, do chinh xac = 69.62%
2.1.3 Nhận xét kết quả
Ta thấy rằng trong bài toán này, MultinomialNB hoạt động hiệu quả hơn
BernoulliNB trên cùng một bộ dữ liệu training vì với BernoulliNB thì cũng với
một loại văn bản nhưng thay vì đếm tổng số lần xuất hiện của 1 từ trong văn bản,
BernoulliNB chỉ quan tâm từ đó có xuất hiện hay không.
Thời gian thực hiện chương trình nhanh phù hợp với tập dữ liệu lớn.
Tuy nhiên nhược điểm của thuật toán là cần phải qua việc đào tạo thì độ chính
xác của thuật toán mới được đảm bảo độ tin cậy.
10 | P a g e
2.2. Bài toán chuẩn đoán bệnh tiểu đường
2.2.1 Mô tả dữ liệu và yêu cầu
- Tập dữ liệu benhtieuduong.csv (nguồn dữ liệu: techtalk.vn) bao gồm dữ liệu của
768 nữ tình nguyện viên từ 21 tuổi trở lên. Bộ dữ liệu bao gồm những người bị
tiểu đường và những người không bị tiểu đường. Tập dữ liệu này gồm các thuộc
tính như sau:
1. Số lần mang thai
2. Nồng độ glucose huyết tương 2 giờ trong xét nghiệm dung nạp glucose
đường uống
3. Huyết áp tâm trương (mm Hg)
4. Triceps độ dày nếp gấp da (mm)
5. Insulin huyết thanh 2 giờ (mu U / ml)
6. Chỉ số khối cơ thể (cân nặng tính bằng kg / (chiều cao tính bằng m) ^ 2)
7. Chức năng phả hệ tiểu đường
8. Tuổi (năm)
9. Tình trạng bệnh (1 hoặc 0)
Mỗi bộ dữ liệu sẽ cho biết bệnh nhân có bị bệnh tiểu đường trong vòng 5 năm hay
không
Với mỗi tình nguyện viên, dữ liệu bao gồm tập hợp các chỉ số kể trên và tình trạng bị
BỆNH là CLASS 1 hay không bị BỆNH là CLASS 0.
Hình 2.2 – Bảng dữ liệu của tình nguyện viên
- Vì các giá trị của các chỉ số là một biến liên tục chứ không phải một giá trị rời
rạc nên ở bày toán này sẽ áp dụng mô hình Gaussian Naïve Bayes.
11 | P a g e
- Yêu cầu đặt ra là kiểm ra kiểm tra độ chính xác của thuật toán và dự đoán xác
suất BỆNH của các bộ giá trị.
2.2.2 Cài đặt thuật toán
Ở bài toán này sẽ áp dụng thư viện sklearn và GaussianNB.
- Đối với dữ liệu benhtieuduong.csv thì dữ liệu đã được chuẩn hóa, nên ta bỏ qua
bước tiền xử lý.
- Đầu tiên ta tiến hành phân tách dữ liệu thành 2 phần. Phần thứ nhất là một ma
trận chứa 8 chỉ số đầu của các tình nguyện viên, phần thứ 2 là một ma trận chưa
các class tương ứng.
def get_data(dataset):
data = []
label = []
for x in dataset:
data.append(x[:8])
label.append(x[-1])
return data, label
- Kế tiếp là tạo mẫu training và mẫu test từ benhtieuduong.csv.
o Cách 1: Dùng train_test_split của scikit-learn
trainingSet, testSet = train_test_split(dataset, test_size=, random_state=)
o Cách 2: Xây dựng thủ công một hàm dùng để tách dữ liệu split_data()
Chương trình:
1. from __future__ import division, print_function, unicode_literals
2. import numpy as np
3. import csv
4. from sklearn.naive_bayes import GaussianNB
5. from sklearn.model_selection import train_test_split
6. from sklearn.metrics import accuracy_score
7.
8. def load_data(filename):
9.
with open('data/benhtieuduong.csv','rt')as f:
10.
lines = csv.reader(f)
12 | P a g e
11.
dataset = list(lines)
12.
for i in range(len(dataset)):
13.
dataset[i] = [float(x) for x in dataset[i]]
14.
15.
return dataset
16.
17.def get_data_label(dataset):
18. data = []
19. label = []
20. for x in dataset:
21.
data.append(x[:8])
22.
label.append(x[-1])
23. return data, label
24.
25.def main():
26. filename = 'tieu_duong.csv'
27. dataset = load_data(filename)
28. trainingSet,
testSet
=
train_test_split(dataset,
test_size=20,
random_state=1)
29.
30. dataTrain, labelTrain = get_data_label(trainingSet)
31. dataTest, labelTest = get_data_label(testSet)
32.
33. clf = GaussianNB()
34. clf.fit(dataTrain, labelTrain)
35. score = clf.score(dataTest, labelTest)
36. y_pred = clf.predict(dataTest)
37. #print(dataTest)
38. print('Data size: ', len(dataset))
39. print('Training Size: ', len(trainingSet))
40. print('Test Size: ', len(testSet))
41. print('Do chinh xac : ',score*100,'%')
42. #print('Du doan xac suat KHONG BENH : BENH :',
clf.predict_proba(dataTest)*100)
43.
44.main()
13 | P a g e
Data size: 768
Training Size: 748
Test Size: 20
Do chinh xac: 90.0 %
[Finished in 0.8s]
2.2.3 Nhận xét kết quả
- Với tập dữ liệu gồm 768 bộ dữ liệu ta được bảng đánh giá kết quả kiểm tra ở các
mức huấn luyện như sau:
Độ rộng của dữ liệu huấn Độ chính xác
luyện
Đánh giá
Training Size: 20% (15/768)
(70% - 75 %)
Độ chính xác thấp
Training Size: 80% (614/768)
(72% - 78 %)
Độ chính xác trung
bình
Training Size: 97% (748/768)
>=90%
Độ chính xác cao
Training Size: 98% (758/768) 99%-100%
(Bảng 2.1 – Kết quả thuật toán Gaussian Naïve Bayes)
- Đã giải quyết được yêu cầu đặt ra là áp dụng được thuật toán Gaussian Naïve
Bayes để giải quyết vấn đề thực tế, kiểm ra kiểm tra độ chính xác của thuật toán
và dự đoán xác suất BỆNH hay KHÔNG BỆNH của các bộ giá trị.
- Ở mức độ đánh giá từng bộ dữ liệu (hoặc tập dữ liệu cần kiểm tra bằng 0.3% tập
huấn luyện) thì kết quả có độ chính xác rất cao (99-100%).
- Với thuật toán Naïve Bayes khi áp dụng vào thực tiễn sẽ hỗ trợ cho việc tầm soát
bệnh tiểu đường, tiết kiệm thời gian và rút ngắn các công đoạn chuẩn đoán trả
kết quả.
14 | P a g e
III.
KẾT LUẬN
1. Ưu điểm
- Naive Bayes Classifiers thường được sử dụng trong các bài toán về Text
Classification.
- Naive Bayes Classifiers dễ dàng cài đặt, có thời gian training và test rất nhanh.
Điều này có được là nhờ vào việc giả sử về tính độc lập giữa các thành phần, nếu
biết class.
- Naive Bayes Classifiers có thể hoạt động với các feature vector mà một phần là
liên tục (sử dụng Gaussian Naive Bayes), phần còn lại ở dạng rời rạc (sử dụng
Multinomial hoặc Bernoulli).
- Khi sử dụng Multinomial Naive Bayes thì Laplace smoothing thường được sử
dụng để tránh trường hợp 1 thành phần trong test data chưa xuất hiện ở training
data.
- Dự đoán đa lớp với độ chính xác cao
2. Nhược điểm
- Giả thuyết về tính độc lập của điều kiện làm giảm đi độ chính xác của thuật toán.
- Khi tiến hành dự đoán một tập dữ liệu mà không hề có trong bộ đã được training
thì xác suất này được xác định là 0.
15 | P a g e
TÀI LIỆU THAM KHẢO
1. Giáo trình: Python Machine Learning trang 49
2. HƯỚNG DẪN - CHẨN ĐOÁN VÀ ĐIỀU TRỊ BỆNH ĐÁI THÁO ĐƯỜNG
TÝP
2
(Ban hành kèm theo Quyết định số 3280/QĐ-BYT ngày 09 tháng 9 năm 2011 của
Bộ trưởng Bộ Y tế)
3. (1.9. Naive Bayes)
4. Exercise 6: Naive Bayes
5.
16 | P a g e