kèo cá cược bóng đá là một thuật toán phân cụm dữ liệu kinh điển trong học máy (Machine learning), thuộc lớp thuật toán học không giám sát (Unsupervised learning). Bài viết sau đây nhằm giúp các bạn sinh viên CNTT hiểu rõ hơn về thuật toán trong phân cụm dữ liệu và ứng dụng thuật toán này trong phần nén ảnh của môn học Xử lý ảnh dành cho sinh viên năm 4 chuyên ngành CNTT.
1. Giới thiệu về thuật toán kèo cá cược bóng đá
Thuật toán kèo cá cược bóng đá chuẩn được đề xuất lần đầu tiên bởi Stuart Lloyd của Bell Labs vào năm 1957 nhưng không được xuất bản dưới dạng một bài báo cho đến tận năm 1982, năm 1965, Edward W.Forgy đã công bố phương pháp tương tự, do đó phương pháp này thường được gọi là Lloyd-Forgy.
Thuật toán kèo cá cược bóng đá
Bước 1. Tạo các tâm kèo cá cược bóng đá ngẫu nhiên
(1)
Bước 2. Gán các điểm dữ liệu xi(iÎ[1, N]) vào các tâm kèo cá cược bóng đá mk (kÎ[1, K])
- Với mỗi điểm dữ liệu, ta tính khoảng cách Euclid của nó đến các tâm kèo cá cược bóng đá được định nghĩa bởi hàm (xi-mk) (2), tập hợp các điểm được gán vào cùng một tâm kèo cá cược bóng đá sẽ tạo thành một kèo cá cược bóng đá.
- Đặt là các vector cho mỗi cặp xi, yik= 1 nếuxithuộc kèo cá cược bóng đákvàyij=0 kèo cá cược bóng đáj≠k.
- Khi đó ta có biểu thức sau:
(3)
- Tổng bình phương khoảng cách từ một điểm thuộc kèo cá cược bóng đá dữ liệuxithuộc nhómmkđược xác định theo công thức:
(4)
- Khi đó hàm mất mát (lost function) được định nghĩa:
(5)
Với M là tập hợp các kèo cá cược bóng đá tại (1)
Y, M = argminY,M(6)
Bước 3. Cập nhật lại vị trí tâm kèo cá cược bóng đá và gán lại các điểm dữ liệu vào từng kèo cá cược bóng đá sau khi đã xác định được khoảng cách nhỏ nhất từ các công thức (4), (5), (6).
- Lặp lại cho đến khi vị trí tâm các kèo cá cược bóng đá không thay đổi, tổng khoảng cách từ các điểm dữ liệu đến các tâm kèo cá cược bóng đá khi đó sẽ đạt nhỏ nhất, gọi là lỗi (Error) nhỏ nhất.
Hình 1. Sử dụng kèo cá cược bóng đá để phân cụm dữ liệu, số điểm dữ liệu N=150; K=3
2. Sử dụng ngôn ngữ lập trình Python cài đặt thuật toán kèo cá cược bóng đá trong nén ảnh màu
Từ thuật toán kèo cá cược bóng đá trên, mỗi bức ảnh màu chúng ta tiến hành phân cụm theo các thông số màu R-G-B từ các pixels của ảnh. Khi xác định được những màu chủ đạo (màu chiếm đa số pixels trong ảnh), chúng tôi tiến hành phân cụm và thay thế mỗi giá trị pixel đó bởi giá trị trung bình các pixels trong ảnh, chúng tôi sử dụng ngôn ngữ lập trình python thử nghiệm thuật toán kèo cá cược bóng đá để thực hiện nén ảnh. Chương trình chúng tôi sử dụng một số thư viện như matplotlib, sklearn và numpy trong quá trình cài đặt.
3. Kết luận
Qua kết quả chạy thực nghiệm khi sử dụng thuật toán phân cụm kèo cá cược bóng đá với số cụm K=16 để nén ảnh, ảnh đã giảm dung lượng từ 4.3MB xuống còn 209KB (b), với K=4 dung lượng giảm xuống còn 159KB (c). Mặc dù chất lượng ảnh đã không được như ảnh gốc vì ảnh sau khi nén là ảnh 16 màu hoặc 4 màu tương ứng với K=16 và K=4 cụm được kèo cá cược bóng đá tiến hành phân cụm và thay thế giá trị trung bình các chỉ số R-G-B trong từng pixel của ảnh gốc. Tuy nhiên ảnh sau khi nén vẫn giữ được đầy đủ đặc tính để thực hiện phân tích và xử lý ảnh, do đó kèo cá cược bóng đá được ứng dụng cài đặt thực nghiệm, mô phỏng trong lĩnh vực phân tích và xử lý ảnh cũng như mô phỏng thực nghiệm phân cụm dữ liệu trong lĩnh vực học máy.
Tài liệu tham khảo:
[1]. Shokri Selim, kèo cá cược bóng đá-Type Algorithms: A Generalized Convergence Theorem and Characterization of Local Optimality, IEEE transactions on pattern analysis and machine intelligence, vol. pami-6, no. 1, january, 1984.
[2]. Vu Huu Tiep, bloghttps://machinelearningcoban.com.