ỨNG DỤNG THỰC tế của THUẬT TOÁN NAIVE BAYES

16 1.2K 8
ỨNG DỤNG THỰC tế của THUẬT TOÁN NAIVE BAYES

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

MỤC LỤC I. CƠ SỞ LÝ THUYẾT ....................................................3 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 II. ỨNG DỤNG CỦA THUẬT TOÁN ...........................................7 2.1. Bài toán phân loại thư rác .......................................7 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. 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 III. KẾT LUẬN ........................................................ 15 1. Ưu điểm ........................................................... 15 2. Nhược điểm ........................................................ 15 TÀI LIỆU THAM KHẢO ................................................... 16

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 TỐN NẠVE BAYES TP HỒ CHÍ MINH, THÁNG 10 NĂM 2019 MỤC LỤC CƠ SỞ LÝ THUYẾT I 1.1 Công thức Bayes 1.2 Naïve Bayes Classifier .3 1.3 Mơ hình Gaussian Nạve Bayes 1.4 Mơ hình Multinomial Nạve Bayes (MultinomialNB) 1.5 Mơ hình Bernoulli Nạve Bayes (BernoulliNB) .6 ỨNG DỤNG CỦA THUẬT TOÁN II 2.1 2.1.1 Mô tả liệu 2.1.2 Cài đặt thuật toán 2.1.3 Nhận xét kết 10 2.2 III Bài toán phân loại thư rác Bài toán chuẩn đoán bệnh tiểu đường 11 2.2.1 Mô tả liệu 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 14 KẾT LUẬN 15 Ưu điểm 15 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ụ, coi cam có màu cam, tròn đường kính khoảng inch Ngay tính phụ thuộc vào dựa tồn tính khác, phân loại Naive Bayes xem xét tất đặc điểm để đóng góp độc lập vào xác suất loại quả cam - Mơ hình Naive Bayesian dễ thực đặc biệt hữu ích cho tập liệu lớn Ngoài việc đơn giản Naive Bayes biết đến vượt trội phương pháp phân loại tiên tiến Cơng thức Nạve Bayes định nghĩa: P(B|A) =     𝑃(𝐵).𝑃(𝐴|𝐵) 𝑃(𝐴) (0) P(B|A): xác xuất lớp mục tiêu dự đoán P(B): xác xuất lớp trước P(A|B): khả xác xuất lớp dự đoán đưa P(A): xác xuất dự đoán trước 1.2 Nạve Bayes Classifier Xét tốn classification với C classes 1,2, …, C1, 2, …, C Giả sử có điểm liệu x∈Rd Hãy tính xác suất để điểm liệu rơi vào class c Nói cách khác, tính: p(y=c|x) (1) viết gọn thành p(c|x) - Nói cách khác tính xác suất để đầu class c biết đầu vào vector x - Biểu thức này, tính được, giúp xác định xác suất để điểm liệu rơi vào class Từ giúp xác định class điểm liệu cách chọn class có xác suất cao nhất: Từ giúp xác định class điểm liệu cách chọn 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) hiểu xác suất để điểm rơi vào class c Giá trị tính cách lấy tỉ lệ số điểm liệu tập training rơi vào class chia cho tổng số lượng liệu tập traing - Thành phần lại p(x|c), tức phân lớp điểm liệu class c, thường khó tính tốn x biến ngẫu nhiên nhiều chiều, cần rất nhiều liệu training để xây dựng phân lớp Để giúp cho việc tính tốn đơn giản, người ta thường giả sử cách đơn giản thành phần biến ngẫu nhiên x độc lập với nhau, biết c: 𝑑 𝑝(𝑥|𝑐) = 𝑝(𝑥1 , 𝑥2 , … , 𝑥𝑑 |𝑐) = ∏ 𝑝(𝑥𝑖 |𝑐) 𝑖=1 (5) - Giả thiết chiều liệu độc lập với nhau, biết cc, q chặt tìm liệu mà thành phần hoàn toàn độc lập với Tuy nhiên, giả thiết lại mang lại kết tốt bất ngờ Giả thiết độc lập chiều liệu gọi Naive Bayes Cách xác định class liệu dựa giả thiết có tên Naive Bayes Classifier Do Nạve Bayes Classifier có tính đơn giản nên có tốc độ training test kết nhanh Điều mang lại hiệu cao tốn có qui mô lớn (large-scale) - Ở bước training, phân lớp p(c) 𝑝(𝑥𝑖 |𝑐), i = 1,2, , d xác định dựa vào training data - Ở bước test, với điểm liệu x, class𝑑 đượ xác định bởi: 𝑐 = arg max = log(𝑝(𝑐)) + ∑ log(𝑝(𝑥𝑖 |𝑐)) (6) 𝑖=1 - Mặt khác giả sử thành phần liệu độc lập với nhau, biết class, khiến cho việc tính tốn phân lớp p(𝑥𝑖 |c) trở nên nhanh - Mỗi giá trị p(c), c = 1, 2, …, C p(c), c= 1, 2, …, C xác định tần suất xuất class cc training data - Naive Bayes Classifier sử dụng hiệu nhiều toán thực tế, đặc biệt tốn phân loại văn bản, ví dụ lọc tin nhắn rác hay lọc email spam, … - Việc tính tốn p(𝑥𝑖 |c) phụ thuộc vào loại liệu Gồm phân lớp Gaussian Naive Bayes, Complement Naïve Bayes, Multinomial Naive Bayes Bernoulli Naive 4|Page - Tuy nhiên có ba loại sử dụng phổ biến là: Gaussian Naive Bayes, Multinomial Naive Bayes Bernoulli Nạve 1.3 Mơ hình Gaussian Nạve Bayes - Mơ hình sử dụng chủ yếu loại liệu mà thành phần biến liên tục - Với chiều liệu i class c, 𝑥𝑖 tuân theo phân lớp chuẩn có kỳ vọng 𝜇𝑐𝑖 phương sai 𝜎𝑐𝑖2 : (7) 1.4 Mơ hình Multinomial Nạve Bayes (MultinomialNB) - MultinomialNB thực thuật toán Bayes cho liệu phân lớp đa phương thức hai biến thể Naïve Bayes cổ điển sử dụng phân loại văn Phân lớp tham số hóa vectơ cho lớp, số lượng tính (trong phân loại văn bản, kích thước từ vựng) xác suất tính xuất mẫu thuộc lớp - Mỗi văn biểu diễn vector có độ dài d số từ từ điển Giá trị thành phần thứ i vector số lần từ thứ i xuất văn - Khi đó, 𝑝(𝑥𝑖 |𝑐) tỉ lệ với tần suất từ thứ i hay feature thứ i theo dạng tổng quát xuất văn class c Giá trị tính bằng: 𝑁𝑐𝑖 𝑐𝑖 = 𝑝(𝑥𝑖 |𝑐) = 𝑁𝑐 (8) Trong đó: o 𝑁𝑐𝑖 tổng số lần từ thứ i xuất văn class c, tính tổng tất thành phần thứ i feature vectors ứng với class c o 𝑁𝑐 tổng số từ (kể từ lặp lại) xuất class c Nó tổng độ dài toàn văn thuộc class c 𝑁𝑐 = ∑𝑑𝑖=1 𝑁𝑐𝑖 , từ ∑𝑑𝑖=1 𝑐𝑖 = Hạn chế tính từ khơng có class c biểu thức (8) trả kết 0, dẫn đến vế phải (6) không làm cho kết không xác 5|Page - Để giải ta dùng kỹ thuật Laplace smoothing: 𝑁𝑐𝑖 + 𝑎 𝑐𝑖 = 𝑁𝑐 + 𝑑𝛼 (9) Với số dương α, thường 1, để tránh trường hợp tử số Mẫu số cộng với 𝑑𝛼 để đảm bảo tổng xác suất ∑𝑑𝑖=1 𝑐𝑖 = 1.5 Mơ hình Bernoulli Nạve Bayes (BernoulliNB) - BernoulliNB thực thuật toán đào tạo phân loại cho liệu phân lớp theo phân lớp Bernoulli đa biến Tức là, có nhiều tính tính coi biến có giá trị nhị phân (Bernoulli, boolean) Mơ hình áp dụng cho loại liệu mà thành phần giá trị binary – 1, trao loại liệu khác BernoulliNB nhị phân hóa đầu vào (tùy thuộc vào tham số binarize) Ví dụ: với loại văn thay đếm tổng số lần xuất từ văn bản, ta cần quan tâm từ có xuất hay khơng Khi đó, ta tìm 𝑝(𝑥𝑖 |𝑐) cách: 𝑝(𝑥𝑖 |𝑐) = 𝑝(𝑥𝑖 |𝑐)xi (1 − 𝑝(𝑥𝑖 |𝑐)1−xi ) (10) Với 𝑝(𝑥𝑖 |𝑐) hiểu xác xuất từ thứ I xuất văn class c 6|Page II ỨNG DỤNG CỦA THUẬT TỐN 2.1 Bài tốn phân loại thư rác 2.1.1 Mô tả liệu - Yêu cầu toán phân loại thư thành SPAM hay NON-SPAM, hiệu phân loại phải khả quan giảm thiểu lỗi phân loại sai NON-SPAM thành SPAM - Phân loại thư rác toán phân loại văn với hai lớp SPAM NONSPAM - Dữ liệu ví dụ lấy http://openclassroom.stanford.edu - Tập liệu bao gồm tổng cộng 960 emails tiếng Anh, tách thành tập training test theo tỉ lệ 700:260, 50% tập spam emails - Để cho tốn đơn giản liệu xử lý gồm 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 file chứa liệu tập training tập test File train-features50.txt chứa liệu tập training thu gọn với có tổng cộng 50 training emails - Mỗi file *labels*.txt chứa nhiều dòng, dòng ký tự thể email non-spam spam - Mỗi file *features*.txt chứa nhiều dòng, dòng có số, ví dụ: 564 1 19 - Trong số số email, 1; số thứ hai thứ tự từ từ điển (tổng cộng 2500 từ); số thứ ba số lượng từ email xét Dòng nói email thứ nhất, từ thứ 564 từ điển xuất lần Cách lưu liệu giúp tiết kiệm nhớ email thường không chứa 7|Page hết tất từ từ điển mà chứa lượng nhỏ, ta cần lưu giá trị khác không - Nếu ta biểu diễn feature vector email vector hàng có độ dài độ dài từ điển (2500) dòng thứ nói thành phần thứ 564 vector Tương tự, thành phần thứ 19 vector Nếu không xuất hiện, thành phần khác mặc định - Mơ hình phân loại thư rác biểu diễn sau Tập liệu thư đến Phân loại thư với Nạ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 tốn - Thuật toán bắt đầu việc học nội dung liệu thư hợp lệ nội dung thư rác Khi nhận thư mới, dựa vào thơng tin có sẵn từ tập mẫu, q trình xử lý áp dụng nội dung thư - Đầu tiên cần đọc liệu từ file data_fn với labels tương ứng label_fn - Dữ liệu lưu ma trận mà hàng thể email Ma trận ma trận thưa nên sử dụng hàm scipy.sparse.coo_matrix Sử dụng mơ hình MultinomialNB ## 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 chinh xac cua ket qua 8|Page 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 ket qua du doan 46.y_pred = clf.predict(test_data) 47.print('Quy mo du lieu dung de training = %d, 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 cho thấy tập training nhỏ 50 emails tổng cộng kết đạ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 ket qua du doan y_pred = clf.predict(test_data) print('Quy mo du lieu dung de training = %d, chinh xac = %.2f%%' % \ (train_data.shape[0],accuracy_score(test_label, y_pred)*100)) Quy mo du lieu dung de training = 50, chinh xac = 69.62% 2.1.3 Nhận xét kết  Ta thấy toán này, MultinomialNB hoạt động hiệu BernoulliNB liệu training với BernoulliNB với loại văn thay đếm tổng số lần xuất từ văn bản, BernoulliNB quan tâm từ có xuất hay khơng  Thời gian thực chương trình nhanh phù hợp với tập liệu lớn  Tuy nhiên nhược điểm thuật tốn cần phải qua việc đào tạo độ xác thuật tốn đảm bảo độ tin cậy 10 | P a g e 2.2 Bài tốn chuẩn đốn bệnh tiểu đường 2.2.1 Mơ tả liệu yêu cầu - Tập liệu benhtieuduong.csv (nguồn liệu: techtalk.vn) bao gồm liệu 768 nữ tình nguyện viên từ 21 tuổi trở lên Bộ liệu bao gồm người bị tiểu đường người không bị tiểu đường Tập liệu gồm thuộc tính sau: Số lần mang thai Nồng độ glucose huyết tương xét nghiệm dung nạp glucose đường uống Huyết áp tâm trương (mm Hg) Triceps độ dày nếp gấp da (mm) Insulin huyết (mu U / ml) Chỉ số khối thể (cân nặng tính kg / (chiều cao tính m) ^ 2) Chức phả hệ tiểu đường Tuổi (năm) Tình trạng bệnh (1 0) Mỗi liệu cho biết bệnh nhân có bị bệnh tiểu đường vòng năm hay khơng Với tình nguyện viên, liệu bao gồm tập hợp số kể tình trạng bị BỆNH CLASS hay khơng bị BỆNH CLASS Hình 2.2 – Bảng liệu tình nguyện viên - Vì giá trị số biến liên tục giá trị rời rạc nên bày tốn áp dụng mơ hình Gaussian Naïve Bayes 11 | P a g e - Yêu cầu đặt kiểm kiểm tra độ xác thuật tốn dự đốn xác suất BỆNH giá trị 2.2.2 Cài đặt thuật toán Ở toán áp dụng thư viện sklearn GaussianNB - Đối với liệu benhtieuduong.csv liệu 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 liệu thành phần Phần thứ ma trận chứa số đầu tình nguyện viên, phần thứ ma trận chưa 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 tạo mẫu training mẫu test từ benhtieuduong.csv o Cách 1: Dùng train_test_split scikit-learn trainingSet, testSet = train_test_split(dataset, test_size=, random_state=) o Cách 2: Xây dựng thủ công hàm dùng để tách liệu split_data() Chương trình: from future import division, print_function, unicode_literals import numpy as np import csv from sklearn.naive_bayes import GaussianNB from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score def load_data(filename): 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 - Với tập liệu gồm 768 liệu ta bảng đánh giá kết kiểm tra mức huấn luyện sau: Độ rộng liệu huấn Độ xác luyện Đánh giá Training Size: 20% (15/768) (70% - 75 %) Độ xác thấp Training Size: 80% (614/768) (72% - 78 %) Độ xác trung bình Training Size: 97% (748/768) >=90% Độ xác cao Training Size: 98% (758/768) 99%-100% (Bảng 2.1 – Kết thuật tốn Gaussian Nạve Bayes) - Đã giải yêu cầu đặt áp dụng thuật tốn Gaussian Nạve Bayes để giải vấn đề thực tế, kiểm kiểm tra độ xác thuật tốn dự đốn xác suất BỆNH hay KHƠNG BỆNH giá trị - Ở mức độ đánh giá liệu (hoặc tập liệu cần kiểm tra 0.3% tập huấn luyện) kết có độ xác cao (99-100%) - Với thuật tốn Nạve Bayes áp dụng vào thực tiễn hỗ trợ cho việc tầm soát bệnh tiểu đường, tiết kiệm thời gian rút ngắn công đoạn chuẩn đoán trả kết 14 | P a g e III KẾT LUẬN Ưu điểm - Naive Bayes Classifiers thường sử dụng toán Text Classification - Naive Bayes Classifiers dễ dàng cài đặt, có thời gian training test nhanh Điều có nhờ vào việc giả sử tính độc lập thành phần, biết class - Naive Bayes Classifiers hoạt động với feature vector mà phần liên tục (sử dụng Gaussian Naive Bayes), phần lại dạng rời rạc (sử dụng Multinomial Bernoulli) - Khi sử dụng Multinomial Naive Bayes Laplace smoothing thường sử dụng để tránh trường hợp thành phần test data chưa xuất training data - Dự đoán đa lớp với độ xác cao Nhược điểm - Giả thuyết tính độc lập điều kiện làm giảm độ xác thuật tốn - Khi tiến hành dự đốn tập liệu mà khơng có training xác suất xác định 15 | P a g e TÀI LIỆU THAM KHẢO Giáo trình: Python Machine Learning trang 49 HƯỚNG DẪN - CHẨN ĐOÁN VÀ ĐIỀU TRỊ BỆNH ĐÁI THÁO ĐƯỜNG TÝP (Ban hành kèm theo Quyết định số 3280/QĐ-BYT ngày 09 tháng năm 2011 Bộ trưởng Bộ Y tế) https://scikit-learn.org (1.9 Naive Bayes) Exercise 6: Naive Bayes https://techtalk.vn 16 | P a g e ... lớp Gaussian Naive Bayes, Complement Naïve Bayes, Multinomial Naive Bayes Bernoulli Naive 4|Page - Tuy nhiên có ba loại sử dụng phổ biến là: Gaussian Naive Bayes, Multinomial Naive Bayes Bernoulli... 99%-100% (Bảng 2.1 – Kết thuật tốn Gaussian Nạve Bayes) - Đã giải yêu cầu đặt áp dụng thuật tốn Gaussian Nạve Bayes để giải vấn đề thực tế, kiểm kiểm tra độ xác thuật toán dự đoán xác suất BỆNH... 1.5 Mơ hình Bernoulli Nạve Bayes (BernoulliNB) .6 ỨNG DỤNG CỦA THUẬT TOÁN II 2.1 2.1.1 Mô tả liệu 2.1.2 Cài đặt thuật toán 2.1.3 Nhận xét

Ngày đăng: 31/05/2020, 03:50

Tài liệu cùng người dùng

Tài liệu liên quan