Menu
CoddyTech

Cách k-NN đưa ra quyết định

Thuộc phần Học có giám sát trong hành trình Machine Learning của Coddy. Bài học 6 trên 58.

Chương này giới thiệu k-NN. Đến cuối chương, bạn sẽ vẽ bản đồ phân loại cho mọi loại dữ liệu, như bản đồ này dành cho ớt cay nhẹ và cay:

80 quả ớt được biểu diễn theo chiều dài và độ dày thành quả trên bản đồ tô màu: vùng màu cam bên trái, nơi mô hình dự đoán là cay, và vùng màu xanh bên phải, nơi mô hình dự đoán là cay nhẹ

Để phân loại một quả ớt mới, k hàng xóm gần nhất (k-nearest neighbors) tìm k quả ớt trong tập huấn luyện gần nó nhất, rồi chúng bỏ phiếu:

Ảnh cận cảnh các quả ớt, với một ngôi sao màu đen đánh dấu quả mới. Các đường màu xám nối nó với 5 quả ớt gần nhất: 3 quả cay và 2 quả không cay, nên cay thắng

Gần nhất nghĩa là khoảng cách nhỏ nhất, điều bạn đã gặp ở phần 2. Bạn chọn k:

model = KNeighborsClassifier(n_neighbors=5)

n_neighbors là k, mặc định là 5 trừ khi bạn chỉ định giá trị khác. Với hai lớp, k lẻ không bao giờ tạo ra kết quả hòa.

challenge icon

Thử thách

Dễ

Một câu lạc bộ thiên văn phân loại các ngôi sao trong stars.csv thành sao lùn và sao khổng lồ dựa trên nhiệt độ và cấp sao. Đoạn code khởi đầu đọc thông tin về một ngôi sao mới và k.

  1. Tự tìm k ngôi sao gần nhất: thêm cột distance, rồi sắp xếp.
  2. In ra số sao khổng lồ trong số đó, rồi in ra nhóm chiếm đa số.
  3. Kiểm tra bằng mô hình k-NN với giá trị k đó, được huấn luyện trên mọi ngôi sao.

Với một ngôi sao khác của câu lạc bộ và k = 5:

Giants among the nearest 5: 4
By hand: giant
Model: giant

Tự làm thử

import numpy as np
import pandas as pd
from sklearn.neighbors import KNeighborsClassifier

# Mỗi ngôi sao một hàng: nhiệt độ tính bằng nghìn kelvin, độ sáng biểu kiến (giá trị càng nhỏ thì càng sáng), sao lùn hoặc sao khổng lồ
stars = pd.read_csv("stars.csv")
X = stars[["temp_kK", "magnitude"]]
y = stars["type"]

# Ngôi sao mới và k
temp = float(input())
mag = float(input())
k = int(input())
new_star = pd.DataFrame({"temp_kK": [temp], "magnitude": [mag]})

# Viết code bên dưới
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Học có giám sát

Tự luyện tập: Trình biên dịch Python online