Grid Search med Scikit-Learn

Hyperparameterjustering i Python

Alex Scriven

Data Scientist

GridSearchCV-objektet

 

Introducerar ett GridSearchCV-objekt:

sklearn.model_selection.GridSearchCV(
    estimator,
    param_grid, scoring=None, fit_params=None,
    n_jobs=None, refit=True, cv='warn',
    verbose=0, pre_dispatch='2*n_jobs',
    error_score='raise-deprecating',
    return_train_score='warn')
Hyperparameterjustering i Python

Steg i en Grid Search

 

Steg i en Grid Search:

  1. En algoritm för att justera hyperparametrarna (kallas ibland "estimator")
  2. Definiera vilka hyperparametrar som ska justeras
  3. Definiera ett värdeintervall för varje hyperparameter
  4. Ange ett korsvalideringsupplägg; och
  5. Definiera en poängfunktion för att avgöra vilken ruta i rutnätet som var "bäst"
  6. Inkludera extra användbar information eller funktioner
Hyperparameterjustering i Python

Ingångar till GridSearchCV-objektet

De viktigaste ingångarna är:

  • estimator
  • param_grid
  • cv
  • scoring
  • refit
  • n_jobs
  • return_train_score
Hyperparameterjustering i Python

GridSearchCV 'estimator'

 

Ingången estimator:

  • I grunden vår algoritm
  • Du har redan arbetat med KNN, Random Forest, GBM och logistisk regression

 

Kom ihåg:

  • Endast en estimator per GridSearchCV-objekt
Hyperparameterjustering i Python

GridSearchCV 'param_grid'

Ingången param_grid:

  • Anger vilka hyperparametrar och värden som ska testas

Istället för en lista:

max_depth_list = [2, 4, 6, 8]
min_samples_leaf_list = [1, 2, 4, 6]

Skrivs det så här:

param_grid = {'max_depth': [2, 4, 6, 8],
              'min_samples_leaf': [1, 2, 4, 6]}
Hyperparameterjustering i Python

GridSearchCV 'param_grid'

Ingången param_grid:

Kom ihåg: Nycklarna i din param_grid-ordbok måste vara giltiga hyperparametrar.

Till exempel, för en estimator med logistisk regression:

# Incorrect
param_grid = {'C': [0.1,0.2,0.5],
              'best_choice': [10,20,50]}
ValueError: Invalid parameter best_choice for estimator LogisticRegression
Hyperparameterjustering i Python

GridSearchCV 'cv'

Ingången cv:

  • Välj hur korsvalidering ska genomföras
  • Ett heltal ger k-faldig korsvalidering, där 5 eller 10 vanligtvis är standard

k-fold wikipedia

Hyperparameterjustering i Python

GridSearchCV 'scoring'

 

Ingången scoring:

  • Vilket mått som används för att välja den bästa rutnätsrutan (modellen)
  • Använd ett eget mått eller Scikit-Learns metrics-modul

Du kan se alla inbyggda poängfunktioner på det här sättet:

from sklearn import metrics
sorted(metrics.SCORERS.keys())
Hyperparameterjustering i Python

GridSearchCV 'refit'

 

Ingången refit:

  • Anpassar de bästa hyperparametrarna till träningsdatan
  • Gör att GridSearchCV-objektet kan användas som en estimator (för prediktion)
  • Ett mycket praktiskt alternativ!
Hyperparameterjustering i Python

GridSearchCV 'n_jobs'

Ingången n_jobs:

  • Möjliggör parallell körning
  • Låter flera modeller skapas samtidigt, i stället för en i taget

Användbar kod:

import os
print(os.cpu_count())

Var försiktig med att använda alla kärnor för modellering om du vill göra annat arbete samtidigt!

Hyperparameterjustering i Python

GridSearchCV 'return_train_score'

 

Ingången return_train_score:

  • Loggar statistik om de träningskörningar som genomfördes
  • Användbar för att analysera bias-varians-avvägningen, men ökar beräkningskostnaden
  • Hjälper inte till att välja den bästa modellen – används enbart för analys
Hyperparameterjustering i Python

Bygg ett GridSearchCV-objekt

 

Bygg ett eget GridSearchCV-objekt:

# Create the grid
param_grid = {'max_depth': [2, 4, 6, 8], 'min_samples_leaf': [1, 2, 4, 6]}

#Get a base classifier with some set parameters. rf_class = RandomForestClassifier(criterion='entropy', max_features='auto')
Hyperparameterjustering i Python

Bygg ett GridSearchCV-objekt

 

Sätt ihop delarna:

grid_rf_class = GridSearchCV(
    estimator = rf_class,
    param_grid = parameter_grid,
    scoring='accuracy',
    n_jobs=4,
    cv = 10,
    refit=True,
    return_train_score=True)
Hyperparameterjustering i Python

Använda ett GridSearchCV-objekt

 

Eftersom vi satte refit till True kan vi använda objektet direkt:

#Fit the object to our data
grid_rf_class.fit(X_train, y_train)

# Make predictions
grid_rf_class.predict(X_test)
Hyperparameterjustering i Python

Nu kör vi en övning!

Hyperparameterjustering i Python

Preparing Video For Download...