You are on page 1of 69

TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI

KHOA CÔNG NGHỆ THÔNG TIN

======* * * ======

BÁO CÁO ĐỒ ÁN THUỘC HỌC PHẦN:

ĐỒ ÁN CHUYÊN NGÀNH

CHỦ ĐỀ : PHÂN LOẠI RƯỢU BẰNG KNN

KẾT HỢP PCA


GVHD: TS. Ngô Thị Thanh Hòa

Lớp: 20231IT6052001

Nhóm: 08

Thành viên: Nguyễn Tiến Anh – 2020607579

Bùi Xuân Điệp – 2020600916

Lê Đức Phi – 2020603655

Hà Nội, Năm 2023


Trường Đại Học Công Nghiệp Hà Nội 1 Khoa Công Nghệ Thông Tin

Mục Lục
DANH MỤC HÌNH ẢNH ......................................................................................... 3

LỜI CẢM ƠN ............................................................................................................ 5

MỞ ĐẦU .................................................................................................................... 6

CHƯƠNG 1: TỔNG QUAN VỀ ĐỀ TÀI ............................................................... 7

1.1 Lý do chọn đề tài ............................................................................................. 7


1.2 Tìm hiểu về bài toán phân loại rượu ............................................................. 8
1.2.1 Tổng quan về bài toán phân loại rượu ................................................... 8
1.2.2 Ứng dụng của công nghệ phân loại rượu trong đời sống hiện nay ..... 8
1.3 Tìm hiểu về Machine Learning (Học Máy) ................................................ 10
1.3.1 Khái niệm ................................................................................................ 10
1.3.2 Vai trò của Machine Learning .............................................................. 10
1.3.3 Một số kỹ thuật trong Machine Learning ............................................ 11
1.3.4 Một số phương pháp của Machine Learning ...................................... 11
CHƯƠNG 2: CƠ SỞ LÝ THUYẾT THUẬT TOÁN .......................................... 15

2.1 Thuật toán K-Nearest Neighbor (KNN)...................................................... 15


2.1.1 Định nghĩa ............................................................................................... 15
2.1.2 Quy trình làm việc của thuật toán KNN .............................................. 15
2.1.3 Lí do chọn KNN (K-Nearest Neighbors) .............................................. 15
2.1.4 Ví dụ minh họa ....................................................................................... 16
2.1.5 Ví dụ về KNN nhiễu ............................................................................... 17
2.1.6 Khoảng cách trong không gian vector ................................................. 17
2.1.7 Ưu điểm của thuật toán ......................................................................... 18
2.1.8 Nhược điểm của thuật toán ................................................................... 18
2.2 Thuật toán Principal Component Analysis (PCA)..................................... 19
2.2.1 Tiền xử lý dữ liệu (Standard Scaler) .................................................... 19
2.2.2 Định nghĩa PCA...................................................................................... 20
2.2.3 Công thức của PCA ................................................................................ 21
2.2.4 Kết hợp PCA với KNN .......................................................................... 22
Trường Đại Học Công Nghiệp Hà Nội 2 Khoa Công Nghệ Thông Tin

2.3 Logistics Regression ...................................................................................... 23


2.3.1 Định nghĩa ............................................................................................... 23
2.3.2 Cách hoạt động ....................................................................................... 24
2.3.3 Ưu điểm của thuật toán ......................................................................... 25
2.3.4 Nhược điểm của thuật toán ................................................................... 26
2.4 Support Vector Machine (SVM) .................................................................. 27
2.4.1 Tổng quan về SVM................................................................................. 27
2.4.2 Cách hoạt động của SVM ...................................................................... 27
2.4.3 Ưu điểm của SVM .................................................................................. 28
2.4.4 Nhược điểm của SVM ............................................................................ 29
CHƯƠNG 3: XÂY DỰNG MÔ HÌNH .................................................................. 30

3.1 Các thư viện chính được sử dụng cho mô hình phân loại. ........................ 30
3.1.1 Thư viện Numpy: ................................................................................... 30
3.1.2 Thư viện Matplotlib: .............................................................................. 34
3.1.3 Thư viện Pandas:.................................................................................... 39
3.1.4 Thư viện Scikit-learn ............................................................................. 42
3.2 Thực hiện xây dựng mô hình........................................................................ 46
3.2.1 Môi trường thực hiện: Google Colaboratory ...................................... 46
3.2.2 Các bước xây dựng mô hình cho bài toán. .......................................... 53
3.2.3 Mã giả xây dựng giải quyết bài toán: ................................................... 54
3.2.4 Chuẩn bị dữ liệu. .................................................................................... 54
3.2.5 Tiền xử lý dữ liệu.................................................................................... 59
3.2.6 Áp dụng PCA .......................................................................................... 62
3.2.7 Xây dựng mô hình KNN ........................................................................ 63
3.3 Đánh giá mô hình và khả năng dự đoán của mô hình ............................... 63
KẾT LUẬN .............................................................................................................. 67

TÀI LIỆU THAM KHẢO ...................................................................................... 68


Trường Đại Học Công Nghiệp Hà Nội 3 Khoa Công Nghệ Thông Tin

DANH MỤC HÌNH ẢNH

Hình 1.1 Học có giám sát (supervised learning) ...........................................................11


Hình 1.2 Học không có giám sát (unsupervised learning) ............................................12
Hình 1.3 Học bán giám sát (semi-supervised learning) ................................................13
Hình 1.4 Học tăng cường (reinforcement learning) ......................................................14
Hình 2.1 Ví dụ minh họa của thuật toán KNN .............................................................. 16
Hình 2.2 KNN nhiễu......................................................................................................17
Hình 2.3 Sử dụng module scikit-learn ...........................................................................21
Hình 2.4 Mô hình Navie Bayes .....................................................................................24
Hình 3.1 Thư viện Numpy ............................................................................................. 31
Hình 3.2 Tính chất mảng 1 chiều ..................................................................................32
Hình 3.3 Các loại ma trận khác chiều............................................................................32
Hình 3.4 Biểu đồ mối quan hệ giữa ndarray .................................................................33
Hình 3.5 Thư viện Matplotlib ........................................................................................35
Hình 3.6 Biểu đồ Matplotlib đơn giản ...........................................................................36
Hình 3.7 Biểu đồ Matplotlib chứa label ........................................................................36
Hình 3.8 Biểu đồ Matplotlib dùng figure ......................................................................37
Hình 3.9 Biểu đồ Matplotlib dùng thêm đối số ............................................................. 38
Hình 3.10 Biểu đồ Matplotlib chứa nhiều dữ liệu dùng plot.........................................38
Hình 3.11 Thư viện Pandas ...........................................................................................39
Hình 3.12 Thư viện Scikit-learn ....................................................................................42
Hình 3.13 Dữ liệu đầu vào............................................................................................. 46
Hình 3.14 Cách tạo dự án google colab ........................................................................48
Hình 3.15 Thêm google colab vào Marketplace của google .........................................48
Hình 3.16 Cài đặt google colab .....................................................................................49
Hình 3.17 Tùy chỉnh phần cứng để chạy dự án ............................................................. 49
Hình 3.18 Ví dụ code trên google colab ........................................................................49
Hình 3.19 Run all code trong dự án ..............................................................................50
Hình 3.20 Upload file ....................................................................................................54
Hình 3.21 Tên file dữ liệu ............................................................................................. 54
Hình 3.22 Xử lý giải nén dữ liệu .zip ............................................................................54
Trường Đại Học Công Nghiệp Hà Nội 4 Khoa Công Nghệ Thông Tin

Hình 3.23 Import thư viện ............................................................................................. 54


Hình 3.24 Đọc dữ liệu từ file .csv .................................................................................55
Hình 3.25 Liệt kê features có trong file .........................................................................55
Hình 3.26 Phân tích dữ liệu ...........................................................................................55
Hình 3.27 Kết quả phân tích dữ liệu..............................................................................56
Hình 3.28 Kết quả phân tích dữ liệu còn lại ..................................................................57
Hình 3.29 Mô tả dữ liệu trên biểu đồ Box plot ............................................................. 57
Hình 3.30 Biểu đồ Box plot 1 ........................................................................................58
Hình 3.31 Biểu đồ Box plot 2 ........................................................................................58
Hình 3.32 Biểu đồ Box plot 3 ........................................................................................58
Hình 3.33 Số nhãn phân loại .........................................................................................59
Hình 3.34 Trích chọn đặc trưng ....................................................................................59
Hình 3.35 Xác định đặc trưng quan trọng nhất ............................................................. 59
Hình 3.36 Chuẩn hóa dữ liệu bằng Standardization ......................................................60
Hình 3.37 Dữ liệu sau chuẩn hóa ..................................................................................61
Hình 3.38 Áp dụng PCA ............................................................................................... 62
Hình 3.39 Xây dựng mô hình KNN ..............................................................................63
Hình 3.40 Độ chính xác Accuracy ................................................................................63
Hình 3.41 Đánh giá chỉ số Recal ...................................................................................64
Hình 3.42 Đánh giá chỉ số precision .............................................................................64
Hình 3.43 Đánh giá F1-Score ........................................................................................65
Hình 3.44 Đánh giá khả năng dự đoán của mô hình .....................................................65
Hình 3.45 Đánh giá thêm về khả năng dự đoán ............................................................ 65
Trường Đại Học Công Nghiệp Hà Nội 5 Khoa Công Nghệ Thông Tin

LỜI CẢM ƠN
Lời đầu tiên nhóm thực hiện đề tài xin gửi lời cảm ơn đến giáo viên người
trực tiếp hướng dẫn, giảng dạy các học phần liên quan đến chuyên ngành Khoa
học máy tính trong suốt quá trình học tập, nghiên cứu và hoàn thành đề tài. Đề tài
“Phân loại rượu” là một bài toán thuộc phạm vi lĩnh vực Học Máy và hiện đã phổ
biến . Mô hình xây dựng được nhóm thực hiện hoàn thành, kỹ năng và kiến thức
của giảng viên bộ môn hướng dẫn đóng vai trò rất lớn đến sự hình thành tư duy
của nhóm. Chính vì vậy, nhóm thực hiện luôn cố gắng từng ngày và từng bước
học tập để phát triển hơn để đem kiến thức ra xã hội phục vụ. Đề tài này là một
đề tài tự chọn để đánh giá học phần Đồ án chuyên ngành. Qua học phần này, nhóm
đã học được thêm nhiều kỹ năng hiệu quả khi trình bày, viết báo cáo, tổ chức làm
việc nhóm,... Đồng thời ở học phần này, giảng viên bộ môn đã rất chăm chút, góp
ý và quan tâm tới các sinh viên để cải thiện kết quả đầu ra của học phần. Một lần
nữa, nhóm thực hiện xin cảm ơn riêng tới giảng viên TS. Ngô Thị Thanh Hòa đã
luôn động viên và hướng dẫn nhóm thực hiện.
Trường Đại Học Công Nghiệp Hà Nội 6 Khoa Công Nghệ Thông Tin

MỞ ĐẦU
Phân loại rượu là một bài toán luôn được quan tâm trong lĩnh vực công
nghiệp rượu, khi áp dụng mô hình tự động và phân loại. Một trong những công
trình lâu đời và đã có từ những năm 90. Vì vậy, hiện nay đã có rất nhiều phương
pháp được áp dụng để giải quyết vấn đề này như: mô hình SVM (Support Vector
Machine), hay mô hình KNN (K-Nearest Neighbor),... Mỗi mô hình đều có điểm
mạnh riêng và đều cho ra kết quả và độ chính xác cao. Tuy nhiên để phục vụ quá
trình học tập và nghiên cứu, đòi hỏi cải tiến và đưa ra những phương pháp mới
hơn để giải quyết bài toán. Nhằm nâng cao kiến thức, kinh nghiệm xử lý trong
lĩnh vực khoa học dữ liệu, đúc kết từ các phương pháp đã có sẵn. Trong quá trình
nghiên cứu và làm đề tài, các vấn đề mới sẽ phát sinh đem lại nhiều rủi do cho kết
quả đạt được của mô hình. Mô hình kết hợp KNN với PCA là một sự kết hợp tốt,
khắc phục nhược điểm, hỗ trợ nhau khi giải quyết bài toán phân loại. Nghiên cứu
này có thể đã có nhiều chuyên gia biết đến, tuy nhiên đề tài này là một đề tài hay
và phù hợp với năng lực của sinh viên. Dù vậy để tích cực trong học tập, nâng cao
trình độ nhóm sẽ cố gắng để đem lại mô hình tốt nhất trên cơ sở lý thuyết và thực
hành đã học ở các học phần liên quan trước đó.
Trường Đại Học Công Nghiệp Hà Nội 7 Khoa Công Nghệ Thông Tin

CHƯƠNG 1: TỔNG QUAN VỀ ĐỀ TÀI


1.1 Lý do chọn đề tài

Phân loại rượu là một chủ đề thực tế và có sự quan tâm rõ ràng từ ngành công
nghiệp thực phẩm và đồ uống. Dưới đây là một số lý do đề tài được chọn :

● Tính ứng dụng: Nghiên cứu về phân loại rượu có thể đóng góp vào việc
xác định chất lượng và đặc tính của rượu, giúp người tiêu dùng và chuyên
gia có thêm thông tin để lựa chọn và đánh giá rượu.
● Kỹ thuật Machine learning: KNN (K-Nearest Neighbors) là một thuật toán
phân loại đơn giản và dễ hiểu trong lĩnh vực máy học. Việc áp dụng KNN
vào bài toán phân loại rượu có thể giúp sinh viên nắm vững cách hoạt động
của thuật toán này và làm quen với các khái niệm như khoảng cách, lân
cận và phiên bản KNN kết hợp với PCA (Principal Component Analysis)
để giảm chiều dữ liệu. PCA là một phương pháp giảm chiều dữ liệu phổ
biến, kết hợp KNN với PCA có thể giúp giảm số chiều của dữ liệu, loại bỏ
sự tương quan giữa các đặc trưng và tăng tính hiệu quả của thuật toán KNN
trong việc phân loại rượu.
● Tính đa dạng và mới mẻ: Đề tài này kết hợp giữa hai khía cạnh quan trọng
trong lĩnh vực khoa học máy tính là phân loại và giảm chiều dữ liệu. Việc
nghiên cứu và xây dựng mô hình phân loại rượu bằng KNN kết hợp PCA
mang tính thú vị và mang lại những hiểu biết mới cho sinh viên trong quá
trình tìm hiểu và nghiên cứu.
● Tài liệu tham khảo: Đề tài phân loại rượu bằng KNN kết hợp PCA có sẵn
tài liệu tham khảo từ các nghiên cứu trước đó. Sinh viên có thể nắm vững
kiến thức từ các tài liệu đã có và tiếp tục phát triển, cải tiến hoặc so sánh
với các phương pháp khác để tăng độ chính xác và hiệu suất của mô hình.

