search

K-Nearest Neighbors (KNN)

Thuật toán Hàng xóm lân cận tối ưu & trực quan hóa ranh giới.

Lớp:
3

Python Lab

Thực thi mô hình dựa trên trực quan hóa.

main.py
import numpy as np
from sklearn.neighbors import KNeighborsClassifier

# Lấy dữ liệu từ canvas
X = np.array([])
y = np.array([])

# Khởi tạo thuật toán KNN với K=3
model = KNeighborsClassifier(n_neighbors=3)

# Train (Thuật toán ghi nhớ các điểm lân cận)
model.fit(X, y)

# Đánh giá Accuracy (Độ chính xác trên tập Train)
acc = model.score(X, y) * 100

print(f">> Mô hình KNN (K={model.n_neighbors}) đã sẵn sàng.")
print(f">> Độ lưu nhớ mẫu: {len(X)} điểm.")
print(f">> Độ chính xác hiện tại: {acc:.1f}%")
// Kết quả (Output) sẽ xuất hiện ở đây khi nhấn Run...

groupsNguyên lý hoạt động

KNN đưa ra quyết định dựa trên **"Biểu quyết theo số đông"**.

Khi muốn dự đoán một điểm mới thuộc về khoảng phân loại nào, thuật toán sẽ đi tìm $K$ điểm lân cận gần nó nhất (hàng xóm) và hỏi xem đa số các hàng xóm này thuộc màu gì.

Thuật toán này thuộc dạng Lazy Learning (học lười), vì nó không mất công xây dựng ma trận trọng số như SVM, mà chỉ lưu trữ toàn bộ dữ liệu mẫu và tính toán khi nhận được điểm mới.

ruleCách chọn K?

Giá trị `K` quyết định mức độ "uốn lượn" của ranh giới (Decision Boundary):

  • lens_blurK Quá Nhỏ (VD: 1, 3): Mô hình nhạy cảm với dữ liệu nhiễu (outliers), tạo ra các đảo ranh giới vỡ vụn (Overfitting).
  • blur_onK Lớn (VD: 11, 15): Ranh giới trở nên phẳng, trơn tru. Nhưng nếu lớn quá thì mô hình mất độ nhạy bén (Underfitting).

smart_toyỨng dụng thực tế

  • movie_filterHệ thống gợi ý (Netflix/Spotify): Phân tích sở thích của bạn và đi tìm những người dùng lân cận có gu giống bạn nhất để gợi ý.
  • manage_searchTìm kiếm tương đồng: Ứng dụng để Search hình ảnh hoặc tìm văn bản có yếu tố giống nhau nhất.

codeTip lập trình

Nên chọn $K$ là **số lẻ** nếu số lượng class là chẵn (như đỏ và xanh). Việc này giúp kết quả biểu quyết không rơi vào tình trạng hòa (Tie) dẫn tới sai số thuật toán.