Introduktion till Grid Search

Hyperparameterjustering i Python

Alex Scriven

Data Scientist

Automatisera 2 hyperparametrar

Ditt tidigare arbete:

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)

Resultaten samlades sedan i en DataFrame för analys.

Hyperparameterjustering i Python

Automatisera 2 hyperparametrar

 

Vad händer om vi testar värden för 2 hyperparametrar?

Med en GBM-algoritm:

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

Vi kan använda en (nästlad) for-loop!

Hyperparameterjustering i Python

Automatisera 2 hyperparametrar

Först en funktion för att skapa modeller:

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)])
Hyperparameterjustering i Python

Automatisera 2 hyperparametrar

 

Nu kan vi loopa igenom hyperparametrarnas listor och anropa funktionen:

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

Hyperparameterjustering i Python

Automatisera 2 hyperparametrar

 

Vi kan även lägga resultaten i en DataFrame och skriva ut dem:

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

resultattabell

Hyperparameterjustering i Python

Hur många modeller?

 

Fler hyperparametrar och värden ger snabbt många fler modeller.

  • Sambandet är inte linjärt utan exponentiellt
  • Ett extra värde för en hyperparameter innebär långt fler modeller
  • 5 värden för Hyperparameter 1 och 10 för Hyperparameter 2 ger 50 modeller!

Vad händer med korsvalidering?

  • 10-faldig korsvalidering ger 50×10 = 500 modeller!
Hyperparameterjustering i Python

Från 2 till N hyperparametrar

 

Vad händer om vi lägger till fler hyperparametrar?

Vi kan nästla loopen!

# 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']
Hyperparameterjustering i Python

Från 2 till N hyperparametrar

Anpassa funktionen:

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)])
Hyperparameterjustering i Python

Från 2 till N hyperparametrar

Anpassa for-loopen (nästling):

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)
Hyperparameterjustering i Python

Från 2 till N hyperparametrar

 

Hur många modeller nu?

  • 7×9×5×2 = 630 (6 300 med korsvalidering!)

Vi kan inte nästla i all oändlighet!

Dessuom kanske vi vill ha:

  • Information om träningstider och poäng
  • Information om korsvalideringspoäng
Hyperparameterjustering i Python

Introduktion till Grid Search

Vi skapar ett rutnät:

  • Alla värden för max_depth längs vänsterkanten
  • Alla värden för learning_rate längs toppen

Tabell över hyperparameterkombinationer

Hyperparameterjustering i Python

Introduktion till Grid Search

Vi arbetar igenom varje cell i rutnätet:

tabell över hyperparameterkombinationer

(4, 0,001) motsvarar att skapa en estimator så här:

GradientBoostingClassifier(max_depth=4, learning_rate=0.001)
Hyperparameterjustering i Python

Grid Search – för- och nackdelar

 

Fördelar med det här tillvägagångssättet:

Fördelar:

  • Du behöver inte skriva tusentals rader kod
  • Hittar den bästa modellen inom rutnätet (*med ett viktigt förbehåll!)
  • Lätt att förklara
Hyperparameterjustering i Python

Grid Search – för- och nackdelar

 

Nackdelar med det här tillvägagångssättet:

  • Beräkningstungt! Kom ihåg hur snabbt vi skapade 6 000+ modeller?
  • Metoden är "oinformerad". Resultaten från en modell påverkar inte nästa.

 

Vi tar upp "informerade" metoder senare!

Hyperparameterjustering i Python

Nu kör vi en övning!

Hyperparameterjustering i Python

Preparing Video For Download...