Mengenal Grid Search

Penyetelan Hyperparameter di Python

Alex Scriven

Data Scientist

Otomatisasi 2 Hiperparameter

Pekerjaan Anda sebelumnya:

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)

Lalu kita gabungkan ke dataframe untuk dianalisis.

Penyetelan Hyperparameter di Python

Otomatisasi 2 Hiperparameter

 

Bagaimana menguji nilai dari 2 hiperparameter?

Menggunakan algoritme GBM:

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

Kita bisa gunakan for loop (nested)!

Penyetelan Hyperparameter di Python

Otomatisasi 2 Hiperparameter

Pertama, fungsi pembuat model:

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)])
Penyetelan Hyperparameter di Python

Otomatisasi 2 Hiperparameter

 

Sekarang kita dapat melakukan loop pada daftar hiperparameter dan memanggil fungsi:

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))

Penyetelan Hyperparameter di Python

Otomatisasi 2 Hiperparameter

 

Kita juga dapat memasukkan hasil ini ke DataFrame dan mencetaknya:

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

tabel hasil

Penyetelan Hyperparameter di Python

Berapa banyak model?

 

Ada jauh lebih banyak model saat menambah hiperparameter dan nilainya.

  • Hubungannya bukan linear, tapi eksponensial
  • Satu nilai tambahan bukan hanya satu model
  • 5 untuk Hiperparameter 1 dan 10 untuk Hiperparameter 2 berarti 50 model!

Bagaimana dengan cross-validation?

  • 10-fold cross-validation menjadi 50x10 = 500 model!
Penyetelan Hyperparameter di Python

Dari 2 ke N hiperparameter

 

Bagaimana jika menambah lebih banyak hiperparameter?

Kita bisa menumpuk (nest) loop!

# Sesuaikan daftar nilai yang diuji
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']
Penyetelan Hyperparameter di Python

Dari 2 ke N hiperparameter

Sesuaikan fungsi kita:

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)])
Penyetelan Hyperparameter di Python

Dari 2 ke N hiperparameter

Menyesuaikan for loop (nested):

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)
Penyetelan Hyperparameter di Python

Dari 2 ke N hiperparameter

 

Sekarang berapa banyak model?

  • 7x9x5x2 = 630 (6.300 jika pakai cross-validation!)

Kita tidak bisa terus menambah nesting!

Selain itu, bagaimana jika kita ingin:

  • Rincian waktu latih & skor
  • Rincian skor cross-validation
Penyetelan Hyperparameter di Python

Mengenal Grid Search

Mari buat grid:

  • Di kiri semua nilai max_depth
  • Di atas semua nilai learning_rate

Tabel kombinasi hiperparameter

Penyetelan Hyperparameter di Python

Mengenal Grid Search

Mengerjakan tiap sel pada grid:

tabel kombinasi hiperparameter

(4,0.001) setara dengan membuat estimator seperti ini:

GradientBoostingClassifier(max_depth=4, learning_rate=0.001)
Penyetelan Hyperparameter di Python

Kelebihan & Kekurangan Grid Search

 

Beberapa keunggulan pendekatan ini:

Keunggulan:

  • Anda tidak perlu menulis ribuan baris kode
  • Menemukan model terbaik dalam grid (*catatan khusus di sini!)
  • Mudah dijelaskan
Penyetelan Hyperparameter di Python

Kelebihan & Kekurangan Grid Search

 

Beberapa kekurangan pendekatan ini:

  • Mahal secara komputasi! Ingat seberapa cepat kita membuat 6.000+ model?
  • Bersifat 'tanpa informasi'. Hasil satu model tidak membantu model berikutnya.

 

Kita akan bahas metode yang 'berinformasi' nanti!

Penyetelan Hyperparameter di Python

Ayo berlatih!

Penyetelan Hyperparameter di Python

Preparing Video For Download...