So sánh các mô hình công bằng
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 38 trên 58.
So sánh các mô hình trên một lần chia dữ liệu chẳng khác nào tung đồng xu: một mô hình có thể gặp may với tập kiểm tra. Thay vào đó, hãy dùng cùng năm phần dữ liệu cho mỗi mô hình. Với 150 tờ tiền giấy, thật hay giả:
k-NN và logistic có kết quả ngang nhau trong phạm vi dao động, còn k-NN ổn định hơn. Cây quyết định kém hơn.
Bộ chia KFold xáo trộn các hàng một lần rồi cung cấp cho mỗi mô hình các phần dữ liệu giống hệt nhau:
from sklearn.model_selection import KFold
folds = KFold(n_splits=5, shuffle=True, random_state=0)
for model in [knn, logistic, tree]:
scores = cross_val_score(model, X, y, cv=folds)
print(f"{scores.mean():.3f} {scores.std():.3f}")Nó in ra các số trong biểu đồ:
0.867 0.042
0.873 0.074
0.807 0.077Chọn giá trị trung bình cao nhất; nếu các giá trị trung bình gần nhau, chọn độ lệch chuẩn nhỏ hơn.
Thử thách
Trung bìnhMột trang web nấu ăn dự đoán khách truy cập nào sẽ nấu món ăn trong công thức mà họ mở. Mã khởi đầu chấm điểm ba mô hình qua một lần chia dữ liệu, và cây quyết định thắng. Hãy đánh giá công bằng; chương trình đọc số lần chia.
- Tạo một
KFoldvới số lần chia đó,shuffle=Truevàrandom_state=0. - Kiểm định chéo từng mô hình qua các lần chia đó; in giá trị trung bình và độ lệch chuẩn, với 3 chữ số thập phân.
- In mô hình có giá trị trung bình cao nhất.
Với những khách truy cập khác và 5:
One split picks: k-NN
k-NN: mean 0.833, std 0.045
logistic: mean 0.860, std 0.044
tree: mean 0.787, std 0.029
Cross-validation picks: logisticTự làm thử
import numpy as np
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split, cross_val_score, KFold
from sklearn.neighbors import KNeighborsClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
n_folds = int(input())
# Đừng thay đổi các dòng bên dưới: 300 khách truy cập, 6 thói quen duyệt web; nhãn 1 nghĩa là họ đã nấu món ăn theo công thức
X, y = make_classification(n_samples=300, n_features=6, n_informative=4, n_redundant=0,
flip_y=0.06, class_sep=0.8, random_state=0)
names = ["k-NN", "logistic", "tree"]
models = [KNeighborsClassifier(), LogisticRegression(max_iter=1000),
DecisionTreeClassifier(max_depth=4, random_state=0)]
# Một lần chia dữ liệu chọn ra mô hình thắng cuộc
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0)
single = []
for model in models:
model.fit(X_train, y_train)
single.append(model.score(X_test, y_test))
print(f"One split picks: {names[np.argmax(single)]}")
# 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