Tìm hiểu về phân cụm K-Means, một thuật toán học không giám sát quan trọng để nhóm dữ liệu thành các cụm. Khám phá quy trình, ứng dụng và so sánh của nó!
Phân cụm K-Means là một thuật toán được sử dụng rộng rãi trong lĩnh vực học không giám sát, được thiết kế để phân chia một tập dữ liệu thành các nhóm con riêng biệt, không chồng chéo. Trong bối cảnh rộng hơn của học máy (ML) , phương pháp này rất cần thiết để khám phá các mẫu và cấu trúc ẩn trong dữ liệu chưa được gắn nhãn. Thuật toán hoạt động bằng cách tổ chức các điểm dữ liệu thành $K$ cụm, trong đó mỗi điểm thuộc về cụm có giá trị trung bình gần nhất, đóng vai trò là nguyên mẫu của nhóm. Phương pháp này giúp giảm thiểu phương sai trong mỗi cụm, đảm bảo các điểm dữ liệu trong cùng một nhóm càng giống nhau càng tốt trong khi vẫn giữ được sự khác biệt giữa các nhóm.
Quá trình K-Means là một quá trình lặp và bắt đầu bằng việc chọn $K$ tâm ban đầu, đóng vai trò là điểm trung tâm của các cụm. Các tâm này có thể được chọn ngẫu nhiên hoặc thông qua các kỹ thuật khởi tạo thông minh hơn như khởi tạo k-means++ để cải thiện tốc độ hội tụ. Sau đó, thuật toán tiến hành qua hai bước chính cho đến khi kết quả ổn định:
Chu kỳ này lặp lại cho đến khi các trọng tâm không còn dịch chuyển đáng kể nữa, cho thấy thuật toán đã hội tụ. Việc xác định số lượng cụm tối ưu là một phần quan trọng của quy trình, thường được thực hiện bằng các kỹ thuật như phương pháp Elbow hoặc bằng cách phân tích điểm Silhouette để đo khoảng cách phân tách giữa các cụm kết quả.
K-Means Clustering rất linh hoạt và hữu ích trong nhiều ngành công nghiệp khác nhau cho các nhiệm vụ khai thác và phân tích dữ liệu .
Trong khi các bộ phát hiện vật thể hiện đại như Ultralytics YOLO11 thường sử dụng các kỹ thuật hồi quy tiên tiến hoặc đầu không neo, K-Means đóng vai trò then chốt trong sự phát triển của các mô hình phát hiện. Các phiên bản trước đó, chẳng hạn như YOLOv2 đến YOLOv5 , đã sử dụng phân cụm K-Means trên các chiều hộp giới hạn của tập dữ liệu COCO để xác định các hộp neo tối ưu. Các neo được tính toán trước này cung cấp cho mô hình các ước lượng trước tốt hơn để dự đoán hình dạng vật thể, cải thiện đáng kể độ ổn định và khả năng thu hồi trong quá trình huấn luyện.
Người ta thường nhầm lẫn K-Means với K-Nearest Neighbors (KNN) , nhưng về cơ bản chúng phục vụ những mục đích khác nhau.
Một khái niệm liên quan khác là DBSCAN , phân cụm dựa trên mật độ thay vì khoảng cách từ điểm trung tâm. Không giống như K-Means, DBSCAN không yêu cầu số lượng cụm phải được chỉ định trước và xử lý các giá trị ngoại lai tốt hơn.
Sau đây là Python Ví dụ minh họa cách sử dụng K-Means để phân cụm màu pixel, một bước tiền xử lý dữ liệu phổ biến trong các tác vụ thị giác.
import numpy as np
from sklearn.cluster import KMeans
# Simulate a small image (10x10 pixels) with 3 RGB channels
# In a real scenario, you would load an image using cv2.imread()
image_data = np.random.randint(0, 255, (10, 10, 3), dtype=np.uint8)
pixels = image_data.reshape(-1, 3)
# Apply K-Means to reduce the image to 3 dominant colors (clusters)
kmeans = KMeans(n_clusters=3, n_init="auto", random_state=42).fit(pixels)
# The cluster centers represent the dominant colors
print(f"Dominant RGB Colors:\n{kmeans.cluster_centers_}")