Khám phá thuật toán K-Nearest Neighbors (KNN). Tìm hiểu cách thuật toán học có giám sát này hoạt động trong phân loại và hồi quy, ứng dụng của nó trong tìm kiếm hình ảnh và tích hợp với... Ultralytics YOLO26.
K-Nearest Neighbors (KNN) là một thuật toán mạnh mẽ và trực quan được sử dụng trong lĩnh vực học có giám sát cho cả nhiệm vụ phân loại và hồi quy. Đặc trưng bởi sự đơn giản, KNN thường được xếp vào loại "người học lười biếng" vì nó không xây dựng mô hình hay học các tham số trong giai đoạn huấn luyện. Thay vào đó, nó ghi nhớ toàn bộ tập dữ liệu huấn luyện và chỉ thực hiện các phép tính khi có yêu cầu dự đoán. Nguyên tắc cốt lõi của thuật toán dựa trên sự tương đồng giữa các đặc trưng: nó giả định rằng các điểm dữ liệu có thuộc tính tương tự tồn tại gần nhau trong không gian đặc trưng đa chiều.
Cơ chế của thuật toán K-Nearest Neighbors dựa trên việc tính toán khoảng cách. Khi một điểm truy vấn mới được đưa vào, thuật toán sẽ tìm kiếm trong tập dữ liệu đã lưu trữ để tìm ra 'K' mẫu huấn luyện gần nhất với điểm đầu vào mới đó.
Việc lựa chọn giá trị tối ưu cho 'K' là một bước quan trọng trong việc tinh chỉnh siêu tham số . Lựa chọn K ảnh hưởng đáng kể đến hiệu suất của mô hình và khả năng khái quát hóa của nó đối với dữ liệu mới.
Mặc dù đơn giản hơn so với mạng nơ-ron sâu, KNN vẫn giữ vai trò quan trọng trong trí tuệ nhân tạo hiện đại, đặc biệt khi kết hợp với các kỹ thuật trích xuất đặc trưng tiên tiến.
Mặc dù hiệu quả, thuật toán KNN vẫn phải đối mặt với " lời nguyền về chiều dữ liệu" . Khi số lượng đặc trưng (chiều) tăng lên, các điểm dữ liệu trở nên thưa thớt và các thước đo khoảng cách mất đi hiệu quả. Thêm vào đó, vì lưu trữ tất cả dữ liệu huấn luyện, KNN có thể tiêu tốn nhiều bộ nhớ và gặp phải độ trễ suy luận cao trên các tập dữ liệu lớn. Để giải quyết vấn đề này, các chuyên gia thường xử lý trước dữ liệu bằng các kỹ thuật giảm chiều như Phân tích thành phần chính (PCA) hoặc sử dụng các cấu trúc dữ liệu chuyên biệt như cây KD để tăng tốc độ tìm kiếm. Đối với việc mở rộng quy mô tập dữ liệu và huấn luyện mô hình ở cấp doanh nghiệp, việc sử dụng Nền tảng Ultralytics có thể giúp quản lý các tài nguyên tính toán cần thiết cho việc xử lý trước dữ liệu phức tạp.
Điều quan trọng là phải phân biệt giữa thuật toán K-Nearest Neighbors và thuật toán K-Means , vì tên gọi tương tự nhau thường gây nhầm lẫn.
Đoạn mã sau đây minh họa quy trình phân loại KNN đơn giản sử dụng thư viện Scikit-learn phổ biến. Trong bối cảnh thị giác máy tính, các "đặc trưng" đầu vào thường được trích xuất bởi một mô hình học sâu như YOLO26 trước khi được chuyển đến bộ phân loại KNN.
from sklearn.neighbors import KNeighborsClassifier
# Simulated feature vectors (e.g., extracted from YOLO26) and labels
# Features: [Size, Redness], Labels: 0=Apple, 1=Orange
features = [[0.8, 0.9], [0.9, 0.8], [0.2, 0.3], [0.3, 0.2]]
labels = [0, 0, 1, 1]
# Initialize KNN with 3 neighbors
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(features, labels)
# Predict the class of a new object [Size=0.85, Redness=0.85]
prediction = knn.predict([[0.85, 0.85]])
print(f"Predicted Class: {prediction[0]} (0=Apple, 1=Orange)")