Slumpsökning i Scikit-learn

Hyperparameterjustering i Python

Alex Scriven

Data Scientist

Jämförelse med GridSearchCV

 

Vi behöver inte uppfinna hjulet på nytt. Låt oss repetera stegen för en Grid Search:

  1. Välj algoritm/estimator
  2. Definiera vilka hyperparametrar som ska justeras
  3. Definiera ett värdeintervall för varje hyperparameter
  4. Ange ett korsvalideringsschema; och
  5. Definiera en poängfunktion
  6. Inkludera extra användbar information eller funktioner
Hyperparameterjustering i Python

Jämförelse med Grid Search

   

Det finns bara en skillnad:

  • Steg 7 = Bestäm hur många sampel som ska tas (sampla sedan)

 

Det är allt! (i stort sett)

Hyperparameterjustering i Python

Jämförelse av Scikit-learn-moduler

Modulerna liknar varandra också:

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

 

RandomizedSearchCV:

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

Viktiga skillnader

 

Två viktiga skillnader:

  • n_iter är antalet sampel som slumpsökningen tar från ditt rutnät. I det tidigare exemplet använde du 300.

  • param_distributions skiljer sig något från param_grid och ger möjlighet att ange en fördelning för samplingen.

    • Som standard har alla kombinationer lika stor chans att väljas.
Hyperparameterjustering i Python

Bygg ett RandomizedSearchCV-objekt

Nu kan vi bygga ett slumpsökningsobjekt precis som grid search, men med vår lilla ändring:

# Set up the sample space
learn_rate_list = np.linspace(0.001,2,150)
min_samples_leaf_list = list(range(1,51))

# Create the grid
parameter_grid = {
    'learning_rate' : learn_rate_list,
    'min_samples_leaf' : min_samples_leaf_list}

# Define how many samples number_models = 10
Hyperparameterjustering i Python

Bygg ett RandomizedSearchCV-objekt

Nu kan vi bygga objektet

# Create a random search object
random_GBM_class = RandomizedSearchCV(
    estimator = GradientBoostingClassifier(),
    param_distributions = parameter_grid,
    n_iter = number_models,
    scoring='accuracy',
    n_jobs=4, 
    cv = 10,
    refit=True, 
    return_train_score = True)
# Fit the object to our data
random_GBM_class.fit(X_train, y_train)
Hyperparameterjustering i Python

Analysera utdata

Utdata är exakt densamma!

Hur ser vi vilka hyperparametervärden som valdes?

Ordlistan cv_results_ (i de relevanta param_-kolumnerna)!

Extrahera listorna:

rand_x = list(random_GBM_class.cv_results_['param_learning_rate'])
rand_y = list(random_GBM_class.cv_results_['param_min_samples_leaf'])
Hyperparameterjustering i Python

Analysera utdata

Bygg vår visualisering:

# Make sure we set the limits of Y and X appriately
x_lims = [np.min(learn_rate_list), np.max(learn_rate_list)]
y_lims = [np.min(min_samples_leaf_list), np.max(min_samples_leaf_list)]

# Plot grid results plt.scatter(rand_y, rand_x, c=['blue']*10) plt.gca().set(xlabel='learn_rate', ylabel='min_samples_leaf', title='Random Search Hyperparameters') plt.show()
Hyperparameterjustering i Python

Analysera utdata

Ett liknande diagram som tidigare:

graf över slumpmässig täckning

Hyperparameterjustering i Python

Nu kör vi en övning!

Hyperparameterjustering i Python

Preparing Video For Download...