Izgara Aramaya Giriş

Python'da Hiperparametre Ayarlama

Alex Scriven

Data Scientist

2 Hiperparametreyi Otomatize Etme

Önceki çalışmanız:

neighbors_list = [3,5,10,20,50,75]
accuracy_list = []
for test_number in neighbors_list:
    model = KNeighborsClassifier(n_neighbors=test_number)
    predictions = model.fit(X_train, y_train).predict(X_test)
    accuracy = accuracy_score(y_test, predictions)
    accuracy_list.append(accuracy)

Daha sonra bunları analiz için bir veri çerçevesinde birleştirdik.

Python'da Hiperparametre Ayarlama

2 Hiperparametreyi Otomatize Etme

 

Peki 2 hiperparametrenin değerlerini test etmek?

Bir GBM algoritması kullanarak:

  • learn_rate [0.001, 0.01, 0.05]
  • max_depth [4,6,8,10]

İç içe bir for döngüsü kullanabiliriz!

Python'da Hiperparametre Ayarlama

2 Hiperparametreyi Otomatize Etme

Önce bir model oluşturma fonksiyonu:

def gbm_grid_search(learn_rate, max_depth):
    model = GradientBoostingClassifier(
            learning_rate=learn_rate,
            max_depth=max_depth)

predictions = model.fit(X_train, y_train).predict(X_test)
return([learn_rate, max_depth, accuracy_score(y_test, predictions)])
Python'da Hiperparametre Ayarlama

2 Hiperparametreyi Otomatize Etme

 

Artık hiperparametre listelerimizde döngü kurup fonksiyonumuzu çağırabiliriz:

results_list = []

for learn_rate in learn_rate_list:
    for max_depth in max_depth_list:
        results_list.append(gbm_grid_search(learn_rate,max_depth))

Python'da Hiperparametre Ayarlama

2 Hiperparametreyi Otomatize Etme

 

Bu sonuçları bir DataFrame'e de koyup yazdırabiliriz:

results_df = pd.DataFrame(results_list, columns=['learning_rate', 'max_depth', 'accuracy'])
print(results_df)

sonuçlar tablosu

Python'da Hiperparametre Ayarlama

Kaç model?

 

Daha fazla hiperparametre ve değer ekleyerek çok daha fazla model kuruldu.

  • İlişki doğrusal değil, üstel
  • Bir hiperparametreye bir değer daha eklemek sadece bir model değildir
  • Hiperparametre 1 için 5 ve Hiperparametre 2 için 10 => 50 model!

Peki çapraz doğrulama?

  • 10 katlı çapraz doğrulama 50x10 = 500 model yapar!
Python'da Hiperparametre Ayarlama

2'den N hiperparametreye

 

Daha fazla hiperparametre eklemek nasıl olur?

Döngümüzü iç içe yazabiliriz!

# Test edilecek değerleri ayarlayın
learn_rate_list = [0.001, 0.01, 0.1, 0.2, 0.3, 0.4, 0.5]
max_depth_list = [4,6,8, 10, 12, 15, 20, 25, 30]
subsample_list = [0.4,0.6, 0.7, 0.8, 0.9]
max_features_list = ['auto', 'sqrt']
Python'da Hiperparametre Ayarlama

2'den N hiperparametreye

Fonksiyonumuzu uyarlayalım:

def gbm_grid_search(learn_rate, max_depth,subsample,max_features):
    model = GradientBoostingClassifier(
        learning_rate=learn_rate, 
        max_depth=max_depth,
        subsample=subsample,
        max_features=max_features)
    predictions = model.fit(X_train, y_train).predict(X_test)
    return([learn_rate, max_depth, accuracy_score(y_test, predictions)])
Python'da Hiperparametre Ayarlama

2'den N hiperparametreye

For döngüsünü (iç içe) ayarlama:

for learn_rate in learn_rate_list:
    for max_depth in max_depth_list:
        for subsample in subsample_list:
            for max_features in max_features_list:
                results_list.append(gbm_grid_search(learn_rate,max_depth,
                                     subsample,max_features))
results_df = pd.DataFrame(results_list, columns=['learning_rate',
                         'max_depth', 'subsample', 'max_features','accuracy'])
print(results_df)
Python'da Hiperparametre Ayarlama

2'den N hiperparametreye

 

Şimdi kaç model?

  • 7x9x5x2 = 630 (çapraz doğrulama ile 6.300!)

Sonsuza kadar iç içe yazamayız!

Ayrıca şunları istesek:

  • Eğitim süreleri ve skorların ayrıntıları
  • Çapraz doğrulama skorlarının ayrıntıları
Python'da Hiperparametre Ayarlama

Izgara Aramaya Giriş

Bir ızgara oluşturalım:

  • Solda tüm max_depth değerleri
  • Üstte tüm learning_rate değerleri

Hiperparametre kombinasyonları tablosu

Python'da Hiperparametre Ayarlama

Izgara Aramaya Giriş

Izgaradaki her hücreyi sırayla değerlendirme:

hiperparametre kombinasyonları tablosu

(4,0.001), şu tahmin ediciyi kurmakla eşdeğerdir:

GradientBoostingClassifier(max_depth=4, learning_rate=0.001)
Python'da Hiperparametre Ayarlama

Grid Search: Artılar ve Eksiler

 

Bu yaklaşımın bazı avantajları:

Avantajlar:

  • Binlerce satır kod yazmanız gerekmez
  • Izgaradaki en iyi modeli bulur (*özel not burada!)
  • Açıklaması kolay
Python'da Hiperparametre Ayarlama

Grid Search: Artılar ve Eksiler

 

Bu yaklaşımın bazı dezavantajları:

  • Hesaplama açısından maliyetli! 6.000+ modeli ne kadar hızlı ürettiğimizi hatırlayınız.
  • "Bilgisiz"dir. Bir modelin sonucu sonraki modeli kurmaya yardımcı olmaz.

 

"Bilgili" yöntemleri ileride ele alacağız!

Python'da Hiperparametre Ayarlama

Ayo berlatih!

Python'da Hiperparametre Ayarlama

Preparing Video For Download...