Menu
CoddyTech

Độ sâu của cây

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

Cây có thể tiếp tục hỏi cho đến khi mỗi hàng huấn luyện có câu trả lời riêng. Khi đó, cây đã ghi nhớ chứ không học:

Độ chính xác trên tập huấn luyện và tập kiểm tra của các cây có độ sâu từ 1 đến 12 trên dữ liệu nửa mặt trăng nhiễu. Độ chính xác trên tập huấn luyện tăng lên 1.0 ở độ sâu 8, được ghi chú là ghi nhớ. Độ chính xác trên tập kiểm tra đạt đỉnh 0.907 ở độ sâu 6, được đánh dấu bằng đường nét đứt, rồi giảm xuống khoảng 0.87

Các cây có độ sâu lớn học cả nhiễu trong các hàng dữ liệu huấn luyện, nên độ chính xác trên tập kiểm tra đạt đỉnh rồi giảm xuống. Hãy thử một số độ sâu:

train = []
test = []
for d in range(1, 13):
    tree = DecisionTreeClassifier(max_depth=d, random_state=0)
    tree.fit(X_train, y_train)
    train.append(tree.score(X_train, y_train))
    test.append(tree.score(X_test, y_test))

Trên các mặt trăng này, độ sâu 6 cho kết quả tốt nhất trên các hàng mới: cứ giữ nguyên như vậy. Từ độ sâu 8 trở lên, cây đạt kết quả hoàn hảo trên những hàng đã ghi nhớ, nhưng kém hơn trên những hàng còn lại.

challenge icon

Thử thách

Trung bình

Một khảo sát bằng kính thiên văn phân loại các thiên thể thành sao và thiên hà. Phần mã khởi đầu chia dữ liệu và thiết lập biểu đồ.

  1. Với mỗi độ sâu (depth) trong depths, huấn luyện một cây (random_state=0) và lưu lại cả hai độ chính xác.
  2. In ra độ sâu có độ chính xác trên tập kiểm tra cao nhất như bên dưới.
  3. Vẽ cả hai đường, đặt nhãn train và test, đánh dấu độ sâu tốt nhất bằng một đường nét đứt ax.axvline, thêm chú giải rồi hiển thị biểu đồ.

Với máy phân loại xoài:

Best depth: 5, test accuracy 0.867

Sau đó, Coddy mô tả biểu đồ của bạn. Biểu đồ của họ trông như thế này:

Biểu đồ có tiêu đề Chín hay chưa? với độ sâu của cây từ 1 đến 10 trên trục ngang: đường màu xanh biểu thị dữ liệu huấn luyện tăng lên khoảng 0.98, đường màu cam biểu thị dữ liệu kiểm tra đạt đỉnh gần 0.87 ở độ sâu 5 và có một đường thẳng đứng nét đứt tại đó, kèm chú giải

Tự làm thử

import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier

# Mỗi hàng tương ứng với một thiên thể trong khảo sát bằng kính thiên văn: 1 trong galaxy là thiên hà, 0 là ngôi sao
sky = pd.read_csv("sky.csv")
features = ["brightness_mag", "size_arcsec", "roundness", "color_index"]
X_train, X_test, y_train, y_test = train_test_split(sky[features], sky["galaxy"], test_size=0.25, random_state=0)
depths = range(1, 11)

fig, ax = plt.subplots()
ax.set_title("Star or Galaxy?")
ax.set_xlabel("Tree depth")
ax.set_ylabel("Accuracy")

# 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