Grid Search cu Scikit Learn

Ajustarea hiperparametrilor în Python

Alex Scriven

Data Scientist

Obiectul GridSearchCV

 

Introducere în obiectul GridSearchCV:

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

Pașii unui Grid Search

 

Pașii unui Grid Search:

  1. Un algoritm pentru ajustarea hiperparametrilor (numit uneori „estimator")
  2. Definirea hiperparametrilor de ajustat
  3. Definirea unui interval de valori pentru fiecare hiperparametru
  4. Stabilirea unei scheme de validare încrucișată; și
  5. Definirea unei funcții de scor pentru a identifica cea mai bună combinație din grilă.
  6. Includerea de informații sau funcții suplimentare utile
Ajustarea hiperparametrilor în Python

Parametrii obiectului GridSearchCV

Parametrii importanți sunt:

  • estimator
  • param_grid
  • cv
  • scoring
  • refit
  • n_jobs
  • return_train_score
Ajustarea hiperparametrilor în Python

GridSearchCV 'estimator'

 

Parametrul estimator:

  • Esențialmente algoritmul nostru
  • Ați lucrat deja cu KNN, Random Forest, GBM, Regresie Logistică

 

Rețineți:

  • Un singur estimator per obiect GridSearchCV
Ajustarea hiperparametrilor în Python

GridSearchCV 'param_grid'

Parametrul param_grid:

  • Specifică hiperparametrii și valorile de testat

În loc de o listă:

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

Acesta ar fi:

param_grid = {'max_depth': [2, 4, 6, 8],
              'min_samples_leaf': [1, 2, 4, 6]}
Ajustarea hiperparametrilor în Python

GridSearchCV 'param_grid'

Parametrul param_grid:

Rețineți: Cheile din dicționarul param_grid trebuie să fie hiperparametri valizi.

De exemplu, pentru un estimator de regresie logistică:

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

GridSearchCV 'cv'

Parametrul cv:

  • Modul de realizare a validării încrucișate
  • Un număr întreg realizează validare k-fold; de obicei 5 sau 10

k-fold wikipedia

Ajustarea hiperparametrilor în Python

GridSearchCV 'scoring'

 

Parametrul scoring:

  • Scorul utilizat pentru alegerea celui mai bun model
  • Utilizați propriul scor sau modulul metrics din Scikit Learn

Puteți verifica toate funcțiile de scoring predefinite astfel:

from sklearn import metrics
sorted(metrics.SCORERS.keys())
Ajustarea hiperparametrilor în Python

GridSearchCV 'refit'

 

Parametrul refit:

  • Antrenează modelul cu cei mai buni hiperparametri pe datele de antrenament
  • Permite utilizarea obiectului GridSearchCV ca estimator (pentru predicții)
  • O opțiune foarte utilă!
Ajustarea hiperparametrilor în Python

GridSearchCV 'n_jobs'

Parametrul n_jobs:

  • Facilitează execuția paralelă
  • Permite crearea mai multor modele simultan, nu secvențial

Cod util:

import os
print(os.cpu_count())

Atenție la utilizarea tuturor nucleelor dacă doriți să efectuați și alte activități!

Ajustarea hiperparametrilor în Python

GridSearchCV 'return_train_score'

 

Parametrul return_train_score:

  • Înregistrează statistici despre rulările de antrenament efectuate
  • Util pentru analiza compromisului bias-varianță, dar adaugă cost computațional.
  • Nu ajută la selectarea celui mai bun model, ci doar pentru analiză
Ajustarea hiperparametrilor în Python

Construirea unui obiect GridSearchCV

 

Construirea propriului obiect GridSearchCV:

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

Construirea unui obiect GridSearchCV

 

Asamblarea componentelor:

grid_rf_class = GridSearchCV(
    estimator = rf_class,
    param_grid = parameter_grid,
    scoring='accuracy',
    n_jobs=4,
    cv = 10,
    refit=True,
    return_train_score=True)
Ajustarea hiperparametrilor în Python

Utilizarea unui obiect GridSearchCV

 

Deoarece refit este setat la True, putem utiliza direct obiectul:

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

# Make predictions
grid_rf_class.predict(X_test)
Ajustarea hiperparametrilor în Python

Să exersăm!

Ajustarea hiperparametrilor în Python

Preparing Video For Download...