hyperparameter tuning menggunakan optuna

Hyperparameter Tuning menggunakan Optuna

Pada artikel kali ini kita akan melakukan hyperparameter tuning dengan menggunakan optune untuk menemukan parameter model yang menghasilkan predisksi paling baik.

Hyperparameter model adalah konfigurasi yang berada di luar model dan yang nilainya tidak dapat diperkirakan dari data. Kita tidak dapat mengetahui nilai terbaik untuk hyperparameter model pada masalah yang diberikan. Kita dapat menggunakan aturan umum, menyalin nilai yang digunakan pada soal lain, atau mencari nilai terbaik dengan coba-coba. Kita menyetel hyperparameter model untuk menemukan parameter model yang menghasilkan prediksi paling baik. Contoh dari hyperparameter adalah:

  • Hyperparameter ‘C’ dan ‘?’ digunakan dalam mesin vektor pendukung​
  • Hyperparameter ‘?’ untuk regularisasi​

Tapi mengapa kita khawatir tentang hyperparameter? Itu karena parameter ini secara langsung mengontrol perilaku algoritma pelatihan. Ini memiliki dampak signifikan pada kinerja model. Pilihan hyperparameter yang baik dapat membuat algoritma kalian menghasilkan prediksi yang baik juga.

Hyperparameter Optimizer

Sekarang, mari kita lihat di mana posisi pengoptimal hyperparameter dalam keseluruhan proses mempelajari algoritma.

hyperparameter optimizer

Seperti yang dapat dilihat pada gambar di atas, hyperparameter tuner berada di luar model dan penyetelan dilakukan sebelum pelatihan model. Hasil dari proses tuning adalah nilai optimal dari hyperparameter yang kemudian dilanjutkan ke tahap model training. Sekarang mari kita bahas Optuna yang merupakan pustaka pengoptimalan di Python yang dapat digunakan untuk pengoptimalan hyperparameter.

Optuna

Optuna adalah framework perangkat lunak untuk mengotomatiskan proses optimalisasi hyperparameter ini. Ini secara otomatis menemukan nilai hyperparameter yang optimal dengan memanfaatkan sampler yang berbeda seperti pencarian grid, acak, bayesian, dan algoritma evolusioner.

Pencarian Grid: Ruang pencarian setiap hyper-parameter didiskritisasi. Pengoptimal meluncurkan pembelajaran untuk setiap konfigurasi hyper-parameter dan memilih yang terbaik di bagian akhir.

Acak: Sampel ruang pencarian secara acak dan berlanjut hingga kriteria berhenti terpenuhi.

Bayesian: Pendekatan berbasis model probabilistik untuk menemukan hyperparameter yang optimal

Algoritma evolusioner: Pendekatan meta-heuristik yang menggunakan nilai fungsi kebugaran untuk menemukan hyperparameter yang optimal.

Keunggulan Optuna dalam hyperparameter tuning:

  • Ruang pencarian dinamis
  • Sampling yang efisien
  • Integrasi yang mudah
  • Visualisasi yang bagus
  • Optimalisasi terdistribusi

Sekarang mari kita bahas contohnya.

Hyperparameter Optimization Pada Random Forest Menggunakan Optuna

Sekarang, mari kita lihat bagaimana melakukan optimasi dengan optuna. Disini saya menggunakan dataset iris untuk mendemonstrasikan ini.

Pertama, kita harus memutuskan metrik berdasarkan yang mana kita harus mengoptimalkan hyperparameter. Metrik ini dengan demikian tujuan optimasi. Di sini, saya mengambil metrik sebagai skor cross-validation dengan k=3. Jadi pertama-tama mari kita buat fungsi objective.

import optuna
import sklearn
from sklearn import datasets

def objective(trial):
      iris = sklearn.datasets.load_iris()

      n_estimators = trial.suggest_int('n_estimators', 2, 20)
      max_depth = int(trial.suggest_loguniform('max_depth', 1, 32))
      clf = sklearn.ensemble.RandomForestClassifier(n_estimators=n_estimators, max_depth=max_depth)

      return sklearn.model_selection.cross_val_score(clf, iris.data, iris.target, 
           n_jobs=-1, cv=3).mean()

Jadi, dalam hal ini, kita menggunakan Random Forest untuk membuat klasifikasi. Kita hanya ingin mengoptimalkan dua – n_estimators dan max_depth. Jadi, kita menentukan ruang pencarian untuk hyperparameter ini. Seperti yang terlihat, n_estimator adalah bilangan bulat mulai dari 2 sampai 20, dan max_depth diambil dari log uniform mulai dari 1 sampai 32.

Kalian dapat mengubah nilai-nilai ini serta jenisnya tergantung pada sifat parameternya. Jadi fungsi ini mengambil objek percobaan sebagai argumennya. Uji coba hanyalah satu iterasi dari eksperimen pengoptimalan. Jadi di sini tujuan saya adalah untuk memaksimalkan skor cross-validation dan menentukan nilai n_estimator dan kedalaman maksimum apa yang akan memaksimalkan cross_val_score saya.

Nilai fungsi objective dievaluasi menggunakan objek penelitian.

study = optuna.create_study(direction='maximize')
study.optimize(objective, n_trials=100)

Di sini arah dapat ‘maximize’ atau ‘minimize’ tergantung pada sifat objective. Saya ingin memaksimalkan cross_val_score, maka saya memberi ‘maximize’. Saya juga telah memberikan no percobaan sebagai 100. Disini saya belum menentukan sampler untuk digunakan, secara default itu adalah pengoptimal bayesian. Setelah memanggil metode optimal, dapat dilihat bahwa proses optimalisasi dimulai.

Setelah semua percobaan selesai, dari objek penelitian kita dapat menemukan percobaan terbaik dan juga nilai optimal dari hyperparameter.

trial = study.best_trial
print('Accuracy: {}'.format(trial.value))

print("Best hyperparameters: {}".format(trial.params))

Sehingga dapat diketahui bahwa akurasi terbaik adalah 0.98 dan nilai hyperparameter terbaik untuk n_estimators dan max_depth berturut-turut adalah 4 dan 2.718.

Selamat sekarang kita telah berhasil melakukan hyperparameter tuning menggunakan optuna. Optuna sendiri adalah pustaka pengoptimalan yang sangat luas dengan aplikasi yang tidak hanya terbatas pada hyperparameter tuning.

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top