Professional Documents
Culture Documents
======* * * ======
ĐỒ ÁN CHUYÊN NGÀNH
Lớp: 20231IT6052001
Nhóm: 08
Mục Lục
DANH MỤC HÌNH ẢNH ......................................................................................... 3
MỞ ĐẦU .................................................................................................................... 6
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
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
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
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:
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
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 …
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.
● 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
● 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):
● 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
● 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.
● Robot: Robot có thể học cách thực hiện các nhiệm vụ trong thế giới
● Trò chơi video: Học máy tăng cường đã được sử dụng để dạy bot
● 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
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.
● Việc dự đoán kết quả của dữ liệu mới rất đơn giản
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.
đứ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á.
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.
● 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.
● 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.
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
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:
● Ư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.
Trong đó:
Trường Đại Học Công Nghiệp Hà Nội 22 Khoa Công Nghệ Thông Tin
Trong đó:
Trong đó:
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.
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
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.
● 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.
● 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.
● 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))
● 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ᵢ)]
● 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).
● 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.
● 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
● Đơ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.
● 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
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.
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í .
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).
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.
Đố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:
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.
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..
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
Để 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
● 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
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.
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
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.
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
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:
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).
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:
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...
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:
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.
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.
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
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
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.
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
o Upload file zip và giải nén sau khi download zip trên link git:
https://gist.github.com/tijptjik/9408623
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.
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
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'.
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.
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.
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.
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.
Đầ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.
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.
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.
● 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:
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ự.
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
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