Menu
CoddyTech

Đường cong học tập

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

Nhiều dữ liệu hơn có giúp mô hình của bạn tốt hơn không? Đường cong học tập (learning curve) cho bạn thấy điều đó: độ chính xác trên tập kiểm tra khi tập huấn luyện tăng lên. Ở đây là cây sâu trên dữ liệu hai mặt trăng:

Độ chính xác theo số hàng huấn luyện, từ 25 đến 800. Đường biểu diễn tập huấn luyện luôn ở mức 1.0; đường biểu diễn tập kiểm tra tăng từ 0.80 lên 0.94

Cây ghi nhớ mọi tập dữ liệu huấn luyện, nhưng mỗi hàng bổ sung đều dạy cho nó điều gì đó có ích. Các mô hình linh hoạt được lợi nhiều nhất từ dữ liệu.

Huấn luyện trên n hàng đầu tiên trong tập huấn luyện, sau đó chấm điểm trên cùng các hàng kiểm tra mỗi lần:

sizes = [25, 50, 100, 200, 400, 800]
test_scores = []
for n in sizes:
    tree = DecisionTreeClassifier(random_state=0)
    tree.fit(X_train[:n], y_train[:n])
    test_scores.append(tree.score(X_test, y_test))
ax.plot(sizes, test_scores, marker="o")

Vẫn đang tăng ở cạnh phải à? Thêm dữ liệu sẽ giúp ích.

challenge icon

Thử thách

Trung bình

Có thêm bản ghi âm sẽ giúp phân biệt hai loài cú không? Phần code khởi đầu chia 600 tiếng cú kêu và chuẩn bị sẵn hai mô hình cùng biểu đồ.

  1. Với mỗi n trong sizes, huấn luyện cả hai mô hình trên n hàng huấn luyện đầu tiên, rồi lưu độ chính xác trên tập kiểm tra của chúng.
  2. In mức cải thiện của mỗi mô hình, lấy điểm số cuối trừ điểm số đầu, với 3 chữ số thập phân.
  3. Vẽ cả hai đường theo sizes, dùng marker="o", gắn nhãn logistic và tree, rồi thêm chú giải.

Cú ở khu rừng khác cho kết quả:

Logistic gains 0.053 from more data
Tree gains 0.160 from more data

và vẽ biểu đồ này. Sau đó, Coddy sẽ mô tả biểu đồ của bạn.

Tiếng cú kêu: các đường cong học tập. Đường logistic tăng từ 0.64 lên khoảng 0.69 rồi đi ngang; đường tree tăng đều từ 0.67 lên 0.83

Tự làm thử

import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier

# Đừng thay đổi các dòng bên dưới: 600 tiếng kêu của cú, cao độ (Hz) và thời lượng (s)
rng = np.random.default_rng(23)
pitch = np.round(rng.uniform(300, 900, 600))
length = np.round(rng.uniform(0.2, 2.0, 600), 2)
# Loài 1, cú mèo nâu, có tiếng kêu dài hơn so với cao độ; một vài ghi chép thực địa bị sai
longer = length > 0.5 + 6.4 * ((pitch - 600) / 600) ** 2
wrong_note = rng.random(600) < 0.05
species = np.where(longer != wrong_note, 1, 0)
X = np.column_stack([pitch, length])
X_train, X_test, y_train, y_test = train_test_split(X, species, test_size=0.25, random_state=0)

sizes = [25, 50, 100, 200, 400]
logistic = LogisticRegression(max_iter=1000)
tree = DecisionTreeClassifier(random_state=0)

fig, ax = plt.subplots()
ax.set_title("Owl Calls: Learning Curves")
ax.set_xlabel("Training rows")
ax.set_ylabel("Test accuracy")

# Viết code của bạn 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