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:
Đ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:
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 173Dấ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.
Thử thách
Trung bìnhMộ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.
- 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. - 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 degreevà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 7Tự 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
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