Menu
CoddyTech

Tìm kiếm lưới

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 39 trên 58.

Tinh chỉnh thủ công nghĩa là lồng các vòng lặp vào nhau. GridSearchCV kiểm định chéo mọi tổ hợp cài đặt và giữ lại tổ hợp tốt nhất. Với 300 chuyến xe điện, đến muộn hoặc đúng giờ:

Lưới 3 x 3 thể hiện độ chính xác trung bình: độ sâu của cây lần lượt là 2, 4, 6 theo chiều dọc, số hàng tối thiểu mỗi lá lần lượt là 1, 5, 20 theo chiều ngang. Ô tốt nhất, độ sâu 4 với số hàng mỗi lá là 5, đạt 0.876 và được đóng khung

Một từ điển ánh xạ mỗi thiết lập đến các giá trị cần thử. min_samples_leaf là số hàng ít nhất mà một nút lá có thể chứa:

from sklearn.model_selection import GridSearchCV

grid = {"max_depth": [2, 4, 6], "min_samples_leaf": [1, 5, 20]}
search = GridSearchCV(DecisionTreeClassifier(random_state=0), grid, cv=5)
search.fit(X_train, y_train)
print(search.best_params_)
print(f"{search.best_score_:.3f}")
print(f"{search.score(X_test, y_test):.3f}")

Kết quả in ra:

{'max_depth': 4, 'min_samples_leaf': 5}
0.876
0.813

Quá trình tìm kiếm huấn luyện lại mô hình tốt nhất trên toàn bộ các hàng huấn luyện, nên search.score kiểm tra mô hình một lần. Hãy giữ lưới nhỏ: mỗi ô tốn 5 lần huấn luyện.

challenge icon

Thử thách

Trung bình

Một nhóm vệ tinh gán nhãn các pixel là mây hoặc trời quang bằng k-NN. Chương trình đọc giá trị k lớn nhất cần thử; phần code ban đầu chia dữ liệu.

  1. Tìm kiếm theo lưới với mọi giá trị k lẻ từ 1 đến số đó, dùng weights là "uniform" hoặc "distance" (các láng giềng gần hơn được tính nhiều hơn), cv=5.
  2. In ra các thiết lập tốt nhất, độ chính xác qua kiểm định chéo và độ chính xác trên tập kiểm tra, với 3 chữ số thập phân.

Với các pixel khác và 7:

Best k: 7, weights: distance
Cross-validated accuracy: 0.885
Test accuracy: 0.800

Tự làm thử

from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.neighbors import KNeighborsClassifier

max_k = int(input())

# Đừng thay đổi các dòng bên dưới: 360 điểm ảnh vệ tinh, mỗi điểm có 4 giá trị đo ánh sáng; nhãn 1 nghĩa là mây
X, y = make_classification(n_samples=360, n_features=4, n_informative=3, n_redundant=0,
                           flip_y=0.08, class_sep=0.7, random_state=1)
X_train, X_test, y_train, y_test = train_test_split(X, y, 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