Vậy có thể thấy việc chọn đề tài "Phân loại rượu bằng KNN kết hợp PCA"
có tính ứng dụng, mang tính thực tiễn, hợp lý về kỹ thuật máy học cung cấp
cơ hội để nghiên cứu và phát triển kiến thức trong lĩnh vực này.
Trường Đại Học Công Nghiệp Hà Nội 8 Khoa Công Nghệ Thông Tin

1.2 Tìm hiểu về bài toán phân loại rượu


1.2.1 Tổng quan về bài toán phân loại rượu

Bài toán phân loại rượu là một bài toán trong lĩnh vực nhận dạng và phân
loại. Mục tiêu của bài toán này là xác định loại rượu dựa trên các đặc trưng của
nó. Điều này có thể được thực hiện bằng cách sử dụng các thuật toán máy học và
kỹ thuật khai thác dữ liệu.

Trong quá trình phân loại rượu, các đặc trưng quan trọng của rượu được sử
dụng để tạo ra một mô hình phân loại. Các đặc trưng này có thể bao gồm các yếu
tố như thành phần hóa học, hương vị, màu sắc, quốc gia sản xuất, loại nho, độ
cồn, và nhiều yếu tố khác. Thông qua việc phân tích và xử lý dữ liệu, một mô hình
phân loại được xây dựng để tự động phân loại các loại rượu dựa trên những đặc
trưng này.

Có nhiều phương pháp và thuật toán có thể được áp dụng để giải quyết bài
toán phân loại rượu, bao gồm:

Có nhiều thuật toán khác nhau có thể được áp dụng vào bài toán phân loại
rượu, tùy thuộc vào quy mô dữ liệu, đặc trưng của rượu và yêu cầu cụ thể của bài
toán. Dưới đây là một số thuật toán phổ biến và thường được sử dụng trong phân
loại rượu:

- Support Vector Machine – SVM.


- Convolutional Neural Network (CNN).
- K-Nearest Neighbors – KNN.
- K-means
- Logictics Regression

1.2.2 Ứng dụng của công nghệ phân loại rượu trong đời sống hiện nay

Công nghệ phân loại rượu có nhiều ứng dụng trong đời sống hiện nay. Dưới
đây là một số ví dụ về các ứng dụng của công nghệ phân loại rượu:
Trường Đại Học Công Nghiệp Hà Nội 9 Khoa Công Nghệ Thông Tin

- Hướng dẫn mua sắm và đánh giá rượu: Công nghệ phân loại rượu có thể
được sử dụng để tạo ra các ứng dụng di động hoặc trang web giúp người
dùng lựa chọn rượu phù hợp với sở thích và nhu cầu của họ. Công nghệ này
có thể phân loại rượu dựa trên đặc trưng và mô tả của rượu để đưa ra các
đề xuất mua sắm và đánh giá từ người dùng khác.
- Quản lý kho rượu: Trong các nhà hàng, quầy bar hoặc cửa hàng rượu, công
nghệ phân loại rượu có thể giúp quản lý và phân loại kho rượu một cách
hiệu quả. Các hệ thống tự động có thể phân loại rượu theo loại, quốc gia
sản xuất, độ tuổi và giá trị, giúp tạo ra các báo cáo, đánh giá và quản lý kho
rượu một cách thuận tiện và chính xác.
- Chống giả và đảm bảo chất lượng: Công nghệ phân loại rượu cũng có thể
được sử dụng để phát hiện hàng giả và đảm bảo chất lượng rượu. Các hệ
thống phân loại rượu có thể so sánh thông tin về đặc trưng của một chai
rượu với các dữ liệu đã được xác định trước để xác định tính xác thực của
rượu và ngăn chặn sự giả mạo.
- Tư vấn rượu cá nhân: Công nghệ phân loại rượu có thể được sử dụng để
tạo ra các hệ thống tư vấn rượu cá nhân. Dựa trên thông tin về sở thích và
lịch sử tiêu dùng của người dùng, các hệ thống này có thể đề xuất và gợi ý
các loại rượu phù hợp với khẩu vị và sở thích cá nhân.
- Phân loại rượu trong quy trình sản xuất: Công nghệ phân loại rượu có thể
được áp dụng trong quy trình sản xuất rượu để giúp phân loại các loại rượu
theo chất lượng, hương vị, và đặc trưng khác. Điều này giúp đảm bảo rằng
sản phẩm cuối cùng đáp ứng các tiêu chuẩn chất lượng và sự đồng nhất của
một nhãn hiệu rượu.

Công nghệ phân loại rượu mang lại nhiều lợi ích và ứng dụng trong ngành
công nghiệp rượu và đời sống hàng ngày của chúng ta, từ mua sắm và tư vấn rượu
cho đến quản lý kho rượu và đảm bảo chất lượng sản phẩm.
Trường Đại Học Công Nghiệp Hà Nội 10 Khoa Công Nghệ Thông Tin

1.3 Tìm hiểu về Machine Learning (Học Máy)


1.3.1 Khái niệm

Là một lĩnh vực của trí tuệ nhân tạo liên quan đến việc nghiên cứu và xây
dựng các kĩ thuật cho phép các hệ thống học tự động từ dữ liệu để giải quyết
các vấn đề cụ thể. Ví dụ các mát có thể học cách phân loại thư điện tử có phải
thư rác hay không và tự động sắp xếp vào các thư mục tương ứng. Machine
Learning có liên quan thống kê với cả hai lĩnh vực đều nghiên cứu việc phân
tích dữ liệu, nhưng khác với thống kê, học máy tập trung vào sự phức tạp của
các giải thuật trong việc thực thi tính toán. Machine Learning có hiện nay
được áp dụng rộng rãi bao gồm truy tìm dữ liệu, máy phân tích thị trường
chứng khoán, phân loại tiếng nói và chữ viết …

1.3.2 Vai trò của Machine Learning

Ngày nay, hầu hết các ngành nghề khi phải làm việc với lượng dữ liệu lớn
đang dần nhận thấy sự quan trọng của Machine Learning. Nhiều ngành nghề
đã áp dụng chúng vào trong thực tiễn:

● Dịch vụ tài chính: Có thể thấy ngành nghề này liên quan đến những con số
và dữ liệu rất cao, chúng được sử dụng để xác định những thông tin quan
trọng về dữ liệu và ngăn chặn gian lận. Phân tích được các cơ hội đầu tư
tránh những rủi ro.
● Chính phủ: Các cơ quan an ninh cộng đồng và các đơn vị công ích đã sử
dụng cho các ứng dụng như phân tích dữ liệu cảm biến, phát hiện gian lận
và hành vi trộm cắp danh tính.
● Chăm sóc sức khỏe: Các thiết bị đeo trên người là ứng dụng dựa trên
Machine Learning, chúng có thể phân tích cảm biến để đánh giá sức khỏe
của bệnh nhân theo thời gian thực và đưa ra cảnh báo kịp thời.
● Dầu khí: ngành dầu khí sử dụng để tìm kiếm những nguồn năng lượng mới.
Phân tích được các chất khoáng phía dưới lòng đất và dự đoán lỗi cảm biến
của những máy lọc dầu.
Trường Đại Học Công Nghiệp Hà Nội 11 Khoa Công Nghệ Thông Tin

● Giao thông vận tải: Phân tích mô hình và xu hướng cho các địa hình cho
ngành vận tải. Đưa ra những tuyến đường hiệu quả hơn và dự đoán những
vấn đề tiềm ẩn về lợi nhuận.

1.3.3 Một số kỹ thuật trong Machine Learning

– Trợ lý cá nhân ảo (Virtual Personal Assistants)


– Phân loại khuôn mặt, giọng nói, vân tay, chữ, số,…
– Chuyển đổi lời nói thành văn bản
– Xử lý ngôn ngữ tự nhiên
– Chuyển đổi văn bản thành giọng nói
– Ứng dụng trong các mạng xã hội
– Tự động phân loại

1.3.4 Một số phương pháp của Machine Learning

- Học có giám sát (Supervised Learning):

Hình 1.1 Học có giám sát (supervised learning)


Học máy có giám sát yêu cầu thực hiện huấn luyện thuật toán với cả
dữ liệu đầu vào sẽ được gắn nhãn. Các thuật toán học tập có giám sát phù
hợp với các tác vụ sau:

● Phân loại nhị phân: Chia dữ liệu thành hai loại.

● Phân loại nhiều lớp: Lựa chọn giữa nhiều hơn hai loại câu trả lời.
Trường Đại Học Công Nghiệp Hà Nội 12 Khoa Công Nghệ Thông Tin

● Mô hình hồi quy: Dự đoán các giá trị liên tục.

● Ghép nối: Kết hợp các dự đoán của nhiều mô hình học máy để tạo ra
dự đoán chính xác
- Học không có giám sát (Unsupervised Learning):

Hình 1.2 Học không có giám sát (unsupervised learning)


Các thuật toán học máy không giám sát không yêu cầu dữ liệu phải
được gắn nhãn. Hầu hết các loại học sâu, bao gồm cả mạng thần kinh nhân
tạo, đều là các thuật toán không được giám sát. Các thuật toán học tập không
giám sát tốt cho các tác vụ sau:

● Phân cụm: Tách tập dữ liệu thành các nhóm dựa trên sự giống nhau.

● Phát hiện bất thường: Xác định các điểm dữ liệu bất thường trong tập

dữ liệu.

● Khai thác liên kết: Xác định các tập hợp các mục trong tập dữ liệu

thường xuyên xảy ra cùng nhau.

● Giảm kích thước: Giảm số lượng biến trong tập dữ liệu.

- Học bán giám sát (Semi-Supervised Learning):


Trường Đại Học Công Nghiệp Hà Nội 13 Khoa Công Nghệ Thông Tin

Hình 1.3 Học bán giám sát (semi-supervised learning)


Học máy bán giám sát hoạt động khi các nhà khoa học cung cấp một
lượng nhỏ dữ liệu đào tạo được gắn nhãn cho một thuật toán. Từ đó, thuật
toán tìm hiểu các kích thước của tập dữ liệu, sau đó nó có thể áp dụng cho
dữ liệu mới, chưa được gắn nhãn. Hiệu suất của các thuật toán thường được
cải thiện khi chúng đào tạo trên các tập dữ liệu được gắn nhãn. Tuy nhiên
việc ghi nhãn dữ liệu có thể tốn thời gian và tốn kém. Học máy bán giám sát
đặt nền tảng trung gian giữa hiệu suất của học máy có giám sát và hiệu quả
của học máy không giám sát. Một số lĩnh vực sử dụng phương pháp học máy
bán giám sát bao gồm:

● Dịch máy: Dạy các thuật toán dịch ngôn ngữ dựa trên ít hơn một từ
điển đầy đủ các từ.

● Phát hiện gian lận: Xác định các trường hợp gian lận khi bạn chỉ có
một vài ví dụ tích cực.

● Dán nhãn dữ liệu: Các thuật toán được đào tạo trên tập dữ liệu nhỏ
có thể học cách áp dụng nhãn dữ liệu cho các tập lớn hơn một cách
tự động.

- Học tăng cường (Reinforcement Learning):


Trường Đại Học Công Nghiệp Hà Nội 14 Khoa Công Nghệ Thông Tin

Hình 1.4 Học tăng cường (reinforcement learning)


Học máy tăng cường hoạt động bằng cách lập trình một thuật toán với
một mục tiêu riêng biệt và một bộ quy tắc được chỉ định để hoàn thành mục
tiêu đó. Các nhà khoa học cũng lập trình thuật toán để tìm kiếm phần thưởng
tích cực - mà nó nhận được khi thực hiện một hành động có lợi cho mục tiêu
cuối cùng - và tránh các hình phạt - mà nó nhận được khi thực hiện một hành
động khiến nó càng xa mục tiêu cuối cùng. Học máy tăng cường thường
được sử dụng trong các lĩnh vực như:

● Robot: Robot có thể học cách thực hiện các nhiệm vụ trong thế giới

thực bằng cách sử dụng kỹ thuật này.

● Trò chơi video: Học máy tăng cường đã được sử dụng để dạy bot

chơi một số trò chơi điện tử.

● Quản lý nguồn lực: Với nguồn lực hữu hạn và một mục tiêu xác định,

việc học máy tăng cường có thể giúp doanh nghiệp lập kế hoạch phân
bổ nguồn lực.
Trường Đại Học Công Nghiệp Hà Nội 15 Khoa Công Nghệ Thông Tin

CHƯƠNG 2: CƠ SỞ LÝ THUYẾT THUẬT TOÁN


2.1 Thuật toán K-Nearest Neighbor (KNN)
2.1.1 Định nghĩa

K-láng giềng gần nhất (K Nearest Neighbor - KNN) là một trong những
thuật toán học có giám sát đơn giản nhất trong Machine Learning. Ý tưởng của
KNN là tìm ra output của dữ liệu dữ trên thông tin của những dữ liệu training
gần nó nhất.

2.1.2 Quy trình làm việc của thuật toán KNN

● Bước 1: Xác định tham số K = số láng giềng gần nhất.


● Bước 2: Tính khoảng cách đối tượng cần phân lớp với tất cả các đối
tượng trong training data.
● Bước 3: Sắp xếp khoảng cách theo thứ tự tăng dần và xác định K láng
giềng gần nhất với đối tượng cần phân lớp.
● Bước 4: Lấy tất cả các lớp của K láng giềng gần nhất.
● Bước 5: Dựa vào phần lớn lớp của K để xác định lớp cho đối tượng cần
phân lớp.

2.1.3 Lí do chọn KNN (K-Nearest Neighbors)

K-nearest neighbor là một trong những thuật toán supervised-learning đơn


