Câu trả lời:
Ở cấp độ khái niệm
Ghép một bộ phân loại có nghĩa là lấy một bộ dữ liệu làm đầu vào, sau đó xuất ra một bộ phân loại, được chọn từ một không gian của các bộ phân loại có thể. Trong nhiều trường hợp, một trình phân loại được xác định - nghĩa là, phân biệt với các phân loại có thể khác - bằng một tập các tham số. Các tham số thường được chọn bằng cách giải quyết vấn đề tối ưu hóa hoặc một số thủ tục số khác. Nhưng, trong trường hợp knn, bộ phân loại được xác định bởi chính dữ liệu đào tạo. Vì vậy, ở mức độ trừu tượng, việc lắp một bộ phân loại knn chỉ đơn giản là yêu cầu lưu trữ tập huấn luyện.
Ở cấp độ thực hiện
Đánh giá một bộ phân loại knn trên một điểm dữ liệu mới đòi hỏi phải tìm kiếm các hàng xóm gần nhất của nó trong tập huấn luyện, đây có thể là một hoạt động đắt tiền khi tập huấn luyện lớn. Như RUser đã đề cập, có nhiều thủ thuật khác nhau để tăng tốc tìm kiếm này, thường hoạt động bằng cách tạo các cấu trúc dữ liệu khác nhau dựa trên tập huấn luyện. Ý tưởng chung là một số công việc tính toán cần thiết để phân loại các điểm mới thực sự phổ biến giữa các điểm. Vì vậy, công việc này có thể được thực hiện trước thời hạn và sau đó được sử dụng lại, thay vì lặp lại cho mỗi trường hợp mới. Việc thực hiện knn bằng các thủ thuật này sẽ thực hiện công việc này trong giai đoạn đào tạo. Ví dụ, scikit-learn có thể xây dựng cây kd hoặc cây bóng trong khi gọi fit()
hàm.
Bạn có thể thực hiện nó một cách lười biếng và nó làm cho một bài tập tốt khi khám phá một ngôn ngữ. (xem mỗi ví dụ một trong những bài đăng trên blog của tôi ). Nhưng bạn cũng có thể lập chỉ mục dữ liệu, để đưa ra dự đoán (nhanh hơn nhiều).
Nếu không gian tính năng có thứ nguyên là một, việc sắp xếp các điểm theo tính năng này sẽ giúp bạn tìm thấy hàng xóm nhanh hơn nhiều (sử dụng cho mỗi tìm kiếm nhị phân ví dụ). Trong kích thước lớn hơn, không có sự khái quát hóa tự nhiên của việc sắp xếp, nhưng bạn có thể lập chỉ mục các điểm bằng cách sử dụng (mỗi ví dụ) tứ giác .
Nhìn vào nguồn , bạn có thể thấy rằng các phương pháp khác nhau đã được thực hiện trong scikit learn. Và có một số nghiên cứu , tiếp tục cải thiện các truy vấn hàng xóm gần nhất.
Trong khi những điểm mà những người trả lời khác đưa ra chắc chắn là hợp lệ và thú vị, tôi muốn chỉ ra một điều nữa từ quan điểm kỹ thuật phần mềm nghiêm ngặt:
Để làm cho nó phù hợp với API của họ
Các công cụ ước tính của sklearn, trong số những thứ khác, có một fit
phương pháp lấy một hoặc hai lượt thích mảng (tùy thuộc vào việc đó có phải là công cụ ước tính được giám sát / không giám sát) và một số chi tiết cụ thể về triển khai ( Nguồn ).
Vì vậy, ngay cả khi fit
phương thức của knn hoàn toàn không làm gì cả, thì nó vẫn có khả năng tồn tại, bởi vì knn là một nhà ước tính và nhà phát triển của sklearn, cũng như mã mà họ đóng góp, mong muốn các nhà ước tính có fit
phương pháp.