hyperparameter tuning menggunakan randomized search

Hyperparameter Tuning Menggunakan Randomized Search

Hyperparameter tuning sangat penting dalam aktivitas pelatihan model machine learning apa pun. Hyperparameter model tidak dapat ditentukan dari kumpulan data yang diberikan melalui proses pembelajaran. Namun, mereka sangat penting untuk mengontrol proses pembelajaran itu sendiri.

Hyperparameter ini berasal dari formulasi matematis model pembelajaran mesin. Misalnya, bobot yang dipelajari saat melatih model regresi linier adalah parameter, tetapi kecepatan pembelajaran dalam penurunan gradien adalah hyperparameter. Performa model pada kumpulan data secara signifikan bergantung pada penyetelan yang tepat, yaitu menemukan kombinasi terbaik dari hyperparameter model.

Berbagai teknik tersedia untuk optimasi hyperparameter, seperti Grid Search, Randomized Search, Optimasi Bayesian, dll. Hari ini kita akan membahas metode dan implementasi Randomized Search atau Pencarian Acak.

Data scientists mengatur hyperparameter model untuk mengontrol aspek implementasi model. Setelah data scientists memperbaiki nilai hyperparameter model, hyperparameter dapat dianggap sebagai pengaturan model. Pengaturan ini perlu disetel untuk setiap masalah karena hyperparameter terbaik untuk satu kumpulan data tidak akan menjadi yang terbaik di semua kumpulan data.

Apa itu Randomized Search?

Grid Search dan Randomized Search adalah dua teknik yang banyak digunakan dalam Hyperparameter tuning. Grid Search secara mendalam mencari melalui setiap kombinasi nilai hyperparameter yang ditentukan. Berbeda dengan Grid Search, tidak semua nilai parameter yang diberikan dicoba dalam Randomized Search. Sebaliknya sejumlah pengaturan parameter diambil sampelnya dari distribusi yang ditentukan.

Pengambilan sampel tanpa penggantian dilakukan jika semua parameter disajikan sebagai daftar. Pengambilan sampel dengan penggantian digunakan jika setidaknya satu parameter diberikan sebagai distribusi. Bagaimana pengambilan sampel akan dilakukan dalam Randomized Search dapat ditentukan sebelumnya.

Untuk setiap hyperparameter, distribusi nilai yang mungkin atau daftar nilai diskrit (untuk dijadikan sampel secara seragam) dapat ditentukan. Untuk hyperparameter yang memiliki nilai kontinu, distribusi kontinu harus ditentukan untuk memanfaatkan sepenuhnya pengacakan. Manfaat utama dari pencarian ini adalah penurunan waktu pemrosesan.

Randomized Search space untuk menyetel 2 hyperparameter

Contoh Randomized Search space untuk menyetel 2 hyperparameter.

Implementasi dengan Python

Mari kita implementasi Randomized Search berbasis Python. Modul scikit-learn hadir dengan beberapa kumpulan data referensi populer, termasuk metode untuk memuat dan mengambilnya dengan mudah. Kami akan menggunakan kumpulan data kanker payudara Wisconsin untuk klasifikasi biner.

Implementasi Randomized Search pada scikit-learn disebut fungsi RandomizedSearchCV. Mari kita lihat parameter penting dari fungsi ini:

estimator: Sebuah objek dari tipe model scikit-learn.

param_distributions: Kamus dengan nama parameter sebagai kunci dan distribusi atau daftar parameter untuk dicari.

scoring: strategi penilaian untuk mengevaluasi kinerja model yang divalidasi silang pada set tes.

n_iter: Menentukan jumlah kombinasi yang akan dicoba secara acak. Memilih angka yang terlalu rendah akan mengurangi peluang kita untuk menemukan kombinasi terbaik. Memilih angka yang terlalu besar akan menambah waktu pemrosesan. Jadi, kita memilih antara waktu proses atau kualitas solusi.

cv: Dalam CV Pencarian Acak, “CV” adalah singkatan dari cross-validation, yang juga dilakukan selama proses pengoptimalan.

Dari sklearn.datasets, kita akan menggunakan metode load_breast_cancer untuk memuat dataset kanker payudara Wisconsin. Jika return_X_y dibuat benar, maka mengembalikan (data, target).

X, y = load_breast_cancer(return_X_y=True)
print(X.shape)

Sekarang kita gunakan train_test_split untuk membagi dataset menjadi set pelatihan dan pengujian:

X_train, X_test, y_train, y_test = train_test_split(X, y)

Kita akan menggunakan Standard Scalar supaya rentang nilai pada dataset tidak terlalu jauh.

ss = StandardScaler()
X_train_ss = ss.fit_transform(X_train) 
X_test_ss = ss.transform(X_test)

Setelah itu, kita akan menggunakan Random Forest Classifier tanpa Randomized Search dan dengan nilai default hyperparameter.

clf = RandomForestClassifier() 
clf.fit(X_train_ss, y_train) 
y_pred = clf.predict(X_test_ss)

Terakhir, kita akan melakukan evaluasi terkait model yang telah kita latih sebelumnya dengan menggunakan confusion matrix.

confusion_matrix(y_test, y_pred), "Test data") 
acc_rf = accuracy_score(y_test, y_pred) 
print(acc_rf)

Sebelumnya, kita telah membangun model Random Forest Classifier tanpa Randomized Search. Sekarang, kita akan menggunakan Random Forest Classifier dengan Randomized Search untuk menemukan nilai terbaik dari hyperparameter.

Kita akan menyetel lima hyperparameter dari Random Forest Classifier di sini, seperti max_depth, max_features, min_samples_split, bootstrap, dan criteria. Randomized Search akan mencari melalui distribusi hyperparameter yang diberikan untuk menemukan nilai terbaik. Kita juga akan menggunakan skema cross-validation 3 kali lipat (cv = 3).

Setelah data pelatihan dimasukkan ke dalam model, parameter terbaik dari Pencarian Acak dapat diekstraksi dari hasil akhir.

param_dist = {"max_depth": [3, 5], 
    "max_features": sp_randint(1, 11), 
    "min_samples_split": sp_randint(2, 11), 
    "bootstrap": [True, False], 
    "criterion": ["gini", "entropy"]} 

# build a classifier 
clf = RandomForestClassifier(n_estimators=50)

# Randomized Search
random_search = RandomizedSearchCV(clf, param_distributions=param_dist, 
    n_iter=20, cv=5, iid=False) 
random_search.fit(X_train_ss, y_train)

print(random_search.best_params_)

Meskipun Grid Search memeriksa setiap kombinasi hyperparameter, kinerjanya buruk saat kita perlu menangani kumpulan data besar. Mencoba semua kombinasi hyperparameter pada kumpulan data besar adalah pekerjaan yang membosankan. Jika terdapat m jumlah hyperparameter untuk model dan setiap hyperparameter jika kita menguji n jumlah nilai, maka Pencarian Grid akan memeriksa kombinasi mxn.

Dalam Randomized Search, diasumsikan bahwa tidak semua hyperparameter sama pentingnya. Setiap iterasi mengambil sampel kombinasi acak dari hyperparameter, dan kemungkinan menemukan kombinasi yang baik lebih tinggi.

Leave a Comment

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

Scroll to Top