Ranh giới 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 8 trên 58.
Ranh giới quyết định là nơi câu trả lời của mô hình thay đổi. Để thấy ranh giới này, hãy hỏi mô hình tại mọi điểm trên biểu đồ được sắp xếp thành một lưới:
np.meshgrid ghép từng giá trị x với mọi giá trị y. Làm phẳng các cặp thành từng hàng, dự đoán tất cả rồi đưa kết quả về hình dạng của lưới:
xx, yy = np.meshgrid(np.linspace(2, 16, 100), np.linspace(0.5, 6.5, 100))
grid = np.column_stack([xx.flatten(), yy.flatten()])
zz = model.predict(grid).reshape(xx.shape)
ax.contourf(xx, yy, zz, levels=[-0.5, 0.5, 1.5], colors=["C0", "C1"], alpha=0.3)contourf tô màu vùng của từng mã lớp: levels đặt đường viền ở giữa các mã, colors khớp với màu của các chấm. Hãy vẽ các chấm sau đó, ở phía trên.
Thử thách
DễMáy bán hàng tự động phân loại tiền xu theo kích thước và trọng lượng. Phần code khởi tạo dùng k-NN trên coins.csv (mã lớp từ 0 đến 2); draw_coins(ax) vẽ các đồng xu.
- Tạo lưới 100 × 100
xx,yy: chiều ngang từ 18 đến 26 mm, chiều dọc từ 3 đến 9 g. - Dự đoán từng điểm vào
zz, có hình dạng như lưới. - Tô màu bản đồ bằng các màu từ C0 đến C2, sau đó vẽ các đồng xu và hiển thị.
Như thế này:
Tiền xu của một quốc gia khác nên các vùng cũng khác.
Coddy mô tả bản đồ của bạn.
Tự làm thử
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.neighbors import KNeighborsClassifier
# Mỗi đồng xu máy đo chiếm một hàng: đường kính (mm), khối lượng (g), giá trị tính bằng xu
coins = pd.read_csv("coins.csv")
X = np.column_stack([coins["diameter_mm"], coins["weight_g"]])
# Mã lớp: 0 cho 10c, 1 cho 20c, 2 cho 50c
y = coins["value_c"].map({10: 0, 20: 1, 50: 2})
names = ["10c", "20c", "50c"]
model = KNeighborsClassifier(n_neighbors=5)
model.fit(X, y)
# Vẽ các đồng xu trên ax, mỗi lớp một màu: C0, C1, C2
def draw_coins(ax):
for code in range(3):
ax.scatter(X[y == code, 0], X[y == code, 1], s=20, label=names[code])
ax.legend()
fig, ax = plt.subplots()
ax.set_title("Coin Sorter Map")
ax.set_xlabel("Diameter (mm)")
ax.set_ylabel("Weight (g)")
# Viết code của bạn bên dưới
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
1Mô hình đầu tiên của bạn
Học từ ví dụTập huấn luyện và tập kiểm traHuấn luyện và dự đoánChấm điểm mô hìnhÔn tập: Bộ sắp xếp hạt giống2Láng giềng gần nhất
Cách k-NN đưa ra quyết địnhChọn kRanh giới quyết địnhChuẩn hóa dữ liệu cho láng giềngÔn tập: láng giềng với dữ liệu rượu vang5Đánh giá bộ phân loại
Ma trận nhầm lẫnĐộ chính xác và độ thu hồiĐiểm F1Các lớp mất cân bằngĐường cong ROCÔn tập: Bài kiểm tra sàng lọc11Dự án: Các loài chim cánh cụt
Làm quen với chim cánh cụtChuẩn bị dữ liệuChọn mô hìnhTinh chỉnh mô hình tốt nhấtĐưa mô hình vào sử dụng3Hồi quy tuyến tính
Dự đoán các con sốNhiều đặc trưngĐo lường sai sốBiểu đồ phần dưÔn tập: Thuê xe đạp6Cây quyết định
Cây đặt câu hỏiĐọc câyĐộ sâu của câyTầm quan trọng của đặc trưngÔn tập: quyết định cho vay9Các mô hình tổ hợp
Rừng ngẫu nhiênVì sao rừng hoạt động hiệu quảTăng cường độ dốcÔn tập: Người kiểm lâm rừng12Thử thách cuối cùng
Tiến triển của bệnh tiểu đườngPhê duyệt tín dụngChữ số viết tayKhách hàng rời bỏTự luyện tập: Trình biên dịch Python online