Tinh chỉnh mô hình tốt nhất
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 53 trên 58.
k-NN thắng với giá trị mặc định là 5 láng giềng. Giá trị k khác có phân loại chim cánh cụt tốt hơn không? Tìm kiếm lưới (grid search) chấm điểm từng giá trị k bạn liệt kê bằng kiểm định chéo, như ví dụ này với ảnh chụp khối u:
Tương tự như bài học Tinh chỉnh pipeline, k được đặt tên theo bước của nó:
{"kneighborsclassifier__n_neighbors": [3, 5, 7]}Mức cải thiện nhỏ hơn độ lệch chuẩn giữa các phần chia có thể chỉ là do may mắn. Việc tinh chỉnh cũng chỉ sử dụng các hàng dữ liệu huấn luyện.
Thử thách
Trung bìnhĐường ống k-NN của bạn là pipe, còn default lưu độ chính xác CV của nó với k = 5. Chương trình đọc các giá trị k cần thử vào ks.
- Tìm kiếm các giá trị đó bằng GridSearch với 5 fold trên các hàng dữ liệu huấn luyện.
- In ra giá trị k tốt nhất và độ chính xác CV tương ứng, làm tròn đến 3 chữ số thập phân.
- In ra mức cải thiện so với k = 5, làm tròn đến 3 chữ số thập phân.
Với một đàn chim khác và lưới giá trị 3, 5, 9:
Best k: 3
CV accuracy: 0.969
Gain over k = 5: 0.009Sau đó, chỉ thử các giá trị lớn, như từ 21 đến 27. Việc tinh chỉnh có phải lúc nào cũng giúp ích không?
Tự làm thử
import pandas as pd
from sklearn.model_selection import train_test_split, cross_val_score, GridSearchCV
from sklearn.compose import ColumnTransformer
from sklearn.pipeline import make_pipeline
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import StandardScaler, OneHotEncoder
from sklearn.neighbors import KNeighborsClassifier
# Đàn chim cánh cụt trong bài Gặp gỡ chim cánh cụt, các đặc trưng và nhãn của chúng
penguins = pd.read_csv("penguins.csv")
numbers = ["bill_length_mm", "bill_depth_mm", "flipper_length_mm", "body_mass_g"]
text = ["island", "sex"]
X = penguins[numbers + text]
y = penguins["species"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, stratify=y, random_state=0)
# Từ bài Chuẩn bị dữ liệu: hai nhánh xử lý
number_steps = make_pipeline(SimpleImputer(strategy="median"), StandardScaler())
text_steps = make_pipeline(SimpleImputer(strategy="constant", fill_value="unknown"), OneHotEncoder())
prep = ColumnTransformer([("numbers", number_steps, numbers), ("words", text_steps, text)])
# Từ bài Chọn mô hình: mô hình tốt nhất là k-NN với k = 5 mặc định
pipe = make_pipeline(prep, KNeighborsClassifier())
default = cross_val_score(pipe, X_train, y_train, cv=5).mean()
# Các giá trị k cần thử
n = int(input())
ks = []
for i in range(n):
ks.append(int(input()))
# 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