Penyetelan hiperparameter

Supervised Learning dengan scikit-learn

George Boorman

Core Curriculum Manager

Penyetelan hiperparameter

  • Regresi ridge/lasso: Memilih alpha

  • KNN: Memilih n_neighbors

  • Hiperparameter: Parameter yang ditentukan sebelum melatih model

    • Mis. alpha dan n_neighbors
Supervised Learning dengan scikit-learn

Memilih hiperparameter yang tepat

  1. Coba banyak nilai hiperparameter

  2. Latih semuanya secara terpisah

  3. Nilai kinerjanya

  4. Pilih nilai terbaik

 

  • Ini disebut penyetelan hiperparameter

  • Wajib gunakan cross-validation agar tidak overfitting ke test set

  • Tetap bisa membagi data dan lakukan cross-validation pada training set

  • Tahan test set untuk evaluasi akhir

Supervised Learning dengan scikit-learn

Cross-validation grid search

grid nilai calon n_neighbors dari 2 hingga 11 selang 3, dan opsi metrik euclidean atau manhattan

Supervised Learning dengan scikit-learn

Cross-validation grid search

skor k-fold cross-validation untuk tiap kombinasi hiperparameter di grid

Supervised Learning dengan scikit-learn

Cross-validation grid search

5 tetangga dan metrik euclidean disorot, dengan skor 0,8748

Supervised Learning dengan scikit-learn

GridSearchCV di 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 dengan scikit-learn

Keterbatasan dan pendekatan alternatif

  • 3-fold cross-validation, 1 hiperparameter, 10 nilai total = 30 fit
  • 10-fold cross-validation, 3 hiperparameter, 30 nilai total = 900 fit
Supervised Learning dengan 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 dengan scikit-learn

Evaluasi pada test set

test_score = ridge_cv.score(X_test, y_test)

print(test_score)
0.7564731534089224
Supervised Learning dengan scikit-learn

Ayo berlatih!

Supervised Learning dengan scikit-learn

Preparing Video For Download...