Introducere în Grid Search

Ajustarea hiperparametrilor în Python

Alex Scriven

Data Scientist

Automatizarea a 2 hiperparametri

Lucrul anterior:

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)

Aceste rezultate au fost colectate într-un DataFrame pentru analiză.

Ajustarea hiperparametrilor în Python

Automatizarea a 2 hiperparametri

 

Ce facem dacă testăm valorile a 2 hiperparametri?

Using a GBM algorithm:

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

Putem folosi o buclă for (imbricată)!

Ajustarea hiperparametrilor în Python

Automatizarea a 2 hiperparametri

Mai întâi, o funcție de creare a modelului:

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)])
Ajustarea hiperparametrilor în Python

Automatizarea a 2 hiperparametri

 

Acum putem itera prin listele de hiperparametri și apela funcția:

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

Ajustarea hiperparametrilor în Python

Automatizarea a 2 hiperparametri

 

Putem stoca rezultatele într-un DataFrame și le putem afișa:

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

tabel de rezultate

Ajustarea hiperparametrilor în Python

Câte modele?

 

Au fost construite mult mai multe modele adăugând mai mulți hiperparametri și valori.

  • Relația nu este liniară, ci exponențială
  • O valoare în plus pentru un hiperparametru nu înseamnă doar un model în plus
  • 5 valori pentru Hiperparametrul 1 și 10 pentru Hiperparametrul 2 înseamnă 50 de modele!

Dar validarea încrucișată?

  • Validarea încrucișată cu 10 folduri ar produce 50x10 = 500 de modele!
Ajustarea hiperparametrilor în Python

De la 2 la N hiperparametri

 

Ce se întâmplă dacă adăugăm mai mulți hiperparametri?

Putem imbrica buclele!

# Adjust the list of values to test
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']
Ajustarea hiperparametrilor în Python

De la 2 la N hiperparametri

Ajustăm funcția:

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)])
Ajustarea hiperparametrilor în Python

De la 2 la N hiperparametri

Ajustăm bucla for (imbricare):

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)
Ajustarea hiperparametrilor în Python

De la 2 la N hiperparametri

 

Câte modele acum?

  • 7x9x5x2 = 630 (6.300 cu validare încrucișată!)

Nu putem imbrica la infinit!

În plus, ce am face dacă am dori:

  • Detalii despre timpii de antrenare și scoruri
  • Detalii despre scorurile validării încrucișate
Ajustarea hiperparametrilor în Python

Introducere în Grid Search

Să creăm un grid:

  • Pe verticală, toate valorile max_depth
  • Pe orizontală, toate valorile learning_rate

Tabel cu combinații de hiperparametri

Ajustarea hiperparametrilor în Python

Introducere în Grid Search

Parcurgem fiecare celulă din grid:

Tabel cu combinații de hiperparametri

(4, 0.001) este echivalent cu crearea unui estimator astfel:

GradientBoostingClassifier(max_depth=4, learning_rate=0.001)
Ajustarea hiperparametrilor în Python

Avantaje și dezavantaje Grid Search

 

Câteva avantaje ale acestei abordări:

Avantaje:

  • Nu este necesară scrierea miilor de linii de cod
  • Identifică cel mai bun model din grid (*notă specială!)
  • Ușor de explicat
Ajustarea hiperparametrilor în Python

Avantaje și dezavantaje Grid Search

 

Câteva dezavantaje ale acestei abordări:

  • Costisitor computațional! Vă amintiți cât de repede am ajuns la 6.000+ modele?
  • Este „neinformat". Rezultatele unui model nu influențează crearea modelului următor.

 

Vom aborda metodele „informate" ulterior!

Ajustarea hiperparametrilor în Python

Să exersăm!

Ajustarea hiperparametrilor în Python

Preparing Video For Download...