Pernah nggak sih kalian akan menggunakan suatu algoritma tapi bingung untuk melakukan hyperparameter tuning yang efisien? Kombinasi-kombinasi yang terbentuk antar parameter bisa sangat banyak hingga membutuhkan waktu dan memori yang besar.
Apa itu Hyperopt?
Maka dari itu yuk berkenalan dengan Hyperopt! Library Python optimasi bayesian yang dikembangkan oleh James Bergstra ini didesain untuk optimasi skala besar untuk model dengan ratusan parameter. Karena library ini berkonsepkan bayesian, maka proses hyperparameter tuning –nya akan selalu mempertimbangkan histori hasil yang terdahulu. Sederhananya, algortima ini belajar dari masa lalu. Tidak seperti Grid Search yang mencoba seluruh kemungkinan kombinasi atau Randomized Search yang hanya mencoba beberapa sampel kombinasi secara random, Hyperopt mencoba kombinasi yang berpotensi baik saja sehingga Hyperparameter Tuning -nya lebih efisien dan efektif.
Gambaran umum cara kerja Hyperopt
- Beberapa iterasi random search dilakukan untuk membentuk data histori yang pertama kali. Data histori ini berupa beberapa kombinasi hyperparameter dengan loss value-nya.
- Dari data histori kemudian dibentuk 2 bagian, bagian l(x) adalah densitas observasi yang memiliki loss baik, dan g(x) adalah densitas observasi yang memiliki loss sebaliknya. Kriteria baik dan buruk nilai loss dipisahkan oleh sebuah nilai kuantil y* yang ditentukan user sebagai parameter, namun jika ingin membiarkan nilai default juga tidak masalah. Kemudian kita ingin mencari kombinasi selanjutnya yang probabilitasnya untuk berada di bagian l(x) lebih besar daripada di bagian g(x).
- Pencarian kandidat hyperparameter selanjutnya dilakukan dengan mengevaluasi kandidat pada l(x)/g(x). Hanya kandidat yang menghasilkan nilai tertinggi yang akan dievaluasi pada fungsi obyektif sesungguhnya. Fungsi obyektif disini adalah fungsi loss atau fungsi eror.
- Kombinasi yang terpilih beserta nilai loss-nya akan bergabung dengan data histori, kemudian step 2-3 akan berulang. Iterasi akan berhenti jika sudah mencapai jumlah iterasi yg ditetapkan, atau ketika nilai eror sudah sangat kecil.
Contoh bagian-bagian penting dalam aplikasinya di Python
Library
from sklearn.ensemble import GradientBoostingClassifier
from hyperopt import fmin, tpe, hp, Trials, STATUS_OK, space_eval
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import KFold
Mendefinisikan Fungsi Obyektif
best_score=1.0
metric = 'neg_log_loss'
def objective(space):
model = GradientBoostingClassifier(**space, random_state=42)
kfold = KFold(n_splits=5, random_state=1985, shuffle=True)
score = -cross_val_score(model, X_train, y_train, cv=kfold,
scoring=metric, verbose=False).mean()
if (score < best_score):
best_score=score
return score
Mendefinisikan Ruang Pencarian (Search Space)
space = {'learning_rate': hp.loguniform('learning_rate',-3,1), 'n_estimators': hp.randint('n_estimators',500), 'max_depth': hp.quniform('max_depth', 1, 10, 1), 'min_samples_split': hp.uniform('min_samples_split', 0, 0.5), 'min_samples_leaf': hp.uniform('min_samples_leaf', 0, 0.5), 'max_features': hp.choice('max_features', 'auto', 'sqrt', 'log2', None]), 'subsample':hp.uniform ('x_subsample',0.5,1)
}
Meminimalkan Fungsi Obyektif
best = fmin(objective,
space = space,
algo = tpe.suggest,
max_evals = 20,
trials = Trials()
)
print best
Gimana sobat Exsight? Keren ya Hyperopt?
Sekian dulu ulasan singkat tentang Hyperopt, silakan kepoin referensinya biar makin tahu yaa…
Jika kamu ada pertanyaan atau kendala, silahkan hubungi Exsight untuk penjelasan lebih lanjut. Sampai jumpa di artikel selanjutnya!
Baca Juga : 7V karakteristik Big Data
REFERENCES :
Bergstra, J. et al. (2011) ‘Algorithms for hyper-parameter optimization’, Advances in Neural Information Processing Systems 24: 25th Annual Conference on Neural Information Processing Systems 2011, NIPS 2011, pp. 1–9.
Bergstra, J. et al. (2015) ‘Hyperopt: A Python library for model selection and hyperparameter optimization’, Computational Science and Discovery, 8(1). doi: 10.1088/1749-4699/8/1/014008.
Kalau modelnya regresi gmn min? data targetnya regresi. Terima kasih
Bisa juga kaa. Variabel responnya nya silahkan disesuaikan dengan data kakak 🙂