Menu
CoddyTech

Cây đặt câu hỏi

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 27 trên 58.

Chương này kết thúc với một cây giải thích khoản vay nông trại. Cây quyết định đặt ra trò chơi hai mươi câu hỏi: mỗi lần hỏi một câu hỏi có hoặc không về một đặc điểm, cho đến khi có câu trả lời:

Sơ đồ cây. Ô trên cùng hỏi: chiều rộng cánh hoa có lớn hơn hoặc bằng 0.8 cm không? Câu trả lời có dẫn đến setosa. Câu trả lời không dẫn đến ô thứ hai: chiều dài cánh hoa có lớn hơn hoặc bằng 4.95 cm không? Câu trả lời có dẫn đến versicolor, câu trả lời không dẫn đến virginica

Quá trình huấn luyện chọn từng câu hỏi sao cho các câu trả lời phân chia các lớp rõ ràng nhất có thể:

from sklearn.tree import DecisionTreeClassifier

tree = DecisionTreeClassifier(max_depth=2, random_state=0)
tree.fit(X_train, y_train)  # chiều dài và chiều rộng cánh hoa, cm
print(tree.predict([[4.5, 1.4]]))

Lệnh này in ra [1], versicolor. max_depth=2 cho phép có hai câu hỏi trên mỗi đường đi. Không cần chuẩn hóa tỷ lệ: mỗi câu hỏi đọc một đặc trưng.

challenge icon

Thử thách

Trung bình

Một cửa hàng cho thuê máy ảnh gửi tin nhắn nhắc nhở khi thiết bị có thể được trả muộn. Đoạn code khởi đầu chia dữ liệu các lần cho thuê trước đây và đọc thông tin một lần thuê mới vào bảng một hàng new_rental.

  1. Huấn luyện một cây quyết định với tối đa 2 câu hỏi trên mỗi đường đi (random_state=0).
  2. In độ chính xác trên tập kiểm tra (3 chữ số thập phân) và câu trả lời cho lần thuê mới: likely late khi giá trị là 1, likely on time khi giá trị là 0.

Với một cửa hàng khác:

Test accuracy: 0.792
This rental: likely on time

Tự làm thử

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier

# Các lượt thuê trước: 1 trong late nghĩa là thiết bị đã được trả muộn
rentals = pd.read_csv("rentals.csv")
features = ["rental_weeks", "gear_value_usd", "customer_age", "late_before"]
X_train, X_test, y_train, y_test = train_test_split(rentals[features], rentals["late"], test_size=0.25, random_state=0)

# Lượt thuê mới: số tuần thuê, giá trị thiết bị, tuổi khách hàng và số lần họ trả muộn trước đó
weeks = int(input())
value = int(input())
age = int(input())
late_before = int(input())
new_rental = pd.DataFrame([[weeks, value, age, late_before]], columns=features)

# 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