การปรับแต่ง Hyperparameter

Supervised Learning ด้วย scikit-learn

George Boorman

Core Curriculum Manager

การปรับแต่ง Hyperparameter

  • Ridge/lasso regression: การเลือก alpha

  • KNN: การเลือก n_neighbors

  • Hyperparameter: พารามิเตอร์ที่กำหนดก่อนฝึกโมเดล

    • เช่น alpha และ n_neighbors
Supervised Learning ด้วย scikit-learn

การเลือก Hyperparameter ที่เหมาะสม

  1. ลองใช้ค่า hyperparameter หลายๆ ค่า

  2. ฝึกโมเดลแต่ละค่าแยกกัน

  3. วัดประสิทธิภาพของแต่ละค่า

  4. เลือกค่าที่ให้ผลดีที่สุด

 

  • กระบวนการนี้เรียกว่า hyperparameter tuning

  • ต้องใช้ cross-validation เพื่อป้องกัน overfitting กับชุดทดสอบ

  • แบ่งข้อมูลแล้วทำ cross-validation บนชุดฝึกได้

  • สงวนชุดทดสอบไว้สำหรับการประเมินขั้นสุดท้าย

Supervised Learning ด้วย scikit-learn

Grid Search Cross-Validation

กริดแสดงค่า n_neighbors ตั้งแต่ 2 ถึง 11 ทีละ 3 และตัวเลือก metric ได้แก่ euclidean หรือ manhattan

Supervised Learning ด้วย scikit-learn

Grid Search Cross-Validation

คะแนน k-fold cross-validation สำหรับแต่ละชุดของ hyperparameter ในกริด

Supervised Learning ด้วย scikit-learn

Grid Search Cross-Validation

ไฮไลต์ 5 neighbors และ euclidean metric พร้อมคะแนน 0.8748

Supervised Learning ด้วย scikit-learn

GridSearchCV ใน 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
Supervised Learning ด้วย scikit-learn

ข้อจำกัดและแนวทางทางเลือก

  • cross-validation 3 fold, 1 hyperparameter, 10 ค่า = 30 fits
  • cross-validation 10 fold, 3 hyperparameter, 30 ค่า = 900 fits
Supervised Learning ด้วย 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
Supervised Learning ด้วย scikit-learn

การประเมินบนชุดทดสอบ

test_score = ridge_cv.score(X_test, y_test)

print(test_score)
0.7564731534089224
Supervised Learning ด้วย scikit-learn

มาฝึกกันเถอะ!

Supervised Learning ด้วย scikit-learn

Preparing Video For Download...