Menu
CoddyTech

Chưa khớp và quá khớ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 32 trên 58.

Bạn đã gặp phải cái bẫy lớn nhất của học máy: k = 1 và cây sâu ghi nhớ dữ liệu. Chương này gọi tên cái bẫy đó và kết thúc bằng các biểu đồ như sau:

Độ chính xác trên tập huấn luyện và tập xác thực của cây theo độ sâu: độ chính xác trên tập huấn luyện tăng dần đến 1.0, độ chính xác trên tập xác thực đạt đỉnh ở độ sâu 3 rồi giảm xuống. Một đường nét đứt đánh dấu độ sâu được chọn, một ngôi sao đỏ đánh dấu điểm số duy nhất trên tập kiểm tra, 0.82

Điểm khó: 15 cây húng quế được tưới lượng nước khác nhau, cùng ba đường cong khớp với sản lượng thu hoạch của chúng:

Sản lượng lá thu hoạch của 15 cây dùng để huấn luyện, biểu thị bằng các chấm màu xám, và 5 cây dùng để kiểm tra, biểu thị bằng các hình vuông màu đen, theo lượng nước tưới mỗi ngày. Đường thẳng màu xanh dương không khớp với phần lồi, đường cong bậc 3 màu xanh lá theo sát phần lồi, đường cong bậc 12 màu đỏ dao động dữ dội giữa các điểm

Bậc 1 quá đơn giản: khớp thiếu (underfitting). Bậc 12 uốn lượn qua mọi điểm huấn luyện: quá khớp (overfitting), ghi nhớ chứ không học.

np.polyval(coefs, x) cho biết độ cao của đường cong. RMSE trên tập huấn luyện và tập kiểm tra, tính bằng gam:

for degree in [1, 3, 12]:
    coefs = np.polyfit(water_train, grams_train, degree)
    train_err = np.sqrt(mean_squared_error(grams_train, np.polyval(coefs, water_train)))
    test_err = np.sqrt(mean_squared_error(grams_test, np.polyval(coefs, water_test)))
    print(degree, round(train_err), round(test_err))

Kết quả in ra:

1 156 138
3 15 19
12 9 173

Dấu hiệu của hiện tượng quá khớp: lỗi trên tập huấn luyện nhỏ, lỗi trên tập kiểm tra lớn.

challenge icon

Thử thách

Trung bình

Một trang trại điện gió mô hình hóa công suất của một tua-bin dựa trên tốc độ gió. Phần code khởi đầu chia 24 số liệu đo và đọc max_degree.

  1. Với mỗi bậc từ 1 đến max_degree, hãy khớp một đường cong trên các hàng huấn luyện; in RMSE của tập huấn luyện và tập kiểm tra theo đơn vị kW, làm tròn thành số nguyên.
  2. In bậc đầu tiên có lỗi trên tập kiểm tra lớn hơn hai lần lỗi trên tập huấn luyện, hoặc No overfitting up to degree và max_degree.

Với một tua-bin khác và 7:

Degree 1: train 117 kW, test 172 kW
Degree 2: train 115 kW, test 182 kW
Degree 3: train 64 kW, test 85 kW
Degree 4: train 63 kW, test 79 kW
Degree 5: train 47 kW, test 67 kW
Degree 6: train 47 kW, test 65 kW
Degree 7: train 23 kW, test 85 kW
Overfitting starts at degree 7

Tự làm thử

import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error

max_degree = int(input())

# Đừng thay đổi các dòng bên dưới: tốc độ gió (m/s) và công suất (kW) của một tuabin gió
speed = np.array([3.8, 4.3, 5.1, 5.6, 5.6, 6.7, 6.8, 7.2, 7.8, 8.5, 8.9, 9.1,
                  10.2, 10.9, 11.4, 11.9, 12.2, 12.4, 12.6, 13.2, 13.9, 14.4, 15.5, 16.5])
power = np.array([0, 85, 179, 22, 17, 126, 255, 273, 419, 545, 612, 665,
                  913, 1120, 1114, 1227, 1299, 1400, 1293, 1329, 1396, 1493, 1461, 1552])
speed_train, speed_test, power_train, power_test = train_test_split(
    speed, power, test_size=0.25, random_state=0)

# 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