Tập kiểm định
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 35 trên 58.
Trong phần Chọn k và độ sâu của cây, bạn giữ lại giá trị k hoặc độ sâu có điểm kiểm tra cao nhất. Điểm số đó dễ khiến bạn lạc quan: bạn giữ lại giá trị ấy vì nó đạt điểm cao.
Vậy hãy giữ lại một bộ thứ ba để lựa chọn, đó là tập xác thực:
Hai lần chia là đủ. 0.25 của 80% còn lại là 20%:
X_rest, X_test, y_rest, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
X_train, X_val, y_train, y_val = train_test_split(X_rest, y_rest, test_size=0.25, random_state=0)
print(len(X_train), len(X_val), len(X_test))Với 500 hàng, kết quả in ra là:
300 100 100Chọn trong quá trình kiểm định. Chỉ dùng tập kiểm tra một lần, vào cuối cùng.
Thử thách
Trung bìnhMột vườn nho dự đoán sản lượng nho trên mỗi hàng bằng Ridge. Đoạn code khởi đầu chọn alpha dựa trên điểm số trên tập kiểm tra rồi báo cáo chính điểm số đó. Hãy sửa lại.
- Chia
X_restvày_restthành các hàng huấn luyện và xác thực (test_size=0.25,random_state=0). - Chọn alpha dựa trên R bình phương của tập xác thực rồi in alpha cùng điểm số đó.
- Huấn luyện với alpha đã chọn trên các hàng huấn luyện rồi in R bình phương trên tập kiểm tra.
Với một vườn nho khác:
Chosen alpha: 1 (validation R squared 0.787)
Test R squared: 0.726Điểm số trung thực thường thấp hơn điểm số của đoạn code khởi đầu. Đó mới là điểm số thực.
Tự làm thử
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import Ridge
# Huấn luyện Ridge(alpha) với dữ liệu đã chuẩn hóa trên tập hàng đầu tiên, rồi trả về R bình phương trên tập thứ hai
def ridge_r2(alpha, X_fit, y_fit, X_check, y_check):
scaler = StandardScaler()
model = Ridge(alpha=alpha)
model.fit(scaler.fit_transform(X_fit), y_fit)
return model.score(scaler.transform(X_check), y_check)
# 90 hàng dữ liệu vườn nho: mỗi hàng có 10 phép đo và sản lượng nho tính bằng kg
rows = pd.read_csv("vineyard.csv")
features = ["sun_hours", "rain_mm", "soil_ph", "slope_deg", "vine_age",
"row_length_m", "buds_per_vine", "frost_days", "wind_kmh", "clay_pct"]
X = rows[features]
y = rows["yield_kg"]
alphas = [0.1, 1, 10, 100]
X_rest, X_test, y_rest, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
# Đoạn này chọn alpha theo điểm kiểm tra, rồi báo cáo chính điểm đó: hãy sửa lại
best_alpha = 0
best_r2 = -1
for alpha in alphas:
r2 = ridge_r2(alpha, X_rest, y_rest, X_test, y_test)
if r2 > best_r2:
best_alpha = alpha
best_r2 = r2
print(f"Chosen alpha: {best_alpha}")
print(f"Test R squared: {best_r2:.3f}")
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