Điều chỉnh siêu tham số

Học có giám sát với scikit-learn

George Boorman

Core Curriculum Manager

Điều chỉnh siêu tham số

  • Hồi quy ridge/lasso: Chọn alpha

  • KNN: Chọn n_neighbors

  • Siêu tham số: Tham số đặt trước khi fit mô hình

    • Ví dụ: alphan_neighbors
Học có giám sát với scikit-learn

Chọn siêu tham số đúng

  1. Thử nhiều giá trị siêu tham số

  2. Fit từng cấu hình

  3. Đánh giá hiệu suất

  4. Chọn cấu hình tốt nhất

 

  • Gọi là điều chỉnh siêu tham số

  • Cần dùng cross-validation để tránh overfit vào tập test

  • Vẫn tách dữ liệu và cross-validate trên tập huấn luyện

  • Giữ tập test để đánh giá cuối cùng

Học có giám sát với scikit-learn

Cross-validation theo lưới (Grid search)

lưới các giá trị khả dĩ của n_neighbors từ 2 đến 11 bước 3, và tùy chọn metric euclidean hoặc manhattan

Học có giám sát với scikit-learn

Cross-validation theo lưới (Grid search)

điểm k-fold cross-validation cho từng tổ hợp siêu tham số trong lưới

Học có giám sát với scikit-learn

Cross-validation theo lưới (Grid search)

5 neighbors và metric euclidean được tô sáng, điểm số 0.8748

Học có giám sát với scikit-learn

GridSearchCV trong scikit-learn

from sklearn.model_selection import GridSearchCV

kf = KFold(n_splits=5, shuffle=True, random_state=42)
param_grid = {"alpha": np.arange(0.0001, 1, 10), "solver": ["sag", "lsqr"]}
ridge = Ridge()
ridge_cv = GridSearchCV(ridge, param_grid, cv=kf)
ridge_cv.fit(X_train, y_train)
print(ridge_cv.best_params_, ridge_cv.best_score_)
{'alpha': 0.0001, 'solver': 'sag'}
0.7529912278705785
Học có giám sát với scikit-learn

Hạn chế và một cách tiếp cận khác

  • 3-fold CV, 1 siêu tham số, 10 giá trị = 30 lượt fit
  • 10-fold CV, 3 siêu tham số, 30 giá trị = 900 lượt fit
Học có giám sát với scikit-learn

RandomizedSearchCV

from sklearn.model_selection import RandomizedSearchCV

kf = KFold(n_splits=5, shuffle=True, random_state=42) param_grid = {'alpha': np.arange(0.0001, 1, 10), "solver": ['sag', 'lsqr']} ridge = Ridge()
ridge_cv = RandomizedSearchCV(ridge, param_grid, cv=kf, n_iter=2) ridge_cv.fit(X_train, y_train)
print(ridge_cv.best_params_, ridge_cv.best_score_)
{'solver': 'sag', 'alpha': 0.0001}
0.7529912278705785
Học có giám sát với scikit-learn

Đánh giá trên tập kiểm tra

test_score = ridge_cv.score(X_test, y_test)

print(test_score)
0.7564731534089224
Học có giám sát với scikit-learn

Ayo berlatih!

Học có giám sát với scikit-learn

Preparing Video For Download...