giản nhất (mà hiệu quả trong một vài trường hợp) trong Machine Learning. Khi
training, thuật toán này không học một điều gì từ dữ liệu training (đây cũng là
lý do thuật toán này được xếp vào loại lazy learning), mọi tính toán được thực
hiện khi nó cần dự đoán kết quả của dữ liệu mới. KNN có thể áp dụng được
vào cả hai loại của bài toán Supervised learning là Classification và Regression.

● Độ phức tạp tính toán của quá trình training là bằng 0.

● Việc dự đoán kết quả của dữ liệu mới rất đơn giản

● Không cần giả sử gì về phân phối của lớp.


Trường Đại Học Công Nghiệp Hà Nội 16 Khoa Công Nghệ Thông Tin

Với KNN, trong bài toán Classification, label của một điểm dữ liệu
mới (hay kết quả của câu hỏi trong bài thi) được suy ra trực tiếp từ K điểm dữ
liệu gần nhất trong training set. Label của một test data có thể được quyết định
bằng major voting (bầu chọn theo số phiếu) giữa các điểm gần nhất, hoặc nó
có thể được suy ra bằng cách đánh trọng số khác nhau cho mỗi trong các điểm
gần nhất đó rồi suy ra label.

Một cách ngắn gọn, KNN là thuật toán đi tìm đầu ra của một điểm dữ liệu
mới bằng cách chỉ dựa trên thông tin của K điểm dữ liệu trong training set gần
nó nhất (K-lân cận), không quan tâm đến việc có một vài điểm dữ liệu trong
những điểm gần nhất này là nhiễu.

2.1.4 Ví dụ minh họa

Hình 2.1 Ví dụ minh họa của thuật toán KNN


Bài toán được đặt ra: Bạn có điểm của một môn học nhưng bạn không biết
thuộc loại nào (Giỏi, khá). Giả sử bạn không biết bất kỳ quy tắc nào để phân
loại cả. Ta dễ dàng thấy: Hình vuông đỏ biểu diễn cho những bạn có điểm Khá,
hình tam giác xanh biểu diễn cho những bạn có điểm Giỏi. Điểm chấm xanh lá
là điểm của mình muốn tìm thuộc loại nào. Có một cách giải quyết là bạn phải
đi khảo sát những người xung quanh. Để biết điểm của mình thuộc loại nào thì
bạn phải đi hỏi những đứa có điểm gần số điểm mình nhất. Giả sử trong lớp 50
Trường Đại Học Công Nghiệp Hà Nội 17 Khoa Công Nghệ Thông Tin

đứa, mình khảo sát 3 đứa gần điểm mình nhất và được dữ liệu như hình trên.
Với K = 3 dựa theo hình trên ta dễ dàng nhận ra có hai hình tam giác xanh và
một hình vuông đỏ có khoảng cách gần nhất với điểm chấm xanh và với tỷ lệ
tam giác xanh nhiều hơn hình vuông đỏ ta có thể đoán được điểm của mình là
điểm Khá.

2.1.5 Ví dụ về KNN nhiễu

Hình 2.2 KNN nhiễu


Ví dụ trên đây là bài toán phân lơp với 3 lớp: Đỏ, Lam, Lục. Mỗi điểm dữ
liệu mới (test data point) sẽ được gán label theo màu của điểm mà nó thuộc về.
Trong hình này, có một vài vùng nhỏ xem lẫn vào các vùng lớn hơn khác màu.
Ví dụ có một điểm màu Lục ở gần góc 11 giờ nằm giữa hai vùng lớn với nhiều
dữ liệu màu Đỏ và Lam. Điểm này rất có thể là nhiễu. Dẫn đến nếu dữ liệu test
rơi vào vùng này sẽ có nhiều khả năng cho kết quả không chính xác.

2.1.6 Khoảng cách trong không gian vector

Trong không gian một chiều, khoảng cách giữa hai điểm là trị tuyệt đối
giữa hiệu giá trị của hai điểm đó. Trong không gian nhiều chiều, khoảng cách
giữa hai điểm có thể được định nghĩa bằng nhiều hàm số khác nhau, trong đó
độ dài đường thẳng nối hai điểm chỉ là một trường hợp đặc biệt trong đó. Nhiều
Trường Đại Học Công Nghiệp Hà Nội 18 Khoa Công Nghệ Thông Tin

thông tin bổ ích (cho Machine Learning) có thể được tìm thấy tại Norms
(chuẩn) của vector trong tab Math.

2.1.7 Ưu điểm của thuật toán

● Phương pháp KNN là một trong những phương pháp phân loại đơn giản
nhất và dễ hiểu. Nó không yêu cầu kiến thức chuyên sâu về toán học hay
lập trình máy tính, do đó có thể được áp dụng cho nhiều vấn đề phân loại
trong thực tế.

● KNN không yêu cầu giả định về phân phối của dữ liệu, nó có thể áp dụng
cho các tập dữ liệu phức tạp và không tuân theo phân phối chuẩn.

● KNN có thể được áp dụng cho nhiều loại dữ liệu, bao gồm cả dữ liệu số
và dữ liệu phân loại. Nó cũng có thể được sử dụng cho các bài toán phân
loại đa lớp.

● KNN có khả năng đạt được độ chính xác cao khi số lượng điểm dữ liệu
lớn và các điểm dữ liệu có khoảng cách giữa nhau đủ xa

● KNN có khả năng phân loại dữ liệu mới mà không cần phải tính toán lại
toàn bộ mô hình. Nó chỉ cần xác định khoảng cách giữa dữ liệu mới và
các điểm dữ liệu cũ, sau đó chọn K hàng xóm gần nhất và phân loại dữ
liệu mới dựa trên chúng.

2.1.8 Nhược điểm của thuật toán

● KNN nhạy cảm với nhiễu và giá trị ngoại lai: do các điểm gần nhau sẽ
xếp vào cùng một nhóm, ngoài ra nếu tồn tại giá trị ngoại lai sẽ ảnh
hưởng đáng kể đến kết quả phân loại

● Phụ thuộc vào số lượng hàng xóm (K): Số lượng hàng xóm được xác
định bởi giá trị của K. Nếu chọn giá trị K quá lớn, phân loại sẽ trở nên
quá đơn giản và không đủ linh hoạt để phân loại các trường hợp phức
Trường Đại Học Công Nghiệp Hà Nội 19 Khoa Công Nghệ Thông Tin

tạp. Ngược lại, nếu chọn giá trị K quá nhỏ, phân loại sẽ trở nên quá phức
tạp và dễ bị ảnh hưởng bởi nhiễu

● Tính toán phức tạp: Việc tính toán khoảng cách giữa các điểm dữ liệu có
thể làm phương pháp KNN trở nên chậm khi số lượng điểm dữ liệu lớn.
Điều này có thể ảnh hưởng đến hiệu suất của phương pháp khi tiếp cận
các tập dữ liệu lớn.

● Không tốt với các tập dữ liệu có số chiều lớn: Khi số chiều của tập dữ
liệu tăng lên, khoảng cách giữa các điểm dữ liệu sẽ trở nên giống nhau
và không còn đủ ý nghĩa để phân loại các điểm dữ liệu.

● Không hỗ trợ học tập: KNN không cung cấp quá trình học tập, nghĩa là
nó không học được các đặc trưng của tập dữ liệu để cải thiện kết quả
phân loại. Thay vào đó, nó chỉ đơn giản là lưu trữ toàn bộ tập dữ liệu và
dùng lại các điểm dữ liệu để phân loại.

2.2 Thuật toán Principal Component Analysis (PCA)


2.2.1 Tiền xử lý dữ liệu (Standard Scaler)

Thuật toán PCA cần phải xử lý dữ liệu đầu vào vì các lý do sau:

● Chuẩn hóa dữ liệu là bước cực kì quan trọng trong xử lí ảnh. Đây là
cách làm cho tất cả các biến và giá trị của chúng nằm trong một phạm
vi tương tự. Điều này sẽ giúp cho việc tính toán ma trận hiệp phương
sai và các vector riêng, giá trị riêng dễ dàng hơn bởi chiều dữ liệu đã
được giảm mà vẫn giữ được các đặc trưng chính, chỉ mất đi “chút ít”
đặc trưng. Và chúng ta sẽ tiết kiệm được thời gian, chi phí tính toán
cũng như dễ dàng mô hình hóa dữ liệu hơn.
● Để thoát khỏi sự phức tạp, đồ sộ trong tính toán , một quy trình được
gọi là giảm số chiều đã được đưa ra. Kỹ thuật giảm kích thước chỉ
được sử dụng để lọc một số các tính năng quan trọng cần thiết cho
việc đào tạo và đây là lúc PCA xuất hiện.
Trường Đại Học Công Nghiệp Hà Nội 20 Khoa Công Nghệ Thông Tin

Xử lý dữ liệu bằng Standard Scaler:


Standard Scaler là một phương pháp xử lý dữ liệu trong Machine
Learning giúp chuẩn hóa các đặc trưng trong tập dữ liệu sao cho chúng
có cùng thang đo và phân bố chuẩn với giá trị trung bình bằng 0 và độ
lệch chuẩn bằng 1. Điều này giúp cho các thuật toán Machine Learning
hoạt động hiệu quả hơn và đạt được kết quả tốt hơn.
Công thức chuẩn của phương pháp standardization như sau:
z = (x – u) / s
Trong đó:
z: là giá trị mới.
x: là giá trị gốc ban đầu.
u: là giá trị trung bình (mean).
s: là độ lệch chuẩn.

2.2.2 Định nghĩa PCA

Thuật toán PCA là một phương pháp giảm số chiều dữ liệu hiệu quả, được
sử dụng rộng rãi trong các bài toán học máy và khai phá dữ liệu.

Ví dụ về PCA.

Giả sử ta có một tập dữ liệu gồm 100 điểm dữ liệu, mỗi điểm có 5 thuộc
tính (features). Ta muốn giảm số chiều của dữ liệu từ 5 xuống 2 để có thể hiển
thị trực quan hơn trên một biểu đồ hai chiều.

Đầu tiên, ta sẽ chuẩn hóa dữ liệu bằng cách trừ đi trung bình và chia cho
độ lệch chuẩn của mỗi thuộc tính. Sau đó, ta sử adụng thuật toán PCA để tìm
ra hai thành phần chính (PC1 và PC2) của dữ liệu.

Kết quả thu được có thể hiển thị trên một biểu đồ hai chiều, với các điểm
dữ liệu được biểu diễn bằng các điểm trên biểu đồ này. Các điểm dữ liệu sẽ
được phân tán trên mặt phẳng theo hướng của PC1 và PC2.

Code:
Trường Đại Học Công Nghiệp Hà Nội 21 Khoa Công Nghệ Thông Tin

Để thực hiện PCA trên Python, ta có thể sử dụng module scikit-learn như sau:

Hình 2.3 Sử dụng modulefrom scikit-learn


Ưu điểm và nhược điểm:

● Ưu điểm:
o Giúp giảm số chiều của dữ liệu, làm cho việc phân tích và hiển thị
dữ liệu trở nên dễ dàng hơn.
o Các thành phần chính được sắp xếp theo độ quan trọng, giúp ta
hiểu được các yếu tố quan trọng nhất của dữ liệu.
o PCA có thể được sử dụng để loại bỏ nhiễu trong dữ liệu.
● Nhược điểm:
o PCA có thể gặp phải vấn đề về khả năng diễn giải, do các thành
phần chính không liên quan trực tiếp đến các thuộc tính ban đầu.
o PCA chỉ có thể áp dụng được cho các dữ liệu có phân phối chuẩn
và có tương quan tuyến tính giữa các thuộc tính.

2.2.3 Công thức của PCA

Dưới đây là các công thức quan trọng của PCA:

Ma trận hiệp phương sai:


Công thức tính ma trận hiệp phương sai (covariance matrix):
1 𝑇
𝑆 = ∑𝑁 1 (𝑋 − 𝑋) (𝑋 − 𝑋)
𝑁 𝑛=1

Trong đó:
Trường Đại Học Công Nghiệp Hà Nội 22 Khoa Công Nghệ Thông Tin

– 𝑆 là ma trận hiệp phương sai


– X là ma trận dữ liệu, mỗi hàng tương ứng với một quan sát
– 𝑋 là vector trung bình của các cột của ma trận $X$
– N là số lượng quan sát trong dữ liệu
– Giá trị riêng và vector riêng: (𝑆 − 𝜆𝐼)𝑢 = 0

Công thức tính giá trị riêng và vector riêng:

Trong đó:

– Σ: Ma trận hiệp phương sai


– λ: Giá trị riêng
– I: Ma trận đơn vị
– u: Vector riêng tương ứng với giá trị riêng λ.

Tính các thành phần chính: Z = X * W

Trong đó:

– Z: Ma trận các thành phần chính


– X: Ma trận dữ liệu
– W: Ma trận các vector riêng đã được chuẩn hóa

2.2.4 Kết hợp PCA với KNN

Khi kết hợp với thuật toán KNN (K-Nearest Neighbors), PCA có thể mang
lại một số ưu điểm như sau:

● Giảm số chiều dữ liệu: PCA giúp giảm số lượng thuộc tính của dữ liệu
xuống còn k thuộc tính, với k < số lượng thuộc tính ban đầu. Bằng cách
loại bỏ những thuộc tính không quan trọng hoặc tương quan với nhau,
PCA giúp tăng tính hiệu quả và độ chính xác của thuật toán KNN.
● Xử lý nhiễu: PCA có thể giúp loại bỏ các giá trị nhiễu và giảm ảnh hưởng
của chúng đến mô hình. Khi giảm số chiều dữ liệu, PCA cũng giúp loại
Trường Đại Học Công Nghiệp Hà Nội 23 Khoa Công Nghệ Thông Tin

bỏ các thông tin không cần thiết hoặc không có ý nghĩa trong dữ liệu, từ
đó giảm thiểu nhiễu và cải thiện độ chính xác của mô hình.
● Tăng tốc độ tính toán: Giảm số chiều dữ liệu giúp giảm thời gian tính
toán và tăng tốc độ xử lý dữ liệu, đặc biệt là khi số lượng mẫu dữ liệu
lớn.
● Tăng độ chính xác: Khi kết hợp với thuật toán KNN, PCA có thể giúp
tăng độ chính xác của mô hình bằng cách giảm số chiều dữ liệu và loại
bỏ các thuộc tính không quan trọng hoặc tương quan với nhau.

Tóm lại, kết hợp thuật toán PCA với thuật toán KNN có thể giúp tăng tính
hiệu quả và độ chính xác của mô hình, đặc biệt là khi xử lý các bài toán có số
lượng thuộc tính lớn và dữ liệu nhiễu.

2.3 Logistics Regression


2.3.1 Định nghĩa

Thuật toán Logistic Regression (Hồi quy Logistic) là một phương pháp
thống kê được sử dụng trong bài toán phân loại, đặc biệt là trong trường hợp
phân loại nhị phân (hai nhãn). Nó được sử dụng để dự đoán xác suất của một
sự kiện xảy ra dựa trên một tập hợp các đặc trưng (biến độc lập) liên quan.
Trường Đại Học Công Nghiệp Hà Nội 24 Khoa Công Nghệ Thông Tin

Hình 2.4 Mô hình Logistics Regression


2.3.2 Cách hoạt động

Mô hình Logistic Regression hoạt động bằng cách ước lượng xác suất xảy
ra của một sự kiện dựa trên một tập hợp các đặc trưng (biến độc lập).

Đầu vào: Tập dữ liệu huấn luyện gồm các mẫu có đặc trưng (biến độc lập) và
nhãn (biến phụ thuộc) đã được gán nhãn cho từng lớp phân loại.

Bước 1: Chuẩn bị dữ liệu

● Tiền xử lý dữ liệu: Bao gồm chuẩn hóa đặc trưng, xử lý các giá trị thiếu,
và chia thành tập huấn luyện và tập kiểm tra.

Bước 2: Khởi tạo tham số

● Khởi tạo trọng số w và bias b ban đầu. Các giá trị ban đầu có thể là 0
hoặc được chọn ngẫu nhiên.

Bước 3: Tính toán đầu ra và xác suất

● Tính tổng trọng số z bằng cách lấy tổng tích của giá trị đặc trưng và trọng
số tương ứng: z = w₁x₁ + w₂x₂ + ... + wₙxₙ + b
Trường Đại Học Công Nghiệp Hà Nội 25 Khoa Công Nghệ Thông Tin

● Áp dụng hàm sigmoid cho tổng trọng số để tính toán xác suất dự đoán:
p = 1 / (1 + e^(-z))

Bước 4: Tính toán hàm mất mát

● Sử dụng hàm mất mát (thường là Cross-Entropy Loss) để đánh giá độ sai
khác giữa giá trị dự đoán và nhãn thực tế: J(w) = -(1/N) * Σ[yᵢ * log(pᵢ)
+ (1 - yᵢ) * log(1 - pᵢ)]

Bước 5: Cập nhật tham số

● Sử dụng phương pháp tối ưu hóa như Gradient Descent, cập nhật các
trọng số để giảm hàm mất mát: wⱼ = wⱼ - α * (∂J(w) / ∂wⱼ) và b = b - α *
(∂J(w) / ∂b), trong đó α là learning rate (tỷ lệ học tập).

Bước 6: Lặp lại quá trình huấn luyện

● Tiếp tục lặp lại các bước trên bằng cách cập nhật tham số cho đến khi
đạt được sự hội tụ hoặc điều kiện dừng khác được đáp ứng.

Bước 7: Đánh giá mô hình

● Sử dụng tập dữ liệu kiểm tra để đánh giá hiệu suất của mô hình, bao gồm
độ chính xác (accuracy) và các độ đo đánh giá khác như độ phủ (recall),
độ chính xác (precision), F1-score, v.v.

f(x) = 𝜃wTx

2.3.3 Ưu điểm của thuật toán

● Đơn giản và dễ hiểu: Logistic Regression là một thuật toán đơn giản và
dễ hiểu, không đòi hỏi kiến thức toán cao cấp và có thể được áp dụng
một cách nhanh chóng.
● Tính linh hoạt: Thuật toán Logistic Regression có thể được áp dụng vào
các bài toán phân loại nhị phân và đa nhãn. Nó cũng có thể được mở rộng
Trường Đại Học Công Nghiệp Hà Nội 26 Khoa Công Nghệ Thông Tin

để xử lý các vấn đề phân loại đa lớp thông qua các phương pháp như
One-vs-Rest hoặc Softmax Regression.
● Xử lý tốt với dữ liệu lớn: Logistic Regression có thể xử lý tốt với các tập
dữ liệu lớn mà không gặp vấn đề về hiệu suất. Thuật toán có thể được tối
ưu hóa và huấn luyện nhanh chóng trên các tập dữ liệu lớn.
● Có thể xác định độ quan trọng của đặc trưng: Logistic Regression cung
cấp thông tin về độ quan trọng của từng đặc trưng trong việc phân loại.
Điều này cho phép hiểu rõ hơn về ảnh hưởng của từng đặc trưng lên kết
quả dự đoán.
● Khả năng giải thích kết quả: Kết quả của Logistic Regression có thể được
giải thích dễ dàng và logic, giúp hiểu rõ hơn về quyết định của mô hình.
Trọng số của từng đặc trưng cung cấp thông tin về đóng góp của chúng
vào kết quả phân loại.
● Tolerant với nhiễu và giá trị thiếu: Logistic Regression có khả năng xử
lý dữ liệu nhiễu và giá trị thiếu một cách tương đối tốt. Nó có khả năng
chịu được sự nhiễu và thích nghi với các điểm dữ liệu bất thường.

2.3.4 Nhược điểm của thuật toán

● Giới hạn trong phân loại phi tuyến: Logistic Regression mô hình hóa các
quan hệ tuyến tính giữa các đặc trưng và đầu ra. Do đó, nó không thể xử
lý tốt các quan hệ phi tuyến phức tạp giữa đặc trưng và nhãn.
● Dễ bị ảnh hưởng bởi giá trị nhiễu: Logistic Regression có thể nhạy cảm
với các giá trị nhiễu hoặc điểm dữ liệu bất thường. Các điểm nhiễu có
thể có ảnh hưởng lớn đến hướng của ranh giới phân loại và có thể dẫn
đến kết quả dự đoán không chính xác.
● Khả năng bị overfitting: Nếu không kiểm soát tốt việc quá khớp
(overfitting), Logistic Regression có thể tạo ra một mô hình quá phức tạp
và không thể tổng quát hóa tốt cho dữ liệu mới. Điều này xảy ra khi mô
hình quá phức tạp so với sự phân bố thực sự của dữ liệu huấn luyện.
Trường Đại Học Công Nghiệp Hà Nội 27 Khoa Công Nghệ Thông Tin

● Yêu cầu đặc trưng độc lập: Logistic Regression yêu cầu rằng các đặc
trưng độc lập với nhau, tức là không có tương quan hoặc phụ thuộc tuyến
tính mạnh giữa chúng. Nếu có sự tương quan mạnh hoặc đa cộng tuyến,
kết quả dự đoán của mô hình có thể không chính xác hoặc không ổn định.
● Khả năng xử lý dữ liệu lớn bị hạn chế: Mặc dù Logistic Regression có
khả năng xử lý tốt với dữ liệu lớn, nó có thể gặp khó khăn khi số lượng
đặc trưng (biến) rất lớn so với kích thước mẫu huấn luyện. Điều này có
thể dẫn đến hiện tượng quá khớp và yêu cầu các phương pháp xử lý dữ
liệu phù hợp.
● Không thích hợp cho bài toán phân loại đa lớp: Logistic Regression ban
đầu chỉ được thiết kế để giải quyết bài toán phân loại nhị phân. Mặc dù
có thể mở rộng để xử lý bài toán đa lớp, nhưng không hiệu quả bằng các
thuật toán phân loại

2.4 Support Vector Machine (SVM)


2.4.1 Tổng quan về SVM
SVM là một thuật toán giám sát, nó có thể sử dụng cho cả việc phân
loại hoặc đệ quy. Tuy nhiên nó được sử dụng chủ yếu cho việc phân loại.
Trong thuật toán này, chúng ta vẽ đồi thị dữ liệu là các điểm trong n
chiều ( ở đây n là số lượng các tính năng bạn có) với giá trị của mỗi tính
năng sẽ là một phần liên kết. Sau đó chúng ta thực hiện tìm "đường bay"
(hyper-plane) phân chia các lớp. Hyper-plane nó chỉ hiểu đơn giản là 1
đường thẳng có thể phân chia các lớp ra thành hai phần riêng biệt.
Support Vectors hiểu một cách đơn giản là các đối tượng trên đồ thị tọa
độ quan sát, Support Vector Machine là một biên giới để chia hai lớp tốt
nhất.
2.4.2 Cách hoạt động của SVM
● Chuẩn bị dữ liệu: Đầu tiên, dữ liệu được chuẩn bị và biểu diễn dưới
dạng các điểm trong không gian đặc trưng. Mỗi điểm dữ liệu được
Trường Đại Học Công Nghiệp Hà Nội 28 Khoa Công Nghệ Thông Tin

biểu diễn bởi một vector đặc trưng, trong đó mỗi thành phần của vector
là một đặc trưng của điểm dữ liệu.
● Xác định lớp mục tiêu: Mỗi điểm dữ liệu trong tập huấn luyện được
gán nhãn thuộc vào một lớp cụ thể. SVM được sử dụng chủ yếu cho
bài toán phân loại nhị phân, trong đó chỉ có hai lớp. Tuy nhiên, SVM
cũng có thể được mở rộng cho bài toán phân loại đa lớp.
● Tìm siêu phẳng tối ưu: SVM tìm một siêu phẳng (hyperplane) trong
không gian đặc trưng để phân chia các điểm dữ liệu thuộc vào các lớp
khác nhau. Siêu phẳng này được chọn sao cho khoảng cách từ các
điểm dữ liệu gần nhất của hai lớp (gọi là các vector hỗ trợ) đến siêu
phẳng là lớn nhất. Các điểm dữ liệu gần nhất này được gọi là các vector
hỗ trợ (support vectors).
● Tính toán biên quyết định: Sau khi siêu phẳng tối ưu được tìm thấy,
SVM sử dụng nó để xác định lớp của các điểm dữ liệu mới. Bằng cách
tính toán khoảng cách từ các điểm dữ liệu mới đến siêu phẳng, SVM
quyết định xem điểm dữ liệu đó thuộc vào lớp nào
● Điều chỉnh thông qua tham số: SVM có một số tham số quan trọng
cần điều chỉnh để tối ưu hiệu suất của mô hình. Các tham số này bao
gồm hằng số điều chỉnh đường biên (C) và hạt nhân (kernel) được sử
dụng để biến đổi không gian đặc trưng.
2.4.3 Ưu điểm của SVM
● Xử lý trên không gian số chiều cao: SVM là một công cụ tính toán
hiệu quả trong không gian chiều cao, trong đó đặc biệt áp dụng cho
các bài toán phân loại văn bản và phân tích quan điểm nơi chiều có thể
cực kỳ lớn.
● Tiết kiệm bộ nhớ: Do chỉ có một tập hợp con của các điểm được sử
dụng trong quá trình huấn luyện và ra quyết định thực tế cho các điểm
Trường Đại Học Công Nghiệp Hà Nội 29 Khoa Công Nghệ Thông Tin

dữ liệu mới nên chỉ có những điểm cần thiết mới được lưu trữ trong
bộ nhớ khi ra quyết định.
● Tính linh hoạt - phân lớp thường là phi tuyến tính. Khả năng áp dụng
Kernel mới cho phép linh động giữa các phương pháp tuyến tính và
phi tuyến tính từ đó khiến cho hiệu suất phân loại lớn hơn.

2.4.4 Nhược điểm của SVM


● Bài toán số chiều cao: Trong trường hợp số lượng thuộc tính (p) của
tập dữ liệu lớn hơn rất nhiều so với số lượng dữ liệu (n) thì SVM cho
kết quả khá tồi.
● Chưa thể hiện rõ tính xác suất: Việc phân lớp của SVM chỉ là việc cố
gắng tách các đối tượng vào hai lớp được phân tách bởi siêu phẳng
SVM. Điều này chưa giải thích được xác suất xuất hiện của một thành
viên trong một nhóm là như thế nào. Tuy nhiên hiệu quả của việc phân
lớp có thể được xác định dựa vào khái niệm margin từ điểm dữ liệu
mới đến siêu phẳng phân lớp mà chúng ta đã bàn luận ở trên.
Trường Đại Học Công Nghiệp Hà Nội 30 Khoa Công Nghệ Thông Tin

CHƯƠNG 3: XÂY DỰNG MÔ HÌNH


3.1 Các thư viện chính được sử dụng cho mô hình phân loại.
3.1.1 Thư viện Numpy:
– Giới thiệu về thư viện numpy:
Numpy (Numeric Python): là một thư viện toán học rât phổ biến và mạnh
mẽ của Python. NumPy được trang bị các hàm số đã được tối ưu, cho phép
làm việc hiệu quả với ma trận và mảng, đặc biệt là dữ liệu ma trận và mảng
lớn với tốc độ xử lý nhanh hơn nhiều lần khi chỉ sử dụng Python đơn thuần.
Nếu bạn muốn trở thành một lập trình viên khoa học dữ liệu chuyên sâu,
bạn cần phải nắm rõ numpy. Đây là một trong những thư viện hữu ích nhất
của python, đặc biệt là nếu bạn đang tìm hiểu về các con số. Vì phần lớn
Khoa học Dữ liệu và Máy học xoay quanh Thống kê, nên việc thực hành trở
nên quan trọng hơn nhiều.
NumPy được phát triển bởi Jim Hugunin. Phiên bản ban đầu là Numarray
được phát triển, có một số chức năng bổ sung. Năm 2005, Travis Oliphant
đã tạo ra gói NumPy bằng cách kết hợp các tính năng của Numarray và gói
Numeric.
Sử dụng NumPy, lập trình viên có thể thực hiện các thao tác sau:
● Các phép toán toán học và logic trên mảng.
● Các biến đổi Fourier và các quy trình để thao tác shape.
● Các phép toán liên quan đến đại số tuyến tính. NumPy tích hợp sẵn
các hàm cho đại số tuyến tính và tạo số ngẫu nhiên.
NumPy - Sự thay thế hoàn hảo cho MatLab
NumPy thường được sử dụng cùng với các gói như SciPy (Python
Scientific) và Mat-plotlib (thư viện vẽ đồ thị). Sự kết hợp này được sử dụng
rộng rãi để thay thế cho MatLab, một nền tảng phổ biến cho tính toán kỹ
thuật. Tuy nhiên, Python thay thế cho MatLab hiện được xem như một ngôn
ngữ lập trình hoàn thiện và hiện đại hơn.Điều quan trọng hơn cả là Numpy
Trường Đại Học Công Nghiệp Hà Nội 31 Khoa Công Nghệ Thông Tin

là một thư viện mã nguồn mở, miễn phí so với MatLab là một thư viện mã
nguồn đóng và phải trả phí .

Hình 3.1 Thư viện Numpy


– Cách cài đặt:

Trong bài này tôi sẽ thực hành trên ubuntu và Framework Django, nếu bạn
đang chạy trên HĐH khác thì chỉ cần gg là đều có hướng dẫn chi tiết
Đầu tiên mở Terminal lên và nhập:
sudo apt install python3-pip
pip install numpy
Bạn cần phải cài đặt Numpy thông qua pip.
Sau khi đã cài đặt xong NumPy, chúng ta cần import nó để sử dụng như
các thư viện khác của Python để sử dụng các hàm số của NumPy:

import numpy as np

Sau khi cài đặt xong chúng ta sẽ tìm hiểu về các kiểu dữ liệu trong Numpy
– Làm việc với mảng:

Mảng là một cấu trúc dữ liệu chứa một nhóm các phần tử. Thông
thường, tất cả các phần tử này có cùng kiểu dữ liệu, chẳng hạn như số
nguyên hoặc chuỗi. Chúng thường được sử dụng trong các chương trình để
sắp xếp dữ liệu để một bộ giá trị liên quan có thể dễ dàng được sắp xếp
hoặc tìm kiếm.
Khi nói đến NumPy, một mảng là một cấu trúc dữ liệu trung tâm của
thư viện. Đó là một lưới các giá trị và nó chứa thông tin về dữ liệu thô, cách
xác định vị trí của một phần tử và cách diễn giải một phần tử. Nó có một
Trường Đại Học Công Nghiệp Hà Nội 32 Khoa Công Nghệ Thông Tin

lưới các phần tử có thể được lập chỉ mục theo nhiều cách khác nhau . Tất
cả các phần tử có cùng kiểu, được gọi là kiểu mảng (kiểu dữ liệu).

Hình 3.2 Tính chất mảng 1 chiều

Một mảng có thể được lập chỉ mục bởi một bộ số nguyên không âm,
bởi boolean, bởi một mảng khác hoặc bởi số nguyên. Thứ hạng của mảng
là số thứ nguyên. Hình dạng của mảng là một loạt các số nguyên cho biết
kích thước của mảng dọc theo mỗi chiều. Một cách chúng ta có thể khởi
tạo mảng NumPy là từ danh sách Python lồng nhau.
Một mảng được gọi là cấu trúc dữ liệu trung tâm của thư viện
NumPy. Mảng trong NumPy được gọi là NumPy Array.

Hình 3.3 Các loại ma trận khác chiều

Đối tượng quan trọng nhất được định nghĩa trong NumPy là một kiểu
mảng N chiều được gọi là ndarray. Nó mô tả bộ sưu tập các mặt hàng cùng
Trường Đại Học Công Nghiệp Hà Nội 33 Khoa Công Nghệ Thông Tin

loại. Các mục trong bộ sưu tập có thể được truy cập bằng chỉ mục dựa trên
số không.
Mọi mục trong một ndarray có cùng kích thước khối trong bộ nhớ.
Mỗi phần tử trong ndarray là một đối tượng của đối tượng kiểu dữ liệu
(được gọi là dtype).
Bất kỳ mục nào được trích xuất từ đối tượng ndarray (bằng cách cắt)
được đại diện bởi một đối tượng Python thuộc một trong các kiểu vô hướng
mảng. Biểu đồ sau đây cho thấy mối quan hệ giữa ndarray, đối tượng kiểu
dữ liệu (dtype) và kiểu vô hướng mảng:

Hình 3.4 Biểu đồ mối quan hệ giữa ndarray


Một instance của ndarray có thể được xây dựng bằng các quy trình
tạo mảng khác nhau được mô tả ở phần sau của hướng dẫn. Ndarray cơ bản
được tạo bằng một array function trong NumPy như sau:

numpy.array()

Nó tạo ra một ndarray từ bất kỳ đối tượng nào hiển thị giao diện
mảng hoặc từ bất kỳ phương thức nào trả về một mảng.

numpy.array(object, dtype = None, copy = True, order = None, subok =


False, ndmin = 0)

Hàm tạo ở trên nhận các tham số sau:


Trường Đại Học Công Nghiệp Hà Nội 34 Khoa Công Nghệ Thông Tin

STT Mô tả thông số

1 object - Bất kỳ đối tượng nào hiển thị phương thức giao diện mảng sẽ trả về một mảng
hoặc bất kỳ chuỗi (lồng nhau) nào..

2 dtype - Kiểu dữ liệu mong muốn của mảng, optional

3 copy - Không bắt buộc. Theo mặc định (true), đối tượng được sao chép

4 order - C (hàng chính) hoặc F (cột chính) hoặc A (bất kỳ) (mặc định)

5 subok - Theo mặc định, mảng trả về buộc phải là mảng lớp cơ sở. Nếu đúng, các lớp
con được chuyển qua

6 ndmin - Chỉ định kích thước tối thiểu của mảng kết quả
Ví dụ:

import numpy as np

a = np.array([1,2,3])

print a

Kết quả : [1, 2, 3]


3.1.2 Thư viện Matplotlib:
– Giới thiệu chung
Là một thư viện Python được sử dụng rộng rãi để vẽ đồ thị và biểu đồ trong
khoa học dữ liệu và phân tích dữ liệu. Thư viện này cung cấp các công cụ vẽ
đồ thị đơn giản và linh hoạt, cho phép người dùng tạo ra các đồ thị đẹp và
chuyên nghiệp.

Để thực hiện các suy luận thống kê cần thiết, cần phải trực quan hóa dữ liệu
của bạn và Matplotlib là một trong những giải pháp như vậy cho người dùng
Python. Nó là một thư viện vẽ đồ thị rất mạnh mẽ hữu ích cho những người
làm việc với Python và NumPy. Module được sử dụng nhiều nhất của
Matplotib là Pyplot cung cấp giao diện như MATLAB nhưng thay vào đó, nó
sử dụng Python và nó là nguồn mở.
Trường Đại Học Công Nghiệp Hà Nội 35 Khoa Công Nghệ Thông Tin

Để cài đặt Matplotlib nếu bạn có Anaconda chỉ cần gõ conda install
matplotlib hoặc sử dụng tools pip pip install matplotlib

Hình 3.5 Thư viện Matplotlib


Một Matplotlib figure có thể được phân loại thành nhiều phần như dưới
đây:
● Figure: Như một cái cửa sổ chứa tất cả những gì bạn sẽ vẽ trên đó.
● Axes: Thành phần chính của một figure là các axes (những khung nhỏ hơn
để vẽ hình lên đó). Một figure có thể chứa một hoặc nhiều axes. Nói cách
khác, figure chỉ là khung chứa, chính các axes mới thật sự là nơi các hình
vẽ được vẽ lên.
● Axis: Chúng là dòng số giống như các đối tượng và đảm nhiệm việc tạo
các giới hạn biểu đồ.

● Artist: Mọi thứ mà bạn có thể nhìn thấy trên figure là một artist
như Text objects, Line2D objects, collection objects. Hầu hết các Artists
được gắn với Axes.
- Cách tạo biểu đồ đơn giản:
import matplotlib.pyplot as plt
import numpy as np
Ở đây chúng ta import Matplotlib’s Pyplot module và thư viện Numpy vì
hầu hết các dữ liệu mà ta sẽ làm việc sẽ chỉ ở dạng mảng.
Trường Đại Học Công Nghiệp Hà Nội 36 Khoa Công Nghệ Thông Tin

Hình 3.6 Biểu đồ Matplotlib đơn giản


Chúng ta chuyển hai mảng làm đối số đầu vào cho phương
thức plot() và sử dụng phương thức show() để gọi biểu đồ được yêu cầu. Ở
đây lưu ý rằng mảng đầu tiên xuất hiện trên trục x và mảng thứ hai xuất
hiện trên trục y của biểu đồ. Bây giờ, biểu đồ đầu tiên của chúng ta đã sẵn
sàng, chúng ta hãy thêm tiêu đề và đặt tên trục x và trục y bằng cách sử
dụng các phương thức title(), xlabel() và ylabel().

Hình 3.7 Biểu đồ Matplotlib chứa label


Trường Đại Học Công Nghiệp Hà Nội 37 Khoa Công Nghệ Thông Tin

Chúng ta cũng có thể chỉ định kích thước của hình bằng cách sử dụng
phương thức figure() và truyền các giá trị dưới dạng một tuple về độ dài
của các hàng và cột cho đối số figsize.

Hình 3.8 Biểu đồ Matplotlib dùng figure

Với mỗi đối số X và Y, bạn cũng có thể chuyển một đối số thứ ba
tùy chọn dưới dạng một chuỗi cho biết màu sắc và loại đường của biểu đồ.
Định dạng mặc định là b- có nghĩa là một đường màu xanh lam đặc. Trong
hình dưới đây, mình sử dụng go có nghĩa là vòng tròn màu xanh lá cây.
Tương tự như vậy, chúng ta có thể thực hiện nhiều kết hợp như vậy để định
dạng biểu đồ của mình.
Trường Đại Học Công Nghiệp Hà Nội 38 Khoa Công Nghệ Thông Tin

Hình 3.9 Biểu đồ Matplotlib dùng thêm đối số

Chúng ta cũng có thể vẽ nhiều bộ dữ liệu bằng cách chuyển vào nhiều bộ
đối số của trục X và Y trong phương thức plot() như bên dưới.

Hình 3.10 Biểu đồ Matplotlib chứa nhiều dữ liệu dùng plot


Trường Đại Học Công Nghiệp Hà Nội 39 Khoa Công Nghệ Thông Tin

3.1.3 Thư viện Pandas:


– Giới thiệu chung:
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.

Mục tiêu của pandas là trở thành khối căn bản (building block) cấp cao cơ
bản cho công việc thực tế, phân tích dữ liệu thế giới thực trong Python, và rộng
hơn là trở thành công cụ thao tác / phân tích mã nguồn mở mạnh mẽ và linh
hoạt nhất có sẵn trong bất kỳ loại ngôn ngữ lập trình nào.

Đây cũng là bộ công cụ phân tích và xử lý dữ liệu mạnh mẽ của ngôn ngữ
lập trình python. Thư viện này được sử dụng rộng rãi trong cả nghiên cứu lẫn
phát triển các ứng dụng về khoa học dữ liệu. Thư viện này sử dụng một cấu
trúc dữ liệu riêng là Dataframe. Pandas cung cấp rất nhiều chức năng xử lý và
làm việc trên cấu trúc dữ liệu này. Chính sự linh hoạt và hiệu quả đã khiến cho
pandas được sử dụng rộng rãi

Hình 3.11 Thư viện Pandas


– Vì sao bạn nên chọn pandas:

Pandas rất phù hợp với nhiều loại dữ liệu khác nhau:
● Dữ liệu dạng bảng với các cột được nhập không đồng nhất, như trong
bảng SQL hoặc bảng tính Excel.
● Dữ liệu chuỗi thời gian theo thứ tự và không có thứ tự (không nhất thiết
phải có tần số cố định).
Trường Đại Học Công Nghiệp Hà Nội 40 Khoa Công Nghệ Thông Tin

● Dữ liệu ma trận tùy ý (được nhập đồng nhất hoặc không đồng nhất) với
nhãn hàng và cột.
● Bất kỳ hình thức khác của các bộ dữ liệu quan sát / thống kê. Dữ liệu
thực sự không cần phải được dán nhãn vào cấu trúc dữ liệu pandas.
● Pandas được xây dựng dựa trên NumPy. Hai cấu trúc dữ liệu chính của
pandas là Series (1 chiều) và DataFrame (2 chiều) xử lý được phần lớn
các trường hợp điển hình trong tài chính, thống kê, khoa học xã hội và
nhiều lĩnh vực kỹ thuật.
Ưu điểm của pandas:
● Dễ dàng xử lý dữ liệu mất mát, được biểu thị dưới dạng NaN, trong dữ
liệu dấu phẩy động cũng như dấu phẩy tĩnh theo ý người dùng mong
muốn: bỏ qua hoặc chuyển sang 0.
● Khả năng thay đổi kích thước: các cột có thể được chèn và xóa khỏi
DataFrame và các đối tượng chiều cao hơn
● Căn chỉnh dữ liệu tự động và rõ ràng: các đối tượng có thể được căn
chỉnh rõ ràng với một bộ nhãn hoặc người dùng chỉ cần bỏ qua các nhãn
và để Series, DataFrame, v.v. tự động căn chỉnh dữ liệu cho bạn trong
các tính toán.
● Chức năng group by mạnh mẽ, linh hoạt để thực hiện các hoạt động kết
hợp phân tách áp dụng trên các tập dữ liệu, cho cả dữ liệu tổng hợp và
chuyển đổi.
● Dễ dàng chuyển đổi dữ liệu rời rạc (ragged), chỉ mục khác nhau
(differently-indexed) trong các cấu trúc dữ liệu khác của Python và
NumPy thành các đối tượng DataFrame.
● Cắt lát (slicing) thông minh dựa trên nhãn, lập chỉ mục ưa thích (fancy
indexing) và tập hợp lại (subsetting) các tập dữ liệu lớn.
● Gộp (merging) và nối (joining) các tập dữ liệu trực quan.
● Linh hoạt trong định hình lại (reshaping) và xoay (pivoting) các tập dữ
liệu.
Trường Đại Học Công Nghiệp Hà Nội 41 Khoa Công Nghệ Thông Tin

● Dán nhãn phân cấp (hierarchical) của các trục (có thể có nhiều nhãn trên
mỗi đánh dấu).
● Các công cụ IO mạnh mẽ để tải dữ liệu từ các tệp phẳng (flat file) như
CSV và delimited, tệp Excel, cơ sở dữ liệu và lưu / tải dữ liệu từ định
dạng HDF5 cực nhanh.
● Chức năng theo chuỗi thời gian (time series) cụ thể: tạo phạm vi ngày
và chuyển đổi tần số, thống kê cửa sổ di chuyển, dịch chuyển ngày và
độ trễ.
● Tích hợp tốt với các thư viện khác của python như SciPy,
Matplotlib, Plotly, v.v.
● Hiệu suất tốt.
– Cài đặt thư viện Pandas:

Sử dụng pip và gõ lệnh: pip install pandas

Hoặc bằng Anaconda, dùng lệnh: conda install pandas

Lưu ý: Bạn cần cài đặt thư viện NumPy trước (nếu bạn cài bằng Anaconda thì
NumPy đã có sẵn).

– Khai báo thư viện Pandas:


import pandas as pd
Bạn không nên thay đổi từ pd bằng từ khác vì các tài liệu hướng dẫn đều
ngầm quy ước như vậy.

Trong phạm vi bài viết này mình sẽ giới thiệu về các xử lý dữ liệu cho 2 cấu
trúc dữ liệu cơ bản trong pandas.

- Cách dùng:

Thư viện pandas có thể làm rất nhiều lệnh, tuy nhiên trong báo cáo nhóm dùng
thư viện để đọc file .csv là file dataset. Để thực hiện thao tác này, cần khai báo
thư viện như đã nói ở trên sau đó dùng lệnh:

DF = pd.read_csv(‘ĐƯỜNG DẪN TỚI FILE CSV’)


Trường Đại Học Công Nghiệp Hà Nội 42 Khoa Công Nghệ Thông Tin

Lúc này ta có biến DF là dataframe chứa thông tin của file dataset. Từ đó nhóm
bắt đầu dùng thuật toán để xử lý thông tin.
3.1.4 Thư viện Scikit-learn
Nếu bạn đang sử dụng Python và đang muốn tìm một thư viện mạnh mẽ mà
bạn có thể mang các thuật toán học máy (machine learning) vào trong một hệ
thống thì không còn thư viện nào thích hợp hơn scikit-learn. Thư viện này
tích hợp rất nhiều thuật toán hiện đại và cố điển giúp bạn vừa học vừa tiến
hành đưa ra các giải pháp hữu ích cho bài toán của bạn một cách đơn giản.
Đống thời nó là thư viện mạnh mẽ nhất dành cho các thuật toán học máy được
viết trên ngôn ngữ Python. Thư viện cung cấp một tập các công cụ xử lý các
bài toán machine learning và statistical modeling gồm: classification,
regression, clustering, và dimensionality reduction. Scikit-learn hỗ trợ mạnh
mẽ trong việc xây dựng các sản phẩm. Nghĩa là thư viện này tập trung sâu
trong việc xây dựng các yếu tố: dễ sử dụng, dễ code, dễ tham khảo, dễ làm
việc, hiệu quả cao. Dùng để tính toán và hỗ trợ nhiều ngôn ngữ của Machine
Learning ví dụ như: Decision Tree, K- Nearest Neighbor và một số thuật toán
khác...

Hình 3.12 Thư viện Scikit-learn


– Lịch sử hình thành:

Scikit-learn ban đầu được đề xuất bởi David Cournapeau trong một dự án
mùa hè của Google vào năm 2007.
Trường Đại Học Công Nghiệp Hà Nội 43 Khoa Công Nghệ Thông Tin

Later Matthieu Brucher tham gia dự án trên và bắt đầu sử dụng nó làm một
phần luận văn tiến sĩ của ông ấy. Vào năm 2010, INRIA bắt đầu tài trợ và
phiên bản đầu tiên được xuất bản (v0.1 beta) vào cuối tháng 1 năm 2010.

Dự án vẫn đang được nghiên cứu bởi một đội ngũ hơn 30 nhà nghiên cứu
đến từ các công ty lớn INRIA, Google, Tinyclues và Python Software
Foundation.

– Scikit-learn là gì?

Scikit-learn (Sklearn) là thư viện mạnh mẽ nhất dành cho các thuật toán
học máy được viết trên ngôn ngữ Python. Thư viện cung cấp một tập các công
cụ xử lý các bài toán machine learning và statistical modeling
gồm: classification, regression, clustering, và dimensionality reduction.
Thư viện được cấp phép bản quyền chuẩn FreeBSD và chạy được trên
nhiều nền tảng Linux. Scikit-learn được sử dụng như một tài liệu để học tập.
Để cài đặt scikit-learn trước tiên phải cài thư viện SciPy (Scientific
Python). Những thành phần gồm:

● Numpy: Gói thư viện xử lý dãy số và ma trận nhiều chiều


● SciPy: Gói các hàm tính toán logic khoa học
● Matplotlib: Biểu diễn dữ liệu dưới dạng đồ thị 2 chiều, 3 chiều
● IPython: Notebook dùng để tương tác trực quan với Python
● SymPy: Gói thư viện các kí tự toán học
● Pandas: Xử lý, phân tích dữ liệu dưới dạng bảng

Những thư viện mở rộng của SciPy thường được đặt tên dạng SciKits. Như
thư viện này là gói các lớp, hàm sử dụng trong thuật toán học máy thì được đặt
tên là scikit-learn.
Scikit-learn hỗ trợ mạnh mẽ trong việc xây dựng các sản phẩm. Nghĩa là
thư viện này tập trung sâu trong việc xây dựng các yếu tố: dễ sử dụng, dễ code,
dễ tham khảo, dễ làm việc, hiệu quả cao.
Trường Đại Học Công Nghiệp Hà Nội 44 Khoa Công Nghệ Thông Tin

Mặc dù được viết cho Python nhưng thực ra các thư viện nền tảng của
scikit-learn lại được viết dưới các thư viện của C để tăng hiệu suất làm việc.
Ví dụ như: Numpy(Tính toán ma trận), LAPACK, LibSVM và Cython.

– Nhóm thuật toán:

Thư viện tập trung vào việc mô hình hóa dữ liệu. Nó không tập trung vào
việc truyền tải dữ liệu, biến đổi hay tổng hợp dữ liệu. Những công việc này
dành cho thư viện Numpy và Pandas.
Sau đâu là một số nhóm thuật toán được xây dựng bởi thư viện scikit-learn:
● Clustering: Nhóm thuật toán Phân cụm dữ liệu không gán nhãn. Ví dụ
thuật toán KMeans
● Cross Validation: Kiểm thử chéo, đánh giá độ hiệu quả của thuật toán học
giám sát sử dụng dữ liệu kiểm thử (validation data) trong quá trình huấn
luyện mô hình.
● Datasets: Gồm nhóm các Bộ dữ liệu được tích hợp sẵn trong thư viện. Hầu
như các bộ dữ liệu đều đã được chuẩn hóa và mang lại hiêu suất cao trong
quá trình huấn luyện như iris, digit, ...
● Dimensionality Reduction: Mục đích của thuật toán này là để Giảm số
lượng thuộc tính quan trọng của dữ liệu bằng các phương pháp như tổng
hợp, biểu diễn dữ liệu và lựa chọn đặc trưng. Ví dụ thuật toán PCA
(Principal component analysis).
● Ensemble methods: Các Phương pháp tập hợp sử dụng nhiều thuật toán
học tập để có được hiệu suất dự đoán tốt hơn so với bất kỳ thuật toán học
cấu thành nào.
● Feature extraction: Trích xuất đặc trưng. Mục đích là để định nghĩa các
thuộc tình với dữ liệu hình ảnh và dữ liệu ngôn ngữ.
● Feature selection: Trích chọn đặc trưng. Lựa chọn các đặc trưng có ý nghĩa
trong việc huấn luyện mô hình học giám sát.
● Parameter Tuning: Tinh chỉnh tham số. Các thuật toán phục vụ việc lựa
chọn tham số phù hợp để tối ưu hóa mô hình.
Trường Đại Học Công Nghiệp Hà Nội 45 Khoa Công Nghệ Thông Tin

● Manifold Learning: Các thuật toán học tổng hợp và Phân tích dữ liệu đa
chiều phức tạp.
● Supervised Models: Học giám sát. Mảng lớn các thuật toán học máy hiện
nay. Ví dụ như linear models, discriminate analysis, naive bayes, lazy
methods, neural networks, support vector machines và decision trees.

3.2 Bộ dữ liệu huấn luyện thuật toán.

Bộ dữ liệu là 1 file csv trên UCI datasets được tạo bởi tác giả
Stefan Aeberhard và M.Forina . Đoạn mã này cũng là một bộ dữ liệu về phân loại
rượu, tương tự như bộ dữ liệu "Wine recognition dataset" của UCI Machine
Learning Repository, chứa thông tin các chỉ số hóa học của 178 mẫu được chia
thành 3 loại khác nhau có giá trị là [1], [2], [3] theo cột dữ liệu Wine tương ứng
là mức đánh giá chất lượng chuẩn của loại rượu. Ngoài ra còn có các thành phần
hóa học theo từng mẫu rượu để phân tích bao gồm 13 thuộc tính:
- Alcohol
- Malic acid
- Ash
- Alcalinity of ash
- Magnesium
- Total phenols
- Flavanoids
- Nonflavanoid phenols
- Proanthocyanins
- Color intensity
- Hue
- OD280/OD315 of diluted wines
- Proline

Dữ liệu của các thuộc tính trên đều liên tục và không có thuộc tính nào bị khuyết
số liệu.
Trường Đại Học Công Nghiệp Hà Nội 46 Khoa Công Nghệ Thông Tin

Hình 3.13 Dữ liệu đầu vào


3.2 Thực hiện xây dựng mô hình
3.2.1 Môi trường thực hiện: Google Colaboratory

– Google Colaboratory là gì?


Sử dụng Google Colab có những lợi ích ưu việt như: sẵn sàng chạy Python
ở bất kỳ thiết bị nào có kết nối internet mà không cần cài đặt, chia sẻ và làm
việc nhóm dễ dàng, sử dụng miễn phí GPU cho các dự án về AI. Bên cạnh đó,
Google Colab còn cung cấp cho bạn trải nghiệm lập trình Python tuyệt vời với
những nâng cấp cực kỳ hữu ích không có trong Jupyter Notebook, JupyterLab
đơn thuần.
Một số tính năng có thể kể đến như sau:
● Tạo mục lục dựa trên các Heading viết bằng ngôn ngữ
markdown giúp bạn dễ dàng cấu trúc Notebook làm việc của mình. Bạn
cũng có thể Thu gọn (Collapse) hay Mở rộng (Expand) các phần nội
dung khi soạn thảo cực kỳ tiện lợi.
● Thêm hình ảnh, biểu mẫu dễ dàng với markdown giúp bạn trình bày
báo cáo hoặc làm dashboard cực tiện lợi. Thậm chí bạn có thể ẩn các
dòng code để trông Notebook gọn gàng hơn với tính năng biểu mẫu.
● Kết nối dễ dàng với Google Drive, Google Sheets để bắt tay vào phân
tích dữ liệu “trên mây” hoàn toàn.
● Chạy Python trên Cloud hay Local Runtime (Python trên máy tính
cá nhân) của bạn đều cho trải nghiệm tốt. Bạn vẫn tận dụng được tính
Trường Đại Học Công Nghiệp Hà Nội 47 Khoa Công Nghệ Thông Tin

năng tuyệt vời của Google Colab khi chạy với Python trên Local
Runtime trong khi không bị Google tự động xóa dữ liệu khi kết thúc
phiên làm việc như khi chạy trên Cloud.
● Tự động lưu lịch sử chỉnh sửa thành các phiên bản giúp bạn dễ dàng
khôi phục lại phiên bản gần nhất nếu cần khi bạn gặp lỗi. Tính năng
này tương tự như trên Google Sheets hay Google Docs, bạn thậm chí
không cần đến Github để lưu trữ các phiên bản chỉnh sửa này.
● Cho phép tìm kiếm và chèn các đoạn mã được soạn thảo sẵn trong
các Template (bởi bạn) vào Notebook. Tính năng này rất hay bởi bạn
không cần phải mở thêm nhiều file lưu trữ để tìm lại các đoạn code mẫu
mình đã biết khi cần. Workflow lập trình Python trở nên đơn giản và
hiệu quả hơn rất nhiều.
● Tạo dashboard viết bằng Python và chia sẻ với team dễ dàng nếu
cần tương tự như Google DataStudio nhưng linh hoạt và mạnh mẽ hơn
rất nhiều.
Tuy nhiên Google Colab có 1 nhược điểm là dữ liệu (bộ nhớ tạm) của phiên
làm việc sẽ bị xóa sau khi bạn không active trong 1 thời gian nhất định để
Colab đảm bảo có thể cung cấp tài nguyên miễn phí cho nhiều người.
Do đó mỗi khi mở Google Colab, nếu bạn cần sử dụng các thư viện của bên
thứ 3 thì bạn cần install và import lại từ đầu để có thể sử dụng.
– Cách tạo:
Yêu cầu duy nhất để sử dụng Colab là bạn có Account Google.
Để truy cập và sử dụng google Colab, bạn vào mục Google Drive sau đó vào
mục mới, tìm đến dòng Kết nối dụng khác, chọn Colaboratory.
Trường Đại Học Công Nghiệp Hà Nội 48 Khoa Công Nghệ Thông Tin

Hình 3.14 Cách tạo dự án google colab

Hình 3.15 Thêm google colab vào Marketplace của google


Trường Đại Học Công Nghiệp Hà Nội 49 Khoa Công Nghệ Thông Tin

Hình 3.16 Cài đặt google colab

Hình 3.17 Tùy chỉnh phần cứng để chạy dự án


Bạn vào Edit\Notebook Setting để có thể tùy chọn phần cứng để chạy đoạn
code của mình, có thể chọn GPU, TPU.

Hình 3.18 Ví dụ code trên google colab


Trường Đại Học Công Nghiệp Hà Nội 50 Khoa Công Nghệ Thông Tin

Vậy là bạn có thể chạy thử những dòng code của mình trên Google Colab
rồi đó.
Ngoài cách click chuột vào biểu tượng mũi tên tam giác ở phía trên, chúng
ta có cách khác để chương trình chạy tất cả, chạy từng cái hay chỉ chạy những
đoạn code mình chọn, thì chọn Runtime trên Toolbar như hình dưới đây.

Hình 3.19 Run all code trong dự án


– Thao tác cơ bản:
Thiết lập Ngôn ngữ hiển thị
Google Colab mặc định hiển thị ngôn ngữ tiếng Việt nhưng nếu bạn
cần thay đổi ngôn ngữ, hãy tìm lựa chọn này ở menu Trợ giúp >> Xem
bằng tiếng Anh.
Bật các tùy chọn hỗ trợ lập trình
Mở mục cài đặt và chọn Editor, tick chọn hết tất cả các tùy chọn
trong mục này. Trong đó đặc biệt là Show line numbers giúp bạn hiển thị
số thứ tự của dòng code trong 1 code cell và Show indentation guides giúp
hiển thị căn thụt đầu dòng rất hữu ích, hạn chế xảy ra lỗi định dạng khoảng
cách không đúng trong Python.
Tạo mới, mở hoặc upload 1 Notebook sẵn có
Để mở File với Google Colab, bạn có thể sử dụng tổ hợp phím tắt Ctrl
+ O (hoặc Command + O trên Macbook). Bạn có 5 tùy chọn chính trong đó
có :
Trường Đại Học Công Nghiệp Hà Nội 51 Khoa Công Nghệ Thông Tin

● Examples cho phép mở các dataset ví dụ


● Recent: Mở notebook được chạy gần đây
● Google Drive: mở Jupyter Notebook từ Drive (file định dạng .ipynb)
● Github: Cho phép bạn kết nối với Github và clone các project của
mình cũng như mở bằng Colab
● Upload cho phép bạn duyệt file trên máy tính cá nhân và tải lên file
notebook có định dạng .ipynb
Lưu Notebook đang làm việc
Google Colab thực hiện lưu dữ liệu làm việc của bạn hoàn toàn tự
động tuy nhiên trong trường hợp bạn chưa yên tâm hoặc muốn có nhiều tùy
chọn lưu trữ hơn thì có thể tìm đến Menu >> File và chọn lưu file trên
Google Drive hay Github tùy mục đích của mình.
Download Notebook
Bạn có thể tải Notebook về máy dưới dạng file Jupyter Notebook có
định dạng .ipynb hoặc file Python có định dạng .py bằng cách mở
menu File >> Download sau đó chọn định dạng file tương ứng.
Upload Dữ liệu
Để upload dữ liệu vào bộ nhớ tạm của session làm việc trong Colab,
bạn có thể chọn mục Folder như trong hình sau đó chọn icon Upload dữ
liệu như hình minh họa dưới đây.
Trong trường hợp bạn sử dụng dữ liệu từ Google Drive để làm việc,
hãy theo dõi hướng dẫn ở phần tiếp theo của bài viết.
Copy File Path
Để có thể copy đường dẫn file hoặc thư mục khi bạn cần thao tác mở
hoặc lưu trữ file, bạn có thể nhấp chuộc phải vào file hoặc folder trong cây
thư mục và chọn Copy path.
– Runtime – Môi trường thực thi Python trong Google Colab:
Cách thực thi các dòng lệnh Python
Để thực thi các dòng lệnh trên Google Colab, bạn click vào nút Play ở
đầu mỗi code cell hoặc chọn code cell cần thực thi sau đó dùng tổ hợp phím
Trường Đại Học Công Nghiệp Hà Nội 52 Khoa Công Nghệ Thông Tin

tắt Shift + Enter. Bạn cũng có thể sử dụng Menu Runtime với các tuỳ chọn
thực thi đa dạng như:
● Run all: thực thi toàn bộ các dòng lệnh có trong Colab
● Run before: Thực thi các dòng lệnh xuất hiện trước code cell bạn
đang chọn
● Run the focus cell: Thực thi code cell bạn đang chọn
● Run the selection: Thực thi các code cell bạn lựa chọn (ấn giữ phím
Shift và dùng chuột để lựa chọn nhiều code cell)
Run after: Thực thi các code cell kể từ code cell bạn đang chọn về sau
Dừng thực thi lệnh & khởi động lại môi trường
Đôi khi việc thực thi xảy ra không như mong muốn, bạn có thể muốn
dừng thực thi hoặc khởi động lại môi trường làm việc của Google Colab
(runtime). Các tuỳ chọn dưới đây của Runtime menu sẽ giúp ích cho bạn:
● Interrupt execution: Dừng thực thi các câu lệnh
● Restart runtime: Khởi động lại runtime để cập nhật các thay đổi (ví
dụ khi bạn cài đặt thư viện mới và bắt buộc phải restart runtime để
áp dụng các thay đổi) hoặc đơn giản là xoá các lỗi & chạy lại runtime.
● Restart and run all: Khởi động lại runtime và chạy toàn bộ câu lệnh
trong Colab
● Factory reset runtime: Xoá toàn bộ trạng thái thực thi hiện tại của
runtime bao gồm các khai báo biến, file sau đó khởi động lại runtime.
Thay đổi loại Runtime trên Google Colab
Khi sử dụng Colab cho các project liên quan đến Machine Learning
có thể bạn sẽ muốn khai thác tối đa sức mạnh của Google Colab để thực thi
lệnh với ít thời gian hơn. Khi đó tuỳ chọn tăng tốc phần cứng với GPU hoặc
TPU sẽ trở nên cực kỳ hữu ích.
Để thay đổi tuỳ chọn Runtime, bạn tìm từ Menu > Runtime >
Change runtime type
Cài đặt thư viện mới
Trường Đại Học Công Nghiệp Hà Nội 53 Khoa Công Nghệ Thông Tin

Để cài đặt thư viện mới không có sẵn trong Google Colab, bạn thực
thi câu lệnh
pip install package_name
Ở một code cell bất kỳ trong đó package_name là tên thư viện bạn muốn
cài đặt thêm. Ví dụ, để cài đặt thư viện facebook business sdk cho Python,
chúng ta thực thi câu lệnh pip install facebook_business.
Thông thường bạn sẽ phải cài đặt lại các thư viện không có sẵn khi làm việc
với Colab sau khi kết thúc session làm việc trước đó 1 thời gian (không có con
số cụ thể, có thể là 15 – 30 phút không hoạt động). Điều này cũng gây ra đôi
chút khó chịu và mất thời gian để cài lại các thư viện nếu bạn sử dụng nhiều
thư viện bên ngoài.
Import thư viện
Để import 1 thư viện bất kỳ vào Colab bạn sử dụng câu lệnh
import package_name as something
Trong đó package_name là thư viện bạn muốn import, something ở đây là
tên ngắn gọn (alias) bạn muốn đặt cho thư viện đó để tiện gọi thư viện khi làm
việc.
3.2.2 Các bước xây dựng mô hình cho bài toán.
1. Chuẩn bị dữ liệu: Đọc dữ liệu từ file CSV và chia dữ liệu thành hai tập con
là tập huấn luyện và tập kiểm tra.
2. Tiền xử lý dữ liệu: Chuẩn hóa dữ liệu bằng phương pháp chuẩn hóa Z-score
để đưa các thuộc tính về cùng đơn vị và giá trị trung bình bằng 0.
3. Áp dụng PCA: Sử dụng thư viện PCA để giảm số chiều của dữ liệu xuống
còn k chiều (trong đó, k < số lượng thuộc tính ban đầu).
4. Xây dựng mô hình KNN: Áp dụng thuật toán KNN để phân loại dữ liệu, sử
dụng tập huấn luyện đã được giảm số chiều bởi PCA.
5. Đánh giá mô hình: Đánh giá mô hình bằng cách đưa tập kiểm tra qua mô
hình và tính toán độ chính xác của mô hình.
Trường Đại Học Công Nghiệp Hà Nội 54 Khoa Công Nghệ Thông Tin

3.2.3 Mã giả xây dựng giải quyết bài toán:

o Upload file zip và giải nén sau khi download zip trên link git:

https://gist.github.com/tijptjik/9408623

Hình 3.20 Upload file


o Click choose files và chọn file zip:

Hình 3.21 Tên file dữ liệu


o Giải nén file zip

Hình 3.22 Xử lý giải nén dữ liệu .zip


3.2.4 Chuẩn bị dữ liệu.

o Các thư viện cần thiết.

Hình 3.23 Import thư viện


Trường Đại Học Công Nghiệp Hà Nội 55 Khoa Công Nghệ Thông Tin

o Đọc dữ liệu từ file csv.

Hình 3.24 Đọc dữ liệu từ file .csv


o Liệt kê features.

Hình 3.25 Liệt kê features có trong file


o Phân tích dữ liệu theo giá trị min, max, mean.

Hình 3.26 Phân tích dữ liệu


Trong dataset là một phần quan trọng trong việc khám phá dữ liệu (data
exploration) và cung cấp thông tin cơ bản về phân bố của các thuộc tính trong dữ
liệu.

Cụ thể, các giá trị này có thể cung cấp cho chúng ta những thông tin sau:

● Giá trị min: đây là giá trị nhỏ nhất trong cột dữ liệu. Điều này có thể
giúp xác định các giá trị ngoại lệ (outliers) trong dữ liệu.
● Giá trị max: đây là giá trị lớn nhất trong cột dữ liệu. Điều này cũng giúp
xác định các giá trị ngoại lệ trong dữ liệu.
Trường Đại Học Công Nghiệp Hà Nội 56 Khoa Công Nghệ Thông Tin

● Giá trị mean: đây là giá trị trung bình của các giá trị trong cột dữ liệu.
Điều này có thể giúp chúng ta hiểu rõ hơn về phân bố của thuộc tính này
trong dữ liệu.
Từ những thông tin này, có thể phân tích và đưa ra những kết luận về dữ
liệu, giúp chúng ta hiểu rõ hơn về các thuộc tính trong dữ liệu và có thể xây dựng
các mô hình dự đoán chính xác hơn.

Hình 3.27 Kết quả phân tích dữ liệu


Trường Đại Học Công Nghiệp Hà Nội 57 Khoa Công Nghệ Thông Tin

Hình 3.28 Kết quả phân tích dữ liệu còn lại


o Mô tả trực quan trên biểu đồ Box plot

Hình 3.29 Mô tả dữ liệu trên biểu đồ Box plot


Biểu đồ box plot cho phép chúng ta nhìn thấy phân bố của dữ liệu và xác
định các giá trị ngoại lệ một cách trực quan. Nó cũng cung cấp các thông tin về
độ lệch của dữ liệu và cung cấp cơ sở cho so sánh giữa các nhóm dữ liệu khác
nhau.

Biểu đồ box plot thường được sử dụng trong phân tích thống kê, khoa học
dữ liệu và machine learning để khám phá dữ liệu và kiểm tra giả định về phân
phối của dữ liệu.
Trường Đại Học Công Nghiệp Hà Nội 58 Khoa Công Nghệ Thông Tin

Hình 3.30 Biểu đồ Box plot 1

Hình 3.31 Biểu đồ Box plot 2

Hình 3.32 Biểu đồ Box plot 3


Trường Đại Học Công Nghiệp Hà Nội 59 Khoa Công Nghệ Thông Tin

o Kiểm tra số nhãn theo thành phần Wine để phân loại

Hình 3.33 Số nhãn phân loại


3.2.5 Tiền xử lý dữ liệu

o Xác định các đặc trưng quan trọng nhất

Hình 3.34 Trích chọn đặc trưng


Đoạn code trên trích chọn các đặc trưng (features) từ bộ dữ liệu gốc và tạo
ra 2 mảng numpy là X chứa các giá trị đặc trưng và y chứa các giá trị nhãn tương
ứng. Kết quả trả về là 2 mảng numpy X và y, chứa các giá trị đặc trưng và nhãn
tương ứng được lấy ra từ bộ dữ liệu gốc.

Hình 3.35 Xác định đặc trưng quan trọng nhất


Đoạn code trên sử dụng thư viện Scikit-learn để tạo một mô hình Random
Forest Classifier và xác định các đặc trưng quan trọng nhất trong dữ liệu đầu vào.
Trường Đại Học Công Nghiệp Hà Nội 60 Khoa Công Nghệ Thông Tin

Cụ thể, các bước được thực hiện như sau:

1. Tạo một mô hình Random Forest với 100 cây quyết định
(n_estimators=100) và đặt giá trị random_state=42 để đảm bảo kết
quả được tái lập.
2. Sử dụng phương thức fit() để huấn luyện mô hình với dữ liệu đầu
vào X và các nhãn y tương ứng.
3. Sử dụng thuộc tính feature_importances_ của mô hình Random
Forest để lấy độ quan trọng của các đặc trưng trong dữ liệu đầu vào.
4. Xác định các đặc trưng quan trọng nhất bằng cách lặp qua các giá trị
độ quan trọng và thêm tên cột tương ứng vào danh sách
important_features nếu giá trị độ quan trọng lớn hơn 0.05.

Cuối cùng, danh sách important_features là danh sách các đặc trưng quan
trọng nhất được xác định bởi mô hình Random Forest. Các đặc trưng này có mức
độ ảnh hưởng cao đến kết quả dự đoán của mô hình và có thể được sử dụng để tối
ưu hóa mô hình hoặc phân tích dữ liệu.

Kết quả của chương trình này là nhằm giảm thời gian phân tích và đánh giá
dựa trên thống kê các cây quyết định. Các thành phần chính được xác định bao
gồm 'Phenols', 'Proanth', 'Color.int', 'Hue', 'OD' và nhãn để phân loại 'Wine'.

o Chuẩn hóa dữ liệu dataset

Hình 3.36 Chuẩn hóa dữ liệu bằng Standardization


Đoạn code trên sử dụng phương pháp chuẩn hóa dữ liệu (standardization)
để chuyển đổi dữ liệu đầu vào X thành dữ liệu có mean=0 và standard deviation=1.
Sau đó cập nhật lại mean và standard deviation để tính toán đầu ra. Việc chuẩn
Trường Đại Học Công Nghiệp Hà Nội 61 Khoa Công Nghệ Thông Tin

hóa dữ liệu giúp cho các đặc trưng trong dữ liệu có phạm vi giá trị tương đương,
giúp cho các thuật toán học máy hoạt động tốt hơn.

Cụ thể, các bước được thực hiện như sau:

Tạo một đối tượng StandardScaler () từ thư viện scikit-learn.

1. Sử dụng phương thức fit_transform() của đối tượng scaler để chuẩn


hóa dữ liệu đầu vào X. Phương thức này tính toán giá trị trung bình
và độ lệch chuẩn của từng đặc trưng trong dữ liệu và sử dụng chúng
𝑥−𝑚𝑒𝑎𝑛
để chuyển đổi dữ liệu theo công thức: , với x là giá trị của đặc
𝑠

trưng, mean và s lần lượt là giá trị trung bình và độ lệch chuẩn của
đặc trưng tương ứng.
2. Lưu dữ liệu đã chuẩn hóa vào biến X_scaled.

Kết quả trả về là một ma trận numpy chứa dữ liệu đã được chuẩn hóa.

Hình 3.37 Dữ liệu sau chuẩn hóa


Việc chuẩn hóa dữ liệu là một bước quan trọng trong phân tích thành phần
chính (PCA). Điều này giúp đảm bảo rằng các đặc trưng trong dữ liệu đều có cùng
phạm vi giá trị và đóng góp tương đương đến quá trình phân tích thành phần chính.
Nếu không chuẩn hóa dữ liệu, các đặc trưng có phạm vi giá trị khác nhau sẽ có
ảnh hưởng khác nhau đến kết quả phân tích thành phần chính.

Cụ thể, việc chuẩn hóa dữ liệu giúp cho mỗi đặc trưng trong dữ liệu có cùng
độ quan trọng khi tính toán ma trận hiệp phương sai, là bước quan trọng trong
phân tích thành phần chính. Điều này đảm bảo rằng các thành phần chính được
Trường Đại Học Công Nghiệp Hà Nội 62 Khoa Công Nghệ Thông Tin

xác định dựa trên tất cả các đặc trưng trong dữ liệu một cách công bằng, không bị
ảnh hưởng bởi phạm vi giá trị khác nhau của các đặc trưng.

Ngoài ra, việc chuẩn hóa dữ liệu còn giúp cho các giá trị trong ma trận hiệp
phương sai và ma trận tương quan có cùng phạm vi giá trị, giúp cho việc tính toán
và giải thích kết quả phân tích thành phần chính trở nên dễ dàng hơn.

Do đó, việc chuẩn hóa dữ liệu trước khi thực hiện phân tích thành phần
chính là rất quan trọng và được khuyến khích để đảm bảo tính chính xác và đáng
tin cậy của kết quả phân tích.

3.2.6 Áp dụng PCA

Hình 3.38 Áp dụng PCA


Với kết quả của giai đoạn trên, ta đã phân tích được rằng chúng có 5 thành
phần chính, không bao gồm nhãn để phân loại. Số thành phần chính tương đương
với số chiều sau khi đưa vào mô hình PCA để giảm số chiều.

Cụ thể, các bước được thực hiện như sau:

1. Tạo một đối tượng PCA từ thư viện scikit-learn với số chiều mới
được giảm xuống còn 5 (n_components=5).
2. Sử dụng phương thức fit_transform () của đối tượng PCA để tính
toán các thành phần chính và áp dụng chúng để giảm số chiều của dữ
liệu đầu vào X_scaled. Phương thức này tính toán ma trận trọng số
cho các thành phần chính và sử dụng nó để chuyển đổi dữ liệu đầu
vào theo công thức X_pca = X_scaled * W, với X_pca là ma trận
chứa dữ liệu mới có số chiều là 5.
3. Lưu dữ liệu mới vào biến X_pca.
Trường Đại Học Công Nghiệp Hà Nội 63 Khoa Công Nghệ Thông Tin

Kết quả trả về là một ma trận numpy chứa dữ liệu mới có số chiều là 5,
được tính toán dựa trên phương pháp phân tích thành phần chính và dữ liệu đã
được chuẩn hóa trước đó. Các thành phần chính mới này được sắp xếp theo thứ
tự giảm dần độ quan trọng, tức là thành phần chính đầu tiên giải thích phần lớn
sự biến thiên trong dữ liệu và thành phần chính cuối cùng giải thích phần nhỏ
nhất.

3.2.7 Xây dựng mô hình KNN

Hình 3.39 Xây dựng mô hình KNN


Tập train và tập test trước khi đưa vào mô hình KNN được chia theo tương
ứng là 70% và 30% và đầu vào là dữ liệu mới sau khi giảm số chiều qua mô hình
PCA.

Đầu tiên, mô hình KNN sẽ tính toán khoảng cách giữa điểm dữ liệu mới và
các điểm dữ liệu trong tập train. Sau đó, KNN sẽ chọn ra k điểm gần nhất (k là
một số nguyên dương được xác định trước) và gán nhãn cho điểm dữ liệu mới
bằng cách tham khảo nhãn của k điểm gần nhất đó. Với k =3 là ba điểm gần nhất
và đưa ra kết luận dựa trên phương thức bỏ phiếu.

3.3 Đánh giá mô hình và khả năng dự đoán của mô hình

● Tính toán độ chính xác

Hình 3.40 Độ chính xác Accuracy


Trường Đại Học Công Nghiệp Hà Nội 64 Khoa Công Nghệ Thông Tin

Việc đánh giá độ chính xác (accuracy) của mô hình trên tập test có tác dụng
đánh giá khả năng dự đoán của mô hình trên các điểm dữ liệu mới mà chưa được
sử dụng trong quá trình huấn luyện.

Tính accuracy được thực hiện bằng cách tính tỷ lệ giữa số điểm dữ liệu
trong tập test được phân loại chính xác và tổng số điểm dữ liệu trong tập test.
Accuracy càng cao thì khả năng dự đoán của mô hình càng tốt trên tập test.

Tuy nhiên, cần lưu ý rằng accuracy không phản ánh được hiệu suất của mô
hình trên các lớp dữ liệu không cân bằng. Trong trường hợp dữ liệu không cân
bằng, có thể cần sử dụng các phép đo khác như precision, recall, hoặc F1-score
để đánh giá hiệu suất mô hình một cách toàn diện hơn.

Recall: Tỷ lệ giữa số lượng dự đoán chính xác của lớp positive (true positive)
và tổng số lượng mẫu thuộc lớp positive (bao gồm cả true positive và false
negative). Giá trị 0.9814814814814815 cho recall có nghĩa là mô hình có khả
năng dự đoán đúng khoảng 98,14% các mẫu thuộc lớp positive.

Hình 3.41 Đánh giá chỉ số Recal


Precision: Tỷ lệ giữa số lượng dự đoán chính xác của lớp positive (true
positive) và tổng số lượng mẫu được dự đoán là positive (bao gồm cả true positive
và false positive). Giá trị 0.982570806100218 cho precision có nghĩa là trong các
mẫu được dự đoán là positive, khoảng 98,25% là dự đoán chính xác.

Hình 3.42 Đánh giá chỉ số precision


F1-score: Giá trị F1-score của mô hình là 0.700257027934032, là một trung
bình điều hòa giữa precision và recall. F1-score cung cấp một phép đo tổng quan
Trường Đại Học Công Nghiệp Hà Nội 65 Khoa Công Nghệ Thông Tin

về hiệu suất của mô hình, sự cân đối giữa việc dự đoán chính xác các mẫu positive
và việc tìm ra toàn bộ các mẫu positive.

Hình 3.43 Đánh giá F1-Score


● Sử dụng mô hình dự đoán 1 mẫu mới.

Hình 3.44 Đánh giá khả năng dự đoán của mô hình


Với mô hình đã được huấn luyện, có thể dự đoán mẫu mới với các thành phần
tượng tự cho kết loại loại rượu thứ 2 với bộ dữ liệu chứa 3 loại rượu

● Sử dụng thêm một mẫu mới không có trong bộ dữ liệu để dự đoán xem
mẫu thuộc loại rượu nào:

Hình 3.45 Đánh giá thêm về khả năng dự đoán


Kết quả cho thấy rằng với một mẫu khác không nằm trong bộ dataset, ta
thu được kết quả mẫu thuộc loại rượu thứ 1 trùng với kết quả tại mẫu đưa ra.
Trường Đại Học Công Nghiệp Hà Nội 66 Khoa Công Nghệ Thông Tin

• Đánh giá mô hình

Tổng quan, mô hình có kết quả hiệu suất tốt với accuracy, recall, và F1-score
đạt khoảng 90%. Mặc dù accuracy, recall và F1-score đều đạt mức tương đối cao,
precision có thể cần được cải thiện để đảm bảo độ chính xác cao hơn trong việc
dự đoán lớp positive. Điều này có thể đòi hỏi việc điều chỉnh tham số của mô
hình, tăng cường dữ liệu hoặc thay đổi kiến trúc mô hình để cải thiện kết quả. Bên
cạnh đó, cũng cần xem xét các yếu tố khác như cân bằng dữ liệu và yếu tố không
đối xứng trong việc phân loại các lớp để tăng cường hiệu suất của mô hình đối
với phương pháp đánh giá theo accuracy. Bởi trong một bộ dữ liệu mất cân bằng
về kết quả dự đoán nhãn khiến cho mô hình đạt độ chính xác cao nhưng không
hiệu quả khi dự đoán mẫu mới. Ngoài ra, việc mất cân bằng dữ liệu còn khiến cho
mô hình có độ tự tin cao và dự đoán lệch lạc. Ví dụ, có 100 bệnh nhân, trong đó
có 99 bệnh nhân âm tính và chỉ 1 bệnh nhân dương tính với bệnh. Điều này làm
cho mô hình đạt accuracy 99%, nhưng khi dự đoán bệnh nhân thực tế bị dương
tính thì 99% mô hình dự đoán ra kết quả âm tính. Điều này sẽ bỏ qua nhiều bệnh
nhân mắc bệnh trong tương lai. Vì vậy, accuracy không phản ảnh lên được hiệu
suất của mô hình khi dữ liệu mất cân bằng mà phải đánh giá thêm bằng recall,
precision, F1-score… để đảm bảo rằng mô hình không đi theo hướng tiêu cực.
Trường Đại Học Công Nghiệp Hà Nội 67 Khoa Công Nghệ Thông Tin

KẾT LUẬN
Thông qua việc thực hiện đề tài gồm các công việc tìm hiểu về học máy
(Machine Learning), cụ thể về mô hình KNN, PCA và các khái niệm, ưu nhược
điểm, ứng dụng và đặc biệt là các phương pháp mà học máy áp dụng để huấn
luyện cho mô hình phân loại có thể học và tiến hành phân loại được mẫu mới. Bài
toán phân loại rượu này hiện nay không quá là mới, bài toán mang lại kinh nghiệm
để giải quyết các bài toán tương tự.

Kết quả đạt được:

1. Có thêm kiến thức về bài toán phân loại nói chung và bài toán phân loại
rượu nói riêng. Biết thêm được ứng dụng của công nghệ phân loại rượu
trong đời sống hiện nay.
2. Biết về các thuật toán có thể sử dụng cho bài toán phân loại, ví dụ như
thuật toán KNN, SVM, Logistics Regression. Kết hợp được thuật toán
PCA giúp trích chọn thuộc tính, từ đó giúp thuật toán sử dụng trong báo
cáo là KNN đạt độ chính xác cao hơn so với việc không sử dụng thuật
toán PCA.
3. Xây dựng thành công mô hình phân loại rượu dựa trên mô hình học máy
KNN kết hợp PCA với độ chính xác khoảng từ 96-98%, mô hình này rất
phổ biến trong các phương pháp giải quyết bài toán phân loại.

Hạn chế: Thông tin mà nhóm tìm hiểu có thể vẫn chưa thực sự sâu và bao
quát hết được các kiến thức liên quan ví dụ như những kiến thức về PCA, cách
hoạt động của KNN, SVM và các mô hình học máy khác. Về dataset của bài thực
nghiệm này là một hạn chế, bởi số lượng mẫu rất ít nên kết quả mô hình trên có
thể chưa chắc chắn hiệu quả.

Trên đây là kết quả đạt được, hạn chế cùng hướng phát triển của đề tài, nhóm
mong muốn được nghe ý kiến nhận xét từ giáo viên để trong tương lai nhóm có
thể thực hiện hoàn thiện hơn và mỗi thành viên có thể cải thiện được khả năng
của mình hơn.
Trường Đại Học Công Nghiệp Hà Nội 68 Khoa Công Nghệ Thông Tin

TÀI LIỆU THAM KHẢO


1. Tác phẩm sách, giáo trình tiếng Việt
1) Lê Đình Duy. (2017). Deep Learning - Nhập môn máy học sâu
2) Trần Hùng Cường, Nguyễn Phương Nga, Giáo trình Trí tuệ nhân tạo, 2014.
3) Vũ Hữu Tiệp, Machine Learning cơ bản, 2018.
2. Tác phẩm sách, giáo trình tiếng Anh
1) J.H. van der Zwan (2021). Machine Learning Techniques
2) Geron Aurelien (2019). Hands-On Machine Learning with Scikit-Learn,
Keras, and TensorFlow

3. Websites:
1) Các kiến thức cơ bản về PCA:
https://machinelearningcoban.com/2017/06/15/pca/
2) Giới thiệu về PCA: https://viblo.asia/p/gioi-thieu-principal-component-
analysis-07LKXpq2KV4
3) Hướng dẫn sử dụng thư viện Scikit-Learn cho PCA:
https://scicoding.com/how-to-use-scikit-learn-for-principal-component-
analysis-pca/
4) Giới thiệu về thuật toán K-NN:
https://machinelearningcoban.com/2017/01/08/knn/
5) Cách KNN làm việc với phân lớp trong học máy:
https://www.analyticssteps.com/blogs/how-does-k-nearest-neighbor-
works-machine-learning-classification-problem
6) Giới thiệu về hồi quy tuyến tính:
https://aws.amazon.com/vi/what-is/logistic-regression/
7) Giới thiệu về thuật toán SVM:
https://viblo.asia/p/gioi-thieu-ve-support-vector-machine-svm-
6J3ZgPVElmB
8) Datasets của bài toán:
https://archive.ics.uci.edu/dataset/109/wine

You might also like