Penyetelan Hyperparameter di Python
Alex Scriven
Data Scientist
Aturan Bayes:
Metode statistik yang memakai bukti baru untuk memperbarui keyakinan kita tentang suatu hasil secara iteratif
Aturan Bayes berbentuk:
$$ P(A \mid B) = \frac{P(B \mid A) \, P(A)}{P(B)} $$
Sisi kiri = probabilitas A, dengan syarat B terjadi. B adalah bukti baru.
Sisi kanan adalah cara menghitungnya.
$$ P(A \mid B) = \frac{P(B \mid A) \, P(A)}{P(B)} $$
Ini mungkin membingungkan, jadi mari gunakan contoh diagnosis medis yang umum.
Contoh medis:
Berapa probabilitas seseorang mengidap penyakit?
$$ P(D) = 0.05 $$
Ini adalah prior kita karena belum ada bukti.
Berapa probabilitas orang yang berisiko mengidap penyakit?
$$ P(D \mid Pre) = \frac{P(Pre \mid D) \, P(D)}{P(pre)} $$
$$ P(D \mid Pre) = \frac{0.2 \, * 0.05}{0.1} = 0.1 $$
Kita dapat menerapkan logika ini untuk tuning hiperparameter:
Tuning hiperparameter Bayesian masih baru namun populer untuk tugas tuning yang besar dan kompleks karena efektif menemukan kombinasi hiperparameter optimal dalam situasi ini
Memperkenalkan paket Hyperopt.
Untuk melakukan tuning hiperparameter Bayesian kita perlu:
Banyak opsi untuk menyetel grid:
Hyperopt tidak memakai nilai titik pada grid; tiap titik mewakili probabilitas untuk tiap nilai hiperparameter.
Kita akan gunakan distribusi uniform sederhana, namun ada banyak lainnya di dokumentasi.
Siapkan grid:
space = {
'max_depth': hp.quniform('max_depth', 2, 10, 2),
'min_samples_leaf': hp.quniform('min_samples_leaf', 2, 8, 2),
'learning_rate': hp.uniform('learning_rate', 0.01, 1, 55),
}
Fungsi objektif menjalankan algoritma:
def objective(params): params = {'max_depth': int(params['max_depth']), 'min_samples_leaf': int(params['min_samples_leaf']), 'learning_rate': params['learning_rate']} gbm_clf = GradientBoostingClassifier(n_estimators=500, **params)best_score = cross_val_score(gbm_clf, X_train, y_train, scoring='accuracy', cv=10, n_jobs=4).mean() loss = 1 - best_scorewrite_results(best_score, params, iteration) return loss
Jalankan algoritma:
best_result = fmin(
fn=objective,
space=space,
max_evals=500,
rstate=np.random.default_rng(42),
algo=tpe.suggest)
Penyetelan Hyperparameter di Python