Grid Search, Hyperparameter Optimization

Kategori: Machine Learning , 06 Ocak 2020 , JanFranco


Şu ana kadar bir çok uygulama yaptık. Her uygulamada farklı modeller denedik. Bu modellerin bir çok parametresi bulunuyor. Bu parametrelerle çok fazla oynamadık fakat bu parametreler başarıyı etkileyen parametreler. Sklearn kütüphanesindeki Grid Search algoritması ile bu parametreleri farklı değerler için otomatik olarak test edebilir, en iyi sonucu ve en iyi sonucu veren parametreleri bulabiliriz. Örnek üzerinden görelim:


from sklearn.svm import SVC
from sklearn.datasets import load_iris
from sklearn.metrics import accuracy_score, confusion_matrix
from sklearn.model_selection import train_test_split, cross_val_score, GridSearchCV

df = load_iris()
x = df.data
y = df.target

x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=.3)

svc = SVC(gamma='auto')
svc.fit(x_train, y_train)
res = svc.predict(x_test)

cm = confusion_matrix(res, y_test)
print(cm)
print("Accuracy = ", accuracy_score(res, y_test))

crossValScore = cross_val_score(svc, x_train, y_train, cv=3)
print("Cross Validation Score = ", crossValScore.mean())
print("Standard Deviation = ", crossValScore.std())
Buraya kadarki kısmı bir önceki yazıda anlattım. O yazıda KNN kullanmıştım, şimdi SVC kullanıyorum. SVC algoritmasının C, kernel ve gamma parametrelerini optimize etmek istiyoruz. Grid Search algoritmasına bu parametreleri ve alabileceği değerleri verebiliriz. Öncelikle parametreleri ve alabileceği değerleri tanımlayalım:


params = [{'C': [1, 2, 3, 4, 5], 'kernel': ['linear']},
          {'C': [1, 10, 100, 1000], 'kernel': ['rbf'], 'gamma': [1, .5, .1, .01, .001]}]
Burada algoritma şu işi yapacak: kernel parametresini linear olarak ayarla ve C değerini 1-5 aralığında linear kerneli değiştirmeden dene. Daha sonra kerneli rbf olarak ayarla ve rbf - C:1 gamma:1, rbf - C:2 gamma:10, rbf - C:100 gamma:1 şeklinde dene. Tabi C değerleri bittiğinde bu sefer gamma değeri 0.5 olacak ve C değerleri baştan sonra tekrar denenecek. GridSearchCV sınıfından bir obje türetelim. Sınıfa parametre olarak sınıflandırıcı (svc), parametreleri, metriği veriyoruz. jobs parametresini -1 olarak ayarlayalım. Paralel çalışma içindir. cv parametresi cross validation içindir, 3 verelim:


gs = GridSearchCV(svc, params, 'accuracy', -1, cv=3)
gridSearch = gs.fit(x_train, y_train)
print(gridSearch.best_score_)
print(gridSearch.best_params_)

>>

[[17  0  0]
 [ 0 13  0]
 [ 0  1 14]]
Accuracy =  0.9777777777777777
Cross Validation Score =  0.9619047619047619
Standard Deviation =  0.03563483225498993
0.9904761904761905
{'C': 1, 'kernel': 'linear'}


Sonraki Yazı: Saving and Loading Models
Yorumlar

Henüz bir yorum bulunmuyor.
Yorum bırakın