Trí tuệ nhân tạo là một lĩnh vựccủa khoa học và công nghệ nhằm làm cho máy có những khả năng của trí tuệ và tríthông minh của con người, tiêu biểu như biết suy nghĩ và lập luận để giải q
Trang 1BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC NGUYỄN TẤT THÀNH
KHOA CÔNG NGHỆ THÔNG TIN
BÁO CÁO CUỐI KÌ
XÂY DỰNG MÔ HÌNH PHÂN LỚP VỚI THUẬT
TOÁN NAIVE BAYES
Giảng viên hướng dẫn: Ths BÙI TIẾN ĐỨC Sinh viên thực hiện: TRẦN CAO MINH
Trang 2BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC NGUYỄN TẤT THÀNH
KHOA CÔNG NGHỆ THÔNG TIN
BÁO CÁO CUỐI KÌ
XÂY DỰNG MÔ HÌNH PHÂN LỚP VỚI THUẬT
TOÁN NAIVE BAYES
Giảng viên hướng dẫn: Ths BÙI TIẾN ĐỨC Sinh viên thực hiện: TRẦN CAO MINH
Tp.HCM, tháng 09 năm 2022
Trang 4Trong thời gian thực hiện đồ án cuối kì của môn học để có được một kết quả nộp thầy sẽkhông tránh được những thiếu sót, em mong thầy xem xét và đưa ra những nhận xét,góp ý chân thành để đồ án được hoàn thiện hơn.
Kính chúc thầy nhiều sức khoẻ, thành công trên con đường truyền đạt tri thức của mình
Em cảm ơn thầy!
Trang 5Lời mở đầu
Trước hết xin nói về chữ 'trí tuệ nhân tạo', vốn được dùng rộng rãi trong cộng đồngCông nghệ thông tin Trí tuệ nhân tạo, tiếng Anh là Artificial Intelligence hay chữ viếttắt được dùng phổ biến là AI, còn có thể hiểu bình dân hơn là 'thông minh nhân tạo', tức
là sự thông minh của máy móc do con người tạo ra, đặc biệt tạo ra cho máy tính, robot,hay các máy móc có các thành phần tính toán điện tử Trí tuệ nhân tạo là một lĩnh vựccủa khoa học và công nghệ nhằm làm cho máy có những khả năng của trí tuệ và tríthông minh của con người, tiêu biểu như biết suy nghĩ và lập luận để giải quyết vấn đề,biết giao tiếp do hiểu ngôn ngữ và tiếng nói, biết học và tự thích nghi, dựa trên các môhình máy học (Machine Learning) và khai phá dữ liệu (Data Mining)
Tập dữ liệu (Dataset) cung cấp 'nhiên liệu' cho các mô hình AI cũng giống như xănghoặc điện cho ô tô Cho dù nhiệm vụ của chúng là tạo văn bản, nhận dạng đối tượng hay
dự đoán giá cổ phiếu của công ty, hệ thống AI đều 'học' bằng cách chọn lọc qua vô số ví
dụ để phân biệt các mẫu trong dữ liệu Ví dụ, một hệ thống thị giác máy tính (computervision) có thể được đào tạo để nhận ra một số vật thể đã được 'học' trước đó,
Dữ liệu chính là một kho tàng tài nguyên khổng lồ của doanh nghiệp Bởi vì có quánhiều dữ liệu nếu như không được sắp xếp phân nhóm sẽ dễ bị mất, tốn kém nhiều thờigian cho việc tìm kiếm hay thực hiện mã hóa Encryption và việc sử dụng sau này
Bên cạnh đó, việc thực hiện phân loại dữ liệu giúp doanh nghiệp dễ dàng quản lý dữ liệutránh việc thất thoát Từ đó tiết kiệm chi phí cho các giải pháp Data Loss Preventiontrong tương lai
Sau đây là những lợi ích của việc phân loại dữ liệu đem lại:
- Xác định được các loại data có giá trị trong tổ chức, doanh nghiệp
- Việc phân loại rõ ràng và cụ thể các dữ liệu sẽ giúp cho việc lựa chọn các giải
Trang 6- Dữ liệu được phân loại rõ ràng sẽ giúp doanh nghiệp, tổ chức dựa vào đĩ đểthiết lập hệ thống phân quyền truy cập cho các cá nhân, từ đĩ sẽ tạo ra được hiểu quả trongviệc sử dụng dữ liệu.
- Việc tiến hành phân loại thể hiện được sự chuyên nghiệp của các tổ chức.Doanh nghiệp trong việc bảo vệ tài nguyên dữ liệu cĩ giá trị của khách hàng và chính doanhnghiệp
Ta sẽ áp dụng Định lý Bayes cho phép tính xác suất xảy ra của một sự kiện ngẫu nhiên
A khi biết sự kiện liên quan B đã xảy ra Xác suất này được ký hiệu là P(A|B), và đọc là
“xác suất của A nếu cĩ B” Đại lượng này được gọi xác suất cĩ điều kiện hay xác suất hậu nghiệm vì nĩ được rút ra từ giá trị được cho của B hoặc phụ thuộc vào giá trị đĩ
- Dựa trên định lý của Bayes
Giả định: độc lập cĩ điều kiện lớp (class conditional independence)
- Phương pháp phân loại dựa trên xác suất Nạve Bayes tính xác suất cho các yếu tố, sau
đĩ chọn kết quả với xác suất cao nhất
Tuy nhiên, ta cần lưu ý giả định của thuật tốn Naive Bayes là các yếu tố đầu vào
được cho là độc lập với nhau
Trang 7PHẦN NHẬN XÉT + CHẤM ĐIỂM CỦA GIẢNG VIÊN
Điểm giáo viên hướng dẫn:
Điểm giảng viên chấm vòng 2:
TPHCM, Ngày …… tháng …… năm
Giáo viên chấm vòng 2 Giáo viên hướng dẫn
MỤC LỤC
Trang 8Lời cảm ơn i
Lời mở đầu ii
PHẦN NHẬN XÉT + CHẤM ĐIỂM CỦA GIẢNG VIÊN iv
MỤC LỤC v
DANH MỤC HÌNH vii
Chương 1 Giới thiệu đề tài 1
1.1 Lý do chọn đề tài 1
1.2 Mơ tả và hướng xây dựng của đề tài 1
1.3 Mơi trường cài đặt 1
Chương 2 Lý thuyết 3
2.1 Định lý Bayes là gì 3
2.1.1 Giải thích các kí hiệu trong cơng thức Bayes 3
2.2 Phân lớp Nạve Bayes 4
2.2.1 Cách để xây dựng mơ hình phân lớp Nạve Bayes 4
2.2.2 Tập dữ liệu mẫu 4
2.2.3 Tính phân lớp của mẫu A 5
Chương 3 Xây dựng thuật tốn phân lớp 7
3.1 Quy trình khai phá tri thức 7
3.1.1 Phân tích mơ hình 7
3.1.2 Giải thích mơ hình 8
Chương 4 Dựa Trên Nạve Bayes Xây Dựng Mơ Hình Machine Learning Bằng Ngơn Ngữ Python 10
4.1 Các thư viện cần thiết 10
4.1.1 Thư viện Pandas 10
4.1.2 Thư viện Scikit-learn 10
4.2 Tiến hành viết lệnh 10
4.3 Các bước để chạy mơ hình Machine Learning trên Google Colaboratory 13
Kết luận 16
Hướng phát triển trong tương lai 16
Tài liệu kham khảo 17
DANH MỤC HÌNH Hình 1 Bảng dữ liệu giả lập 5
Trang 9Hình 2 Quy trình khai phá tri thức 7
Hình 3 Trực quan bảng dữ liệu sau khi chuyển thành số nguyên 11
Hình 4 Kết quả mà máy học được dựa trên bảng dữ liệu giả lập mà ta đã áp vào 13
Hình 5 Khởi chạy bước 1 13
Hình 6 Khởi chạy bước 2 14
Hình 7 Khởi chạy bước 3 14
Hình 8 Khởi chạy bước 4 14
Hình 9 Khởi chạy bước 5 15
Hình 10 Xem kết quả và đánh giá độ chính xác của model máy học 15
Trang 10Chương 1 Giới thiệu đề tài
1.1 Lý do chọn đề tài
Nạve Bayes Classification (NBC) là một thuật tốn dựa trên định lý Bayes về lý thuyếtxác suất để đưa ra các dự đốn cũng như phân loại dữ liệu dựa trên các dữ liệu được quan sát và thống kê Nạve Bayes Classification là một trong những thuật tốn được ứng dụng rất nhiều trong các lĩnh vực Machine learning dùng để đưa các dự đốn dựa trên một tập dữ liệu đã được thu thập, độ phúc tạp của thuật tốn thấp, thời gian huấn luyện mơ hình nhỏ, phù hợp với các mơ hình dữ liệu vừa phải Nĩ thuộc vào nhĩm Supervised Machine Learning Algorithms (học cĩ giám sát) vì thế nĩ khá dễ hiểu và độchính xác tương đối cao
1.2 Mơ tả và hướng xây dựng của đề tài
Sử dụng định lý Nạve Bayes để phân lớp và gán nhãn cho dữ liệu từ bộ dữ liệu đã cho trước, bỏ qua các vấn đề về tiền xử lý dữ liệu
- Ta sẽ tách các dịng từ bảng dữ liệu thành hai phần:
+ Test: Dùng để kiểm tra lại kết quả máy học
- Tức là máy sẽ học từ các ví dụ từ và các mẫu dữ liệu đã cĩ sau đĩ sẽ đánh giá lại sai
Trang 11- Địa chỉ mã nguồn:
https://colab.research.google.com/drive/1h-96ocsY1AYT6B4ynhqMba79ULPen9qS?authuser=3
- Địa chỉ file dữ liệu : dulieu-tieuduong/ main/DataTest.csv
Trang 12https://raw.githubusercontent.com/CaoMinhh/file-Chương 2 Lý thuyết
2.1 Định lý Bayes là gì
Định lý Bayes cho phép tính xác suất xảy ra của một sự kiện ngẫu nhiên A khi biết sự kiện liên quan B đã xảy ra Xác suất này được ký hiệu là P(A|B), và đọc là "xác suất của A nếu có B" Đại lượng này được gọi là xác suất có điều kiện hay xác suất hậu
nghiệm vì nó được rút ra từ giá trị được cho của B hoặc phụ thuộc vào giá trị đó.
- Theo định lý Bayes, xác suất xảy ra A khi biết B sẽ phụ thuộc vào 3 yếu tố:
+ Xác suất xảy ra A của riêng nó, không quan tâm đến B Ký hiệu là P(A) và đọc là xác suất của A Đây được gọi là xác suất biên duyên hay xác suất tiên nghiệm, nó là
"tiên nghiệm" theo nghĩa rằng nó không quan tâm đến bất kỳ thông tin nào về B
+ Xác suất xảy ra B của riêng nó, không quan tâm đến A Ký hiệu là P(B) và đọc
là "xác suất của B" Đại lượng này còn gọi là hằng số chuẩn hóa (normalising constant), vì
nó luôn giống nhau, không phụ thuộc vào sự kiện A đang muốn biết
+ Xác suất xảy ra B khi biết A xảy ra Ký hiệu là P(B|A) và đọc là "xác suất của
B nếu có A" Đại lượng này gọi là khả năng (likelihood) xảy ra B khi biết A đã xảy ra Chú ýkhông nhầm lẫn giữa khả năng xảy ra B khi biết A và xác suất xảy ra A khi biết B
Khi biết ba đại lượng này, xác suất của A khi biết B cho bởi công thức:
P( A∨B)= P(B∨A)∗P( A)
P(B)
2.1.1 Giải thích các kí hiệu trong công thức Bayes
Từ công thức Bayes trên ta có :
A: Một mẫu (đối tượng), thuộc về một phân lớp B
B: Phân lớp (ví dụ phân lớp là Yes - No, Có – Không, 0 – 1,…)
P(A): Xác suất của giả thuyết C đúng (khi chưa có chứng cứ)
P(B): Xác suất quan sát được chứng cứ B
Trang 13P(A | B) : Xác suất của giả thuyết A đúng khi cĩ chứng cứ B
P(B | A): Xác suất nhìn thấy chứng cứ B khi biết giả thuyết A đúng
2.2 Phân lớp Nạve Bayes
Dựa trên Định lý Bayes, nhưng đưa ra giả thiết “ngây thơ” rằng mọi thuộc tính độc lập với nhau
Với giả thuyết trên các thuộc tính sẽ hồn tồn độc lập với nhau, nhưng trong thực
tế những thuộc tính sẽ khơng độc lập với nhau
Ví dụ: Trời nắng sẽ ảnh hưởng tới nhiệt độ Tuổi cao sẽ ảnh hưởng đến khả năngghi nhớ bài học,…
2.2.1 Cách để xây dựng mơ hình phân lớp Nạve Bayes
Mẫu số P(B) khơng phụ thuộc vào dữ liệu đầu vào và lớp
A → Khơng nhất thiết phải tính để phân lớp.
Với P(A | B), P(A) và P(B) được tính từ tập dữ liệu
→ Phân lớp của mẫu B sao cho P(A | B) là lớn nhất.
2.2.2 Tập dữ liệu mẫu
- Cho tập dữ liệu mẫu cĩ 4 cột
+ Cột ‘CongTy’ mơ tả về cơng ty làm việc: nhận 4 giá trị
+ Cột ‘CongViec’ mơ tả về vị trí làm việc ở cơng ty đĩ: nhận 3 giá trị
+ Cột ‘BangCap’ mơ tả về bằng cấp khi làm việc ở cơng ty đĩ: nhận 2 giá trị+ Cột ‘LuongTren_20Trieu’ mơ tả về mức khi ở cơng ty đĩ: nhận 2 giá trị
Trang 14Hình 1 Bảng dữ liệu giả lập
2.2.3 Tính phân lớp của mẫu A
Cho phân lớp giả lập mẫu A=(CongTy = FPT_sof, CongViec = Banhang,
Trang 15P(Luong20Trieu = Khong) * P( A | Luong20Trieu = Khong) = P(Luong20Trieu =
Khong) * P(CongTy = FPT_sof | Luong20Trieu = Khong) * P(CongViec = Banhang
| Luong20Trieu = Khong) * P(BangCap=Thacsi | LuongT20Trieu = Khong)
- Sau khi quan sát bảng dữ liệu giả lập trên ta thu được trên 23 dịng dữ liệu:
- Tính tốn phân lớp dựa vào định lý Nạve Bayes P(Luong20Trieu = Co) * P(A |
Trang 16Chương 3 Xây dựng thuật toán phân lớp
3.1 Quy trình khai phá tri thức
- Quá trình xử lý dữ liệu thô/gốc (raw/original data) nhằm cải thiện chất lượng dữ liệu (quality of the data) và do đó cải thiện chất lượng của kết quả khai phá
- Chất lượng dữ liệu (data quality): tính chính xác, tính hiện hành, tính toàn vẹn, tính nhất quán
Hình 2 Quy trình khai phá tri thức
3.1.1 Phân tích mô hình
- Làm sạch dữ liệu (data cleaning/cleansing): loại bỏ nhiễu (Remove noise), hiệu chỉnh những phần dữ liệu không nhất quán (Correct data inconsistencies)
- Tích hợp dữ liệu (Data integration): từ nhiều nguồnkhác nhau vào một kho dữ liệu
- Biến đổi dữ liệu (Data transformation): chuẩn hoá dữ liệu (Data normalization)
- Thu giảm dữ liệu (Data reduction):
Trang 17+ Thu giảm kích thước dữ liệu (nghĩa là giảm số phần tử) bằng kết hợp dữ liệu (Data Aggregation), gom cụm dữ liệu
+ loại bỏ các đặc điểm dư thừa (redundant features) giảm số chiều/thuộc tính dữliệu
3.1.2 Giải thích mô hình
- Làm sạch dữ liệu:
+ Xử lý dữ liệu bị thiếu (Missing data)
Nguyên nhân: không tồn tại lúc nhập liệu, sự cố,…
Giải pháp: Bỏ qua dòng dữ liệu đó, cập nhật bằng tay, dùng giá trịthay thế (tự động): hằng số toàn cục, trị phổ biến, trung bình (toàncục, cục bộ), trị dự đoán,… Ngăn chặn từ ban đầu: thiết kế tốt CSDL và các thủ tục nhập liệu (các ràng buộc dữ liệu)
+ Nhận diện phần tử biên (Outliers) và giảm thiểu nhiễu (Noisy data)
Nguyên nhân: (công cụ thu thập dữ liệu, lỗi trên đường truyền, giới hạn công nghệ,
Giải pháp: Dựa trên phân bố thống kê, Dựa trên mật độ, Hồi quy, Phân tích cụm,…
+ Xử lý dữ liệu không nhất quán (Inconsistent data)
Nguyên nhân: Không nhất quán trong các qui ước đặt tên hay
mã hóa, Định dạng không nhất quán của các vùng nhập liệu, Thiết bị ghi nhận dữ liệu, …
Giải pháp: Tận dụng siêu dữ liệu, ràng buộc dữ liệu, sự kiểm tracủa nhà phân tích dữ liệu cho việc nhận diện, Điều chỉnh dữ liệu không nhất quán bằng tay,…
- Tích hợp dữ liệu:
Trang 18+ Vấn đề nhận dạng thực thể (Entity identification problem) Tích hợp lược đồ (Schema integration)
So trùng đối tượng (Object matching)
+ Vấn đề mâu thuẫn giá trị dữ liệu (Data value conflicts)
- Biến đổi dữ liệu
+ Xây dựng thuộc tính/đặc tính (Attribute/Feature construction)
Kết hợp khối dữ liệu (Data cube aggregation)
Chọn một số thuộc tính (Attribute subset selection) Thu giảm chiều (Dimensionality reduction)
Thu giảm lượng (Numerosity reduction) Rời rạc hóa (Discretization)
Tạo phân cấp ý niệm (concept hierarchy generation)
Trang 19Chương 4 Dựa Trên Nạve Bayes Xây Dựng Mơ Hình
Machine Learning Bằng Ngơn Ngữ Python
- Giả thuyết rằng bộ dữ liệu ta cĩ là dữ liệu chuẩn, khơng cần phải xử lý lại
- Giả sử tên các cột và các giá trị trong bảng dữ liệu là thật và đã được xử lý
4.1 Các thư viện cần thiết
4.1.1 Thư viện Pandas
Là một thư viện Python cung cấp các cấu trúc dữ liệu nhanh, mạnh mẽ, linh hoạt và mang hàm ý Tên thư viện được bắt nguồn từ panel data (bảng dữ liệu) Pandas được thiết kế để làm việc dễ dàng và trực quan với dữ liệu cĩ cấu trúc (dạng bảng, đa chiều, cĩ tiềm năng khơng đồng nhất) và dữ liệu chuỗi thời gian
4.1.2 Thư viện Scikit-learn
Sklearn được thiết kế để xử lý các thư viện số và khoa học của Python như NumPy
và SciPy Các tính năng chính của thư viện Scikit-learning bao gồm thuật tốn phân loại, hồi quy và phân cụm (hỗ trợ máy vectơ, rừng ngẫu nhiên, tăng độ dốc, k-means
và DBSCAN)
4.2 Tiến hành viết lệnh
- Đầu tiên ta gọi thư viện và đọc file csv
# Bước 1: Khởi tạo thư viện và đọc file data CSV
# Gọi thư viện
import pandas as pd
from sklearn.preprocessing import LabelEncoder
# Load file dữ liệu csv
url= 'https://raw.githubusercontent.com/CaoMinhh/file-dulieu-tieuduong/main/
DataTest.csv' df = pd.read_csv ( url )
Trang 20inputs = df.drop ( 'LuongTren_20Trieu' , axis= 'columns' )
# Lấy cột LuongTren_20Trieu để làm biến phụ thuộc targets = df [ 'LuongTren_20Trieu' ]
- Do dữ liệu từ file csv là kiểu chuỗi nên ta tiến hành dùng hàm LabelEncoder() từ thư viện sklearn để chúng thành số nguyên để máy tính có thể hiểu được
# Bước 2: Conver dữ liệu text sang number
# chuyển các giá trị trong data từ dữ liệu text sang number (do máy tính chỉ xử lý được data có giá trị là số) le_Congty = LabelEncoder ()
le_Congviec = LabelEncoder ()
le_Bangcap = LabelEncoder ()
inputs [ 'Công ty' ] = le_Congty.fit_transform ( inputs [ 'CongTy' ])
inputs [ 'Công việc' ] = le_Congviec.fit_transform ( inputs [ 'CongViec' ])
inputs [ 'Bằng cấp' ] = le_Bangcap.fit_transform ( inputs [ 'BangCap' ])
- Lúc này trong bảng dữ liệu gốc của ta có thêm các cột giá trị vừa chuyển đổi thành số
Hình 3 Trực quan bảng dữ liệu sau khi chuyển thành số nguyên
- Ta tiến hành xoá bỏ cột có các giá trị là kiểu chuỗi bằng drop()
inputs_n = inputs.drop ([ 'CongTy' , 'CongViec' , 'BangCap' ,], axis= 'columns' )
Trang 21print ( inputs_n )
- Lúc này ta sẽ tách bảng dữ liệu thành 2 phần là train và test
- Ta sẽ lấy ra 70% của bảng dữ liệu để cho máy học và dùng 30% còn lại để kiểm tra độ chính xác
# Bước 3: Tạo model từ cây phân loại là đưa nó vào máy học
# Tạo model và đưa nó vào máy học
from sklearn.model_selection import train_test_split
X_train , X_test , y_train , y_test = train_test_split ( inputs_n , targets , test_size= 0.3 )
from sklearn.naive_bayes import GaussianNB
# Đại diện cho Gaussian Naive Bayes model = GaussianNB ()
# Đưa dữ liệu vào model máy học dựa trên Naive Bayes model.fit ( X_train , y_train )
- Dùng model.core để đánh giá lại mô hình chính xác bao nhiêu phần trăm
# Bước 4: Đánh giá mô hình máy học
# Đánh giá độ chính xác của mô hình doChinhXac = model.score ( X_test , y_test )
# Đếm số dòng dùng để học và kiểm tra sizeHocMay = ( round ( len ( X_train ) / len ( inputs ) , 2 )) sizeKiemTra =
( round ( len ( X_test ) / len ( inputs ) , 2 ))
- Sau đó ta tiến hành in kết quả thu được sau khi chạy model
# Bước 5: Xuất kết quả
print ( 'Từ tập dữ liệu có { len ( inputs )} dòng ta lấy ra { sizeHocMay* 100 } % cho máy học và dùng { sizeKiemT ra* 100 } % để kiểm tra' )
print ( 'Số dòng máy học: { len ( X_train )} \nSố dòng kiểm tra: { len ( X_test )} \n' )
print ( 'Kết quả máy dự đoán ra: \n { y_test [ 0 : 5 ]} \n' )
print ( 'Kết quả thực tế: \n { model.predict ( X_test [ 0 : 5 ])} ' )
print ( 'Độ chính xác của model máy học: { doChinhXac* 100 } % \n' )