Tính dễ sử dụng: Pillow là một thư viện dễ sử dụng và có tài liệu phong phú, cung cấp cho người dùng một số phương pháp để tạo ra các hiệu ứng đặc biệt trên ảnh.. Có nhiều hướng dẫn và t
Trang 1VIỆN KỸ THUẬT CÔNG NGHỆ
BÁO CÁO TỔNG KẾTTRÍ TUỆ NHÂN TẠO
AI TỰ ĐỘNG BẺ KHÓA HCAPCHA (BREAKING THE
HCAPCHA)
GVHD: Ths Nguyễn Hải Vĩnh Cường
SVTH: Lê Thanh Phương - 2024802010231
Nguyễn Hoàng Danh - 2024802010387Phạm Nguyễn Hữu Toàn - 2024802010293
Trang 2VIỆN KỸ THUẬT CÔNG NGHỆ
BÁO CÁO TỔNG KẾTTRÍ TUỆ NHÂN TẠO
AI TỰ ĐỘNG BẺ KHÓA HCAPCHA (BREAKING THE
HCAPCHA)
GVHD: Ths Nguyễn Hải Vĩnh Cường
SVTH: Lê Thanh Phương - 2024802010231
Nguyễn Hoàng Danh - 2024802010387Phạm Nguyễn Hữu Toàn - 2024802010293
Trang 3LỜI NÓI ĐẦU 1
A NỘI DUNG 2
CHƯƠNG 1 TỔNG QUAN ĐỀ TÀI 2
1 Gi i thi u đềề tài ớ ệ 2
1.1 Tền đềề tài 2
1.2 Lí do ch n đềề tài ọ 2
1.3 M c tiều nghiền c u ụ ứ 2
1.4 Đốối t ượ ng, ph m vi nghiền c u, cách tiềốp c n và ph ạ ứ ậ ươ ng pháp nghiền c u: ứ 2
CHƯƠNG 2 CƠ SỞ LÍ THUYẾT 4
1 Phầền mềền s d ng ử ụ 4
1.1 Goole Colab 4
2 Th vi n ư ệ 4
2.1 Split folders 4
2.2 Pandas 4
2.3 Random 5
2.4 Pillow (PIL) 6
2.5 CV2 8
2.6 Matplotlib 9
2.7 Numpy 10
2.8 Warnings 11
2.9 Statistics 12
2.10 Sklearn 13
2.11 itertools 16
2.12 operator 18
3 Logistic regression 19
4 Mố hình bài toán 19
4.1 KNN (K-Nearest Neighbors) 19
4.2 SVM (Support Vector Machine) 20
CHƯƠNG 3 MÔ HÌNH BÀI TOÁN 23
CHƯƠNG 4 THỰC NGHIỆM 24
1 Lầốy d li u t b d li u ữ ệ ừ ộ ữ ệ 24
2 Làm s ch và tr c quan hóa d li u ạ ự ữ ệ 25
Trang 43 S d ng Hốềi quy Logistic ử ụ 36
4 Train mố hình KNN v i b d li u training ớ ộ ữ ệ 37
5 Train mố hình SVM trền b d li u gốốc ộ ữ ệ 42
6 Đánh giá và so sánh các mố hình phần lo i trền test set đ ạ ượ c cung cầốp 47
7 Kềốt quả 53
CHƯƠNG 5 KẾT LUẬN 58
B TÀI LIỆU THAM KHẢO 59
AI tự động bẻ khóa hcapcha (Breaking the hcapcha)
Trang 5Năm 2023, việc lướt web, sử dụng mạng internet là điều không thể thiếu Điều này đã là một điều quá bình thường, mạng internet giúp mọi người kết nối lại với nhau, gia tăng kimh tế của bản thân và nước nhà.
Nhưng cũng vì điều đó mà các website thường có những hệ thống hcapcha để kiểm tra người sử dụng, bắt người dùng phải làm một bài kiểm tra hết sức khó khăn và tốn thời gian sau đó mới cho người dùng sử dụng hệ thống Vậy nên, việc tạo ra một AI giúp bẻ khóa việc làm kiểm tra có thể giúp giảm được phần nào sự khó chịu của hệ thống hcapcha
AI được hình thành nhờ việc sử dụng các thuật toán lại với nhau cũng như sử dụng hai
mô hình KNN và SVM
Các phần của tiểu luận:
Chương 1: Tổng quan đề tài
Chương 2: Cơ sở lí thuyết
Chương 3: Mô hình bài toán
Chương 4: Thực nghiệm
Chương 5: Kết luận
Trang 6A NỘI DUNG CHƯƠNG 1 TỔNG QUAN ĐỀ TÀI
1 Giới thiệu đề tài.
Việc sứ dụng các website ngày nay đều có hệ thống kiểm tra mỗi lần làm kiểm tra đều rấttốn thời gian Như vậy, làm cách nào để giải hcapcha trên website mà không cần con người phải chạm tay vào? Thời gian giải có thể giảm thiểu được bao nhiêu?
Do đó, bằng việc sử dụng các tiện ích của AI mang lại và kiên thức của môn “Trí tuệ nhân tạo” để tạo ra một AI giúp ích cho việc giảm thiểu thời gian của việc làm kiểm tra hcapcha và việc giải quyết không cần con người phải chạm tay vào
1.3 Mục tiêu nghiên cứu
Xây dựng một AI để bẻ khóa các hchapcha với các mục tiêu sau:
- Tự động bẻ khóa hcapcha
- Thời gian tự động bẻ khóa được tối ưu
- Thay thế phần nào con người trong việc giải quyết hcapcha
1.4 Đối tượng, phạm vi nghiên cứu, cách tiếp cận và phương pháp nghiên cứu:
Đối tượng nghiên cứu: AI tự động bẻ khóa hcapcha
Phạm vi nghiên cứu:
- Nghiên cứu cơ sở lí thuyết và thiết kế
- Ngôn ngữ lập trình python, các mô hình thiết kế, thuật toán
- Sử dụng Google Colab để lập trình
Trang 7Cách tiếp cận:
- Quan sát và thu thập các vấn đề về việc giải hcapcha để có thể thiết kế AI
có tính năng tốt nhất
Phương pháp nghiên cứu:
- Tham khảo, nghiên cứu thêm các tài liệu trên trang web, trang báo, tìm hiểutình hình thực trạng của đề tài
Trang 8CHƯƠNG 2 CƠ SỞ LÍ THUYẾT
1 Phần mền sử dụng 1.1 Google Colab
Colaboratory hay còn gọi là Google Colab, là một sản phẩm từ Google Research, nó cho phép chạy các dòng code python thông qua trình duyệt, đặc biệt phù hợp với Data analysis, machine learning và giáo dục Colab không cần yêu cầu cài đặt hay cấu hình máy tính, mọi thứ có thể chạy thông qua trình duyệt, bạn có thể sử dụng tài nguyên máy tính từ CPU tốc độ cao và cả GPUs và cả TPUs đều được cung cấp cho bạn
Colab cung cấp nhiều loại GPU, thường là Nvidia K80s, T4s, P4s and P100s, tuy nhiên người dùng không thể chọn loại GPU trong Colab, GPU trong Colab thay đổi theo thời gian Vì là dịch vụ miễn phí, nên Colab sẽ có những thứ tự ưu tiên trong việc sử dụng tài nguyên hệ thống, cũng như giới hạn thời gian sử dụng, thời gian sử dụng tối đa lên tới 12 giờ
2 Thư viện 2.1 Split folders
Tách các thư mục có tệp (ví dụ: hình ảnh) thành các thư mục đào tạo, xác thực và kiểm tra (tập dữ liệu)
2.2 Pandas
Pandas là một thư viện mã nguồn mở được phát triển bởi Wes McKinney vào năm 2008 Pandas được sử dụng chủ yếu để thao tác, phân tích và dọn dẹp dữ liệu Pandas cung cấp rất nhiều cấu trúc dữ liệu cũng như các phép tính hỗ trợ thao tác dữ liệu số và dữ liệu thờigian(time series) Pandas nhanh, mạnh và hiệu quả
- Ưu điểm:
Nhanh và hiệu quả trong thao tác và phân tích dữ liệu
Có thể lấy dữ liệu từ nhiều nguồn dữ liệu khác nhau
Dễ dàng xử lí các dữ liệu bị thiếu (đại diện bởi : NaN)
Kích thước linh hoạt: có thể dễ dàng insert và delete dữ liệu
Linh hoạt trong việc reshape và pivot dataset
Cung cấp các chức năng time-series cũng như các chức năng nhóm dữ liệu(group)
- Nhược điểm:
Trang 9Tốc độ xử lý chậm: Pandas chậm hơn so với các thư viện khác như NumPy
và dplyr khi xử lý các bộ dữ liệu lớn Điều này đặc biệt đáng chú ý khi bạn phải xử lý hàng triệu hoặc hàng tỉ dòng dữ liệu
Khả năng xử lý dữ liệu khó đọc: Pandas có thể xử lý nhiều định dạng tệp khác nhau, nhưng đôi khi có thể gặp khó khăn khi đọc các tệp dữ liệu không chuẩn
Tính linh hoạt thấp hơn: Pandas không phải là một công cụ hoàn hảo cho tất cả các loại tác vụ xử lý dữ liệu Một số tác vụ phức tạp có thể yêu cầu sựkết hợp của nhiều thư viện khác nhau để đạt được hiệu quả cao nhất.Tài liệu hạn chế: Mặc dù Pandas là một thư viện phổ biến, nhưng tài liệu của nó vẫn hạn chế Một số chức năng phức tạp có thể yêu cầu kiến thức chuyên sâu và sự tìm kiếm nhiều nguồn tài liệu để thực hiện
Bộ nhớ chiếm dụng: Pandas có thể sử dụng nhiều bộ nhớ hơn so với các thư viện khác, đặc biệt là khi xử lý các bộ dữ liệu lớn Nếu bạn không cẩn thận, có thể gặp phải vấn đề về hiệu suất hoặc lỗi bộ nhớ
2.3 Random.
Random number generator (RNG) là một số được tạo ra ngẫu nhiên từ máy tính, và thường có hai loại khác nhau:
Số được tạo ra từ phần cứng, cách này thường sẽ không giải được
Số được tạo ra nhờ một thuật toán nào đó, cách này giải được nếu bạn biết thuật toán
Trong thực tế thì số ngẫu nhiên thường được sử dụng trong những chương trình trao giải thưởng ngẫu nhiên
- Ưu điểm
Thư viện random có rất nhiều hàm hỗ trợ việc tạo và xử lý số ngẫu nhiên, cho phép bạn tạo số ngẫu nhiên từ nhiều phân phối khác nhau, như phân phối chuẩn, phân phối Poisson, phân phối đều, vv
Random hỗ trợ tạo số ngẫu nhiên với nhiều loại kiểu dữ liệu khác nhau, baogồm cả số nguyên và số thực
Thư viện random được tích hợp sẵn trong Python, nên bạn có thể sử dụng
nó mà không cần phải cài đặt bất kỳ thư viện nào khác
Trang 10Các hàm trong thư viện random được thiết kế để trả về kết quả ngẫu nhiên chính xác và đáng tin cậy.
Nếu sử dụng sai cách, thư viện random có thể dẫn đến kết quả không đáng tin cậy hoặc sai sót trong tính toán
2.4 Pillow (PIL)
Thư viện Pillow trong Python là một thư viện mã nguồn mở được sử dụng để xử lý ảnh Thư viện này được phát triển dựa trên thư viện PIL (Python Imaging Library), nhưng đã được cập nhật và bổ sung thêm các tính năng mới hơn
Pillow cung cấp nhiều phương pháp để đọc, ghi và xử lý các tệp ảnh khác nhau, bao gồm
cả các định dạng phổ biến như JPEG, PNG, BMP, GIF, TIFF, và WebP Nó cũng cung cấpcác chức năng phân tích và xử lý ảnh như thay đổi kích thước, xoay, cắt, chỉnh sửa màu sắc và độ sáng, và chuyển đổi định dạng
Pillow là một thư viện dễ sử dụng, có tài liệu rõ ràng và được hỗ trợ bởi cộng đồng lớn
Nó cũng có tính tương thích tốt với các phiên bản Python khác nhau và các hệ điều hành khác nhau, làm cho nó trở thành một trong những thư viện xử lý ảnh phổ biến nhất trong Python
- Ưu điểm :
Tính linh hoạt: Pillow hỗ trợ đọc và ghi các định dạng ảnh phổ biến như JPEG, PNG, BMP, GIF, TIFF và WebP Nó cũng có thể thực hiện các thao tác phức tạp trên ảnh như xoay, cắt, chỉnh sửa màu sắc, độ sáng, chuyển đổiđịnh dạng và thay đổi kích thước
Tính dễ sử dụng: Pillow là một thư viện dễ sử dụng và có tài liệu phong phú, cung cấp cho người dùng một số phương pháp để tạo ra các hiệu ứng đặc biệt trên ảnh Pillow cũng có nhiều ví dụ minh họa để giúp người dùng hiểu rõ hơn về cách sử dụng các phương pháp
Trang 11Tính di động: Pillow có thể chạy trên nhiều hệ điều hành khác nhau, bao gồm Windows, MacOS và Linux.
Tính tương thích: Pillow có tính tương thích tốt với các phiên bản Python khác nhau, điều này giúp cho việc phát triển ứng dụng dễ dàng hơn
cv2 cung cấp cho người dùng các công cụ và phương pháp để thực hiện các tác vụ xử lý ảnh như đọc, ghi, hiển thị ảnh, xử lý ảnh, phân tích và trích xuất các đối tượng từ ảnh cv2 cũng hỗ trợ các tính năng khác nhau như đọc và ghi video, chụp ảnh từ camera và phân tích dữ liệu từ stream video
cv2 cũng được sử dụng rộng rãi trong các ứng dụng thị giác máy tính như nhận dạng khuôn mặt, phát hiện đối tượng, phát hiện chuyển động, xử lý ảnh y tế và các ứng dụng khác trong ngành công nghiệp và nghiên cứu
Tốc độ xử lý nhanh: cv2 là một thư viện được viết bằng ngôn ngữ lập trình C++, cho phép thực hiện các tính toán xử lý ảnh nhanh hơn so với các thư viện khác
Trang 12Có nhiều hướng dẫn và tài liệu: cv2 là một thư viện phổ biến và có rất nhiều hướng dẫn và tài liệu trên internet, giúp cho người dùng có thể dễ dàng học và sử dụng thư viện này.
Có sẵn nhiều công cụ phân tích và xử lý ảnh: cv2 cung cấp cho người dùng các công cụ và phương pháp để thực hiện các tác vụ phân tích và xử lý ảnh phức tạp như nhận dạng khuôn mặt, phát hiện đối tượng, trích xuất đặc trưng, v.v
- Nhược điểm:
Tính phức tạp: cv2 là một thư viện phức tạp và khó sử dụng cho người mới bắt đầu học Người dùng cần phải có kiến thức về lập trình, toán học và xử
lý ảnh để có thể sử dụng thư viện này hiệu quả
Thiếu tính năng trong việc xử lý ảnh phức tạp: cv2 không thể thực hiện một
số tác vụ xử lý ảnh phức tạp như xử lý ảnh 3D hoặc ảnh y tế
Không có tính tương thích đa nền tảng: cv2 được phát triển chủ yếu cho hệ điều hành Windows, Mac và Linux, không tương thích với các nền tảng khác như điện thoại di động hay các thiết bị IoT
Có thể gặp phải vấn đề về cài đặt: Việc cài đặt cv2 có thể gặp một số khó khăn do cv2 là một thư viện được viết bằng ngôn ngữ lập trình C++ và có
sử dụng một số thư viện hỗ trợ khác, vì vậy việc cài đặt và sử dụng thư việnnày có thể gặp một số vấn đề về phụ thuộc và tương thích với các phiên bảnPython, các thư viện hỗ trợ và hệ điều hành khác nhau
Không đơn giản trong việc xử lý video: Trong cv2, việc xử lý video có thể phức tạp hơn so với xử lý ảnh và yêu cầu kiến thức kỹ thuật cao hơn về thuật toán xử lý video, nên việc sử dụng cv2 để xử lý video cũng có thể khókhăn hơn so với xử lý ảnh
2.6 Matplotlib
Matplotlib là một thư viện được sử dụng trong ngôn ngữ lập trình Python để tạo và hiển thị các biểu đồ, đồ thị, biểu đồ tương tác và hình ảnh khoa học dưới nhiều dạng khác nhau Nó cho phép người dùng tạo ra các loại đồ thị phức tạp, bao gồm đồ thị đường, đồ thị cột, biểu đồ phân tán, đồ thị radar, histogram và nhiều loại đồ thị khác
Matplotlib cung cấp các hàm và lớp để tạo ra các đồ thị, cho phép người dùng tùy chỉnh các thuộc tính và định dạng để hiển thị các đồ thị theo cách tùy chỉnh Ngoài ra, Matplotlib còn có khả năng lưu trữ các đồ thị dưới dạng file hình ảnh hoặc file vector để
sử dụng cho các mục đích khác nhau
Trang 13Matplotlib được sử dụng rộng rãi trong các lĩnh vực như khoa học, kỹ thuật, thống kê, tài chính, y học và nhiều lĩnh vực khác Nó là một trong những thư viện tạo đồ thị được sử dụng nhiều nhất trong Python và được đánh giá cao về tính linh hoạt, tùy biến và khả năng hiển thị đồ thị chất lượng cao.
- Ưu điểm:
Được sử dụng rộng rãi: Matplotlib là một trong những thư viện tạo đồ thị được sử dụng rộng rãi nhất trong Python Nó được sử dụng trong các lĩnh vực như khoa học, kỹ thuật, thống kê, tài chính và y học
Tính linh hoạt: Matplotlib cho phép người dùng tạo ra nhiều loại đồ thị và biểu đồ khác nhau Nó cũng cho phép người dùng tùy chỉnh các thuộc tính
và định dạng để hiển thị các đồ thị theo cách tùy chỉnh
Tính tương thích cao: Matplotlib có khả năng tương thích với nhiều loại dữ liệu và cũng có thể được sử dụng trong nhiều môi trường lập trình khác nhau
Có tài liệu phong phú: Matplotlib có tài liệu phong phú với nhiều ví dụ cụ thể để giúp người dùng có thể dễ dàng sử dụng thư viện
Hỗ trợ đa nền tảng: Matplotlib có thể chạy trên các nền tảng khác nhau như Windows, MacOS và Linux
- Nhược điểm:
Cú pháp khó hiểu: Cú pháp của Matplotlib có thể khó hiểu với người dùng mới bắt đầu sử dụng Điều này có thể gây khó khăn trong việc tạo và tùy chỉnh các đồ thị
Hiển thị đồ thị chậm: Khi tạo các đồ thị phức tạp, Matplotlib có thể hiển thị
đồ thị chậm hơn so với một số thư viện tạo đồ thị khác
Yêu cầu kiến thức lập trình nâng cao: Matplotlib yêu cầu người dùng có kiến thức lập trình nâng cao để có thể tùy chỉnh và xử lý các đồ thị phức tạp
- Ưu điểm:
Trang 14Hiệu suất cao: NumPy là một thư viện tính toán khoa học mạnh mẽ, cho phép xử lý dữ liệu nhanh chóng và hiệu quả hơn so với các phương pháp xử
lý thông thường trong Python
Tính linh hoạt: NumPy cung cấp nhiều chức năng để thao tác với mảng đa chiều, bao gồm cả trích xuất, cắt, gộp và phân tách các mảng Nó cũng hỗ trợ các phép toán trên mảng như phép cộng, trừ, nhân, chia và lũy thừa
Hỗ trợ các phép toán ma trận: NumPy có khả năng hỗ trợ các phép toán ma trận và tính toán đại số tuyến tính
Khả năng mở rộng: NumPy có thể được mở rộng để hỗ trợ các loại dữ liệu mới và các thuật toán tính toán khác
Tài liệu phong phú: NumPy có tài liệu phong phú và nhiều ví dụ cụ thể để giúp người dùng có thể dễ dàng sử dụng thư viện
Yêu cầu kiến thức về lập trình và toán học: NumPy yêu cầu người dùng có kiến thức về lập trình và toán học để có thể sử dụng thư viện một cách hiệu quả
2.8 Warnings
Thư viện warnings là một thư viện được sử dụng để cung cấp các cảnh báo trong quá trình thực thi chương trình Khi một chương trình được thực thi, các cảnh báo thường được sử dụng để cảnh báo cho người dùng về các vấn đề có thể ảnh hưởng đến hoạt độngcủa chương trình
- Ưu điểm:
Cảnh báo được đưa ra khi xảy ra lỗi nhỏ: Thư viện warnings cung cấp các cảnh báo để cảnh báo về các lỗi nhỏ trong chương trình, giúp người dùng
có thể nhanh chóng tìm và sửa chữa các lỗi này
Giúp người dùng giám sát hoạt động của chương trình: Thư viện warnings cung cấp các cảnh báo để giúp người dùng giám sát hoạt động của chương trình trong quá trình thực thi
Trang 15Có thể được tùy chỉnh: Người dùng có thể tùy chỉnh các cảnh báo được phát ra bởi thư viện warnings, bao gồm cả cách mà các cảnh báo được hiển thị và cách xử lý các cảnh báo.
- Nhược điểm:
Không phải lúc nào cũng cần thiết: Trong một số trường hợp, sử dụng các cảnh báo có thể làm cho chương trình trở nên rối ren và khó hiểu.Không phải là một giải pháp hoàn hảo: Thư viện warnings không thể giải quyết tất cả các vấn đề có thể xảy ra trong chương trình
Có thể ảnh hưởng đến hiệu suất: Sử dụng các cảnh báo trong chương trình
có thể làm giảm hiệu suất của chương trình
2.9 Statistics
Thư viện statistics là một thư viện được sử dụng để tính toán các thống kê cơ bản trên dữ liệu số Thư viện này cung cấp nhiều hàm để tính các giá trị thống kê, bao gồm trung bình, độ lệch chuẩn, trung vị, phương sai, skewness, kurtosis và nhiều hơn nữa
Không thể giải quyết tất cả các vấn đề: Thư viện statistics không thể giải quyết tất cả các vấn đề liên quan đến thống kê Khi cần xử lý các vấn đề phức tạp hơn, người dùng cần phải sử dụng các thư viện khác hoặc phải tự viết mã
2.10 Sklearn
Scikit-learn (hay sklearn) là một thư viện mã nguồn mở của Python được sử dụng rộng rãi để xử lý các vấn đề liên quan đến Machine Learning (học máy) Thư viện này cung cấp nhiều công cụ để xử lý các tác vụ liên quan đến học máy, bao gồm:
Trang 16Preprocessing data: Thư viện sklearn cung cấp các công cụ để chuẩn hóa, tiền xử lý, tách tập dữ liệu và mã hóa các biến đầu vào.
Supervised learning: Thư viện sklearn cung cấp nhiều mô hình máy học được sử dụng cho các tác vụ phân loại (classification) và dự đoán (regression), bao gồm Decision Tree, Support Vector Machines, Naive Bayes, K-Nearest Neighbors và Neural Networks
Unsupervised learning: Thư viện sklearn cung cấp các mô hình
unsupervised learning như Clustering (phân cụm) và Dimensionality Reduction (giảm chiều dữ liệu), bao gồm K-Means, DBSCAN, PCA và t-SNE
sklearn.neighbors là một module trong thư viện scikit-learn (sklearn) của Python, cung cấp các mô hình và công cụ cho các tác vụ liên quan đến k-nearest neighbors (k-NN), baogồm:
Classification: Tìm kiếm k điểm gần nhất từ tập dữ liệu huấn luyện và dựa vào các nhãn của chúng để dự đoán lớp của điểm mới
Regression: Tìm kiếm k điểm gần nhất từ tập dữ liệu huấn luyện và dựa vàocác giá trị của chúng để dự đoán giá trị của điểm mới
Các mô hình và công cụ trong sklearn.neighbors bao gồm:
Trang 17KNeighborsClassifier: Mô hình k-NN được sử dụng cho tác vụ phân loại.KNeighborsRegressor: Mô hình k-NN được sử dụng cho tác vụ dự đoán.NearestNeighbors: Công cụ tìm kiếm các điểm gần nhất trong tập dữ liệu.2.10.2 sklearn.model_selection
sklearn.model_selection là một module trong thư viện scikit-learn của Python, cung cấp các công cụ cho các tác vụ liên quan đến lựa chọn mô hình, đánh giá hiệu suất và tinh chỉnh siêu tham số của mô hình Các công cụ trong sklearn.model_selection được sử dụng trong quá trình huấn luyện và kiểm định mô hình
Các công cụ chính của sklearn.model_selection bao gồm:
Train-test split: Chia tập dữ liệu thành hai phần, một phần để huấn luyện
mô hình và một phần để kiểm tra mô hình
K-fold cross-validation: Chia tập dữ liệu thành k phần (folds), huấn luyện
mô hình trên k-1 phần và kiểm định trên phần còn lại, lặp lại quá trình này
k lần với các phân chia khác nhau
Grid search: Tìm kiếm siêu tham số tốt nhất cho mô hình bằng cách thử nghiệm tất cả các giá trị của các siêu tham số trong một lưới các giá trị.Randomized search: Tìm kiếm siêu tham số tốt nhất cho mô hình bằng cáchthử nghiệm một số lượng ngẫu nhiên các giá trị của các siêu tham số.Stratified sampling: Chia tập dữ liệu thành các nhóm tương tự nhau về một
số đặc trưng quan trọng và sử dụng phương pháp lấy mẫu để chọn các mẫu đại diện cho mỗi nhóm
2.10.3 sklearn.metrics
sklearn.metrics là một module trong thư viện scikit-learn của Python, cung cấp các công
cụ để đánh giá hiệu suất của các mô hình học máy Module này cung cấp các hàm tính toán các độ đo khác nhau để đánh giá mô hình trên tập dữ liệu đầu vào
Một số công cụ chính trong sklearn.metrics bao gồm:
Accuracy score: tính độ chính xác của mô hình
Precision và recall: tính độ chính xác của mô hình dự đoán các lớp dương
và số lượng các lớp dương được tìm thấy trong tất cả các trường hợp thực tế
F1-score: tính toán trung bình điều hòa giữa precision và recall
ROC curve và AUC: đánh giá độ chính xác của mô hình phân loại nhị phân
Trang 18Confusion matrix: hiển thị số lần mô hình dự đoán đúng hoặc sai trên tập
dữ liệu
2.10.4 sklearn.svm
sklearn.svm là một module trong thư viện Scikit-learn của Python, cung cấp các công cụ
để xây dựng và huấn luyện các mô hình máy học SVM (Support Vector Machines) SVM
là một phương pháp học có giám sát được sử dụng cho việc phân loại và dự đoán.Các loại mô hình SVM được hỗ trợ trong sklearn.svm bao gồm:
SVC (Support Vector Classification): là một mô hình phân loại dùng để phân loại các điểm dữ liệu vào một hoặc nhiều lớp
NuSVC: tương tự như SVC, nhưng cho phép điều chỉnh tham số nu để kiểm soát tỷ lệ dữ liệu nằm trong vùng hỗ trợ
LinearSVC: là một mô hình phân loại tuyến tính cho phép tìm ra siêu mặt phẳng phân chia các lớp dữ liệu
SVR (Support Vector Regression): là một mô hình hồi quy dùng để dự đoángiá trị đầu ra của một biến liên tục
2.10.5 sklearn.linear_model
sklearn.linear_model là một module trong thư viện Scikit-learn của Python, cung cấp các công cụ để xây dựng và huấn luyện các mô hình hồi quy tuyến tính và logistic regression.Đây là một trong những công cụ quan trọng trong Machine Learning, được sử dụng rộng rãi trong các bài toán dự đoán và phân loại
Các loại mô hình hồi quy tuyến tính được hỗ trợ trong sklearn.linear_model bao gồm:
LinearRegression: là một mô hình hồi quy tuyến tính đơn giản, dùng để tìmmối quan hệ giữa các biến đầu vào và biến đầu ra
Ridge: là một mô hình hồi quy tuyến tính dùng để giảm thiểu overfitting bằng cách thêm vào hàm mất mát một thành phần giảm thiểu giá trị của các
Trang 192.11 itertools
itertools là một module trong Python cung cấp một tập hợp các công cụ cho việc tạo ra các iterators (vòng lặp) và iterable objects (đối tượng có thể duyệt qua) hiệu quả Các công cụ này giúp cho việc lập trình trở nên đơn giản và tối ưu hơn, đồng thời giúp cho việc sử dụng bộ nhớ và tài nguyên máy tính hiệu quả hơn
itertools cung cấp nhiều hàm để tạo ra các iterator và các đối tượng có thể duyệt qua Các hàm chính bao gồm:
chain(): Kết hợp nhiều iterable object vào một iterator duy nhất
count(): Tạo ra một iterator cho phép đếm từ một số bắt đầu đến vô cựccycle(): Tạo ra một iterator lặp đi lặp lại các phần tử trong một iterable object
repeat(): Tạo ra một iterator lặp lại một giá trị cho đến khi gặp phải giới hạn
product(): Tạo ra các bộ tích của các phần tử trong các iterable object
- Ưu điểm:
Giảm thiểu lỗi và tối ưu hóa việc lập trình: itertools cung cấp các công cụ
để tạo ra các iterator và các đối tượng có thể duyệt qua, giúp giảm thiểu lỗi
và tối ưu hóa việc lập trình
Tiết kiệm bộ nhớ và tài nguyên máy tính: itertools chỉ tạo ra các iterator khiđược yêu cầu, giúp tiết kiệm bộ nhớ và tài nguyên máy tính
Linh hoạt và đa dạng: itertools cung cấp nhiều công cụ khác nhau để tạo ra các iterator và các đối tượng có thể duyệt qua, giúp cho việc lập trình trở nên đa dạng và linh hoạt hơn
- Nhược điểm:
Không thể sử dụng cho các trường hợp đặc biệt: itertools là một thư viện rất
đa dụng, nhưng nó không thể sử dụng cho tất cả các trường hợp Đôi khi
Trang 20bạn cần tạo ra các iterator và đối tượng có thể duyệt qua riêng biệt để đáp ứng yêu cầu của mình.
Không hỗ trợ cho các tác vụ phức tạp: itertools không cung cấp các công cụ
để xử lý các tác vụ phức tạp, như phân tích ngôn ngữ tự nhiên hoặc phân tích cú pháp
2.12 operator
Trong Python, operator là một thư viện chuẩn cung cấp các hàm và toán tử được sử dụng
để thực hiện các thao tác toán học và logic trên các đối tượng trong Python Thư viện nàycho phép bạn thực hiện các phép toán trên các đối tượng không chỉ giới hạn ở các kiểu dữliệu số học nhưng còn có thể sử dụng cho các kiểu dữ liệu khác như chuỗi và danh sách
Logistic regression là một phương pháp phân tích thống kê được sử dụng để mô hình hóa
và dự đoán xác suất của một kết quả nhị phân (ví dụ: có/không, thành công/ thất bại) dựa trên một hoặc nhiều biến độc lập (biến giải thích) Nó là một trong những phương pháp phân tích phổ biến nhất trong khoa học dữ liệu và machine learning, được sử dụng rộng rãi trong các ứng dụng thực tế như dự đoán khả năng mua hàng của khách hàng, phân
Trang 21loại email là spam hoặc không phải spam, dự đoán khả năng tiêm chủng của người dân, v.v.
4 Mô hình bài toán 4.1 KNN (K-Nearest Neighbors)
Mô hình KNN (K-Nearest Neighbors) là một thuật toán học máy cho bài toán phân loại hoặc dự đoán giá trị dựa trên dữ liệu đầu vào
Cơ bản, mô hình KNN là một mô hình không có học tập, có nghĩa là nó không cần phải huấn luyện trước khi áp dụng cho dữ liệu mới Thay vào đó, mô hình KNN phân loại hoặc dự đoán các điểm dữ liệu mới dựa trên cách chúng gần với các điểm dữ liệu đã biết trong tập huấn luyện
Một trong những ưu điểm của mô hình KNN là nó đơn giản và dễ hiểu, đặc biệt là đối vớinhững người mới bắt đầu học về học máy Tuy nhiên, nó có nhược điểm là yêu cầu tốn kém tính toán khi kích thước của tập huấn luyện lớn và không hoạt động tốt với các tập
dữ liệu có nhiều chiều
Mô hình KNN hoạt động theo cách tìm kiếm các điểm dữ liệu trong tập huấn luyện gần nhất với điểm dữ liệu cần phân loại hoặc dự đoán Cụ thể, mô hình KNN được thực hiện bằng các bước sau đây:
Chuẩn bị dữ liệu huấn luyện: Dữ liệu huấn luyện là tập dữ liệu được sử dụng để xây dựng mô hình KNN Mỗi điểm dữ liệu trong tập huấn luyện có các thuộc tính
và nhãn tương ứng
Chọn giá trị K: Giá trị K là số lượng điểm gần nhất được sử dụng để phân loại hoặc dự đoán cho một điểm dữ liệu mới Giá trị K thường được lựa chọn bằng cách thử nghiệm và đánh giá hiệu quả trên tập dữ liệu
Đưa ra dự đoán cho một điểm dữ liệu mới: Khi một điểm dữ liệu mới được cung cấp, mô hình KNN tìm kiếm K điểm dữ liệu gần nhất trong tập huấn luyện Kết quả của mô hình phụ thuộc vào loại bài toán:
Đối với bài toán phân loại: Mô hình sử dụng đa số phiếu (majority voting)
để đưa ra quyết định về nhãn của điểm dữ liệu mới Tức là, nhãn của điểm
dữ liệu mới được xác định bằng cách chọn nhãn xuất hiện nhiều nhất trong
K điểm gần nhất
Đối với bài toán dự đoán giá trị: Mô hình tính trung bình giá trị của K điểm gần nhất và sử dụng giá trị trung bình này làm dự đoán cho điểm dữ liệu mới
Trang 22Đánh giá độ chính xác của mô hình: Để đánh giá độ chính xác của mô hình, thường sử dụng các phương pháp kiểm tra chéo (cross-validation) hoặc chia tập dữliệu thành hai phần: tập huấn luyện và tập kiểm tra.
4.2 SVM (Support Vector Machine)
SVM (Support Vector Machine) là một thuật toán học máy phân loại và dự đoán, được sửdụng để giải quyết các bài toán phân loại tuyến tính và phi tuyến tính Thuật toán SVM tìm ra siêu phẳng (hyperplane) tốt nhất phân tách các lớp dữ liệu
Các bước thực hiện thuật toán SVM như sau:
1 Chuẩn bị dữ liệu huấn luyện: Dữ liệu huấn luyện là tập dữ liệu được sử dụng để xây dựng mô hình SVM Mỗi điểm dữ liệu trong tập huấn luyện cócác thuộc tính và nhãn tương ứng (ví dụ: giá trị các thuộc tính của một ngôi nhà và nhãn tương ứng là giá trị thực của ngôi nhà đó)
2 Xác định siêu phẳng tốt nhất phân tách các lớp dữ liệu: Một siêu phẳng là một phẳng trong không gian có số chiều bằng số thuộc tính của dữ liệu Trong bài toán phân loại hai lớp, siêu phẳng được sử dụng để phân tách hai lớp dữ liệu Mô hình SVM tìm siêu phẳng tốt nhất phân tách hai lớp bằng cách tìm đường kẻ vuông góc với siêu phẳng và đi qua điểm gần nhất của mỗi lớp Đường này được gọi là đường phân chia tối đa (maximum margin hyperplane)
3 Xử lý dữ liệu phi tuyến: Trong một số trường hợp, dữ liệu không thể phân tách tuyến tính bằng siêu phẳng Trong trường hợp này, SVM sử dụng một
kỹ thuật gọi là kernel trick để chuyển đổi không gian dữ liệu ban đầu sang không gian mới có thể phân tách tuyến tính
4 Đưa ra dự đoán cho một điểm dữ liệu mới: Khi một điểm dữ liệu mới được cung cấp, mô hình SVM đưa ra dự đoán bằng cách xác định lớp của điểm
đó bằng cách so sánh với siêu phẳng đã được xác định
5 Đánh giá độ chính xác của mô hình: Để đánh giá độ chính xác của mô hình,
ta thường sử dụng các phương pháp kiểm tra chéo (cross-validation) hoặc chia tập dữ liệu thành hai phần: tập huấn luyện và tập kiểm tra
Một số lưu ý khi sử dụng SVM:
Lựa chọn hàm kernel: Kernel là một hàm số dùng để ánh xạ dữ liệu từ không gian ban đầu sang không gian mới Hàm kernel thường được sử dụng để giải quyết bài toán phân loại phi tuyến tính Các hàm kernel phổ biến bao gồm: linear, polynomial, RBF (radial basis function), sigmoid
Trang 23Điều chỉnh siêu tham số (hyperparameters): SVM có các siêu tham số như tham số độ rộng dải (C), tham số gamma trong hàm kernel Việc điều chỉnh các siêu tham số này là rất quan trọng để đạt được kết quả tốt nhất.Đối với bài toán phân loại đa lớp (multi-class classification): SVM có thể được sử dụng để phân loại đa lớp bằng các phương pháp one-vs-all hoặc one-vs-one Trong phương pháp one-vs-all, một mô hình SVM được xây dựng cho mỗi lớp, trong khi đó phương pháp one-vs-one sử dụng nhiều mô hình SVM để phân loại từng cặp lớp.
Đối với dữ liệu không cân bằng: SVM cũng có thể được sử dụng để giải quyết bài toán phân loại dữ liệu không cân bằng Trong trường hợp này, phương pháp SVM được điều chỉnh để giảm thiểu sai sót phân loại trên lớp thiểu số (minority class) và tăng độ chính xác trên lớp đa số (majority class)
Đối với bài toán hồi quy: SVM cũng có thể được sử dụng để giải quyết bài toán hồi quy bằng cách sử dụng một mô hình SVM hồi quy (SVR) Mục tiêu của SVR là tìm một siêu phẳng tối ưu để dự đoán giá trị đầu ra liên tục,chứ không phải là phân loại như trong bài toán phân loại
SVM là một trong những thuật toán phân loại mạnh nhất trong học máy Tuy nhiên, việc lựa chọn hàm kernel và điều chỉnh các siêu tham số là rất quan trọng để đạt được kết quả tốt nhất Ngoài ra, SVM cũng có thể khó khăn để xử lý với các tập dữ liệu lớn vì nó có độphức tạp tính toán cao
Trang 24CHƯƠNG 3 MÔ HÌNH BÀI TOÁN
Trang 25CHƯƠNG 4 THỰC NGHIỆM
1 Lấy dữ liệu từ bộ dữ liệu
a) Đầu tiên, tiến hành lấy dữ liệu từ bộ dữ liệu
Sử dụng split-folders để tách dữ liệu thành 2 loại:
Trang 26b) Chia dữ liệu thành train và validation:
Train:
Validation:
2 Làm sạch và trực quan hóa dữ liệu
a) Kiểm tra các labels trong tập dữ liệu Xét xem có bao nhiêu hình ảnh thuộc về mỗi class
os.listdir( "./train" )
os.listdir( "./val" )
labels = os.listdir( "./train" )
print(labels)
Trang 27b) Tổng số dữ liệu của training và testing
c) Hàm để hiển thị một hình ảnh ngẫu nhiên và tìm kiếm hình dạng của mỗi hình
Tạo một hàm để hiển thị một hình ảnh ngẫu nhiên và hình dạng của ảnh Tìm xem hình dạng của mỗi hình ảnh có giống nhau hay không Nếu không thì tạo tất cả các hình ảnh
for name in labels:
image_number_train = len(os.listdir( f "./train/ {name} )) "
image_number_test = len(os.listdir( f "./val/ {name} )) "
dic = { 'Label' : names, 'Number(training)' : num_train, 'Number(testing)'
: num_test, 'Total' : num_total}
df = pd.DataFrame(dic)
df
print ( f "Total training images: {df[ 'Number(training)' ] sum ()} ) "
print ( f "Total testing images: {df[ 'Number(testing)' ] sum ()} ) "
import random
def random_image( path ): # path = "./train"
Trang 28for label in labels:
images = os.listdir( f "./train/ {label} " )
for image images: in
img = plt.imread( f "./train/ {label} {image} / " )
img.shape if not in size:
for label in labels:
images = os.listdir( f "./train/ {label} " )
for image images: in
img = cv2.imread( f "./train/ {label} {image} / " )
img.shape == if list (size)[ ]: 1
img = cv2.resize(img, dsize=( 128 128 , ), interpolation=cv2.I