Căutarea aleatorie în Scikit-Learn

Ajustarea hiperparametrilor în Python

Alex Scriven

Data Scientist

Comparație cu GridSearchCV

 

Nu trebuie să reinventăm roata. Să reamintim pașii pentru o căutare Grid:

  1. Alegerea unui algoritm/estimator
  2. Definirea hiperparametrilor de ajustat
  3. Definirea intervalului de valori pentru fiecare hiperparametru
  4. Stabilirea schemei de validare încrucișată; și
  5. Definirea unei funcții de scor
  6. Includerea de informații sau funcții suplimentare
Ajustarea hiperparametrilor în Python

Comparație cu Grid Search

   

Există o singură diferență:

  • Pasul 7 = Stabilirea numărului de eșantioane (apoi eșantionarea)

 

Atât! (în mare)

Ajustarea hiperparametrilor în Python

Compararea modulelor Scikit-Learn

Modulele sunt similare:

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

Diferențe cheie

 

Două diferențe esențiale:

  • n_iter reprezintă numărul de eșantioane pe care căutarea aleatorie le extrage din grid. În exemplul anterior, s-au utilizat 300.

  • param_distributions diferă ușor față de param_grid, permițând opțional specificarea unei distribuții pentru eșantionare.

    • În mod implicit, toate combinațiile au șanse egale de a fi selectate.
Ajustarea hiperparametrilor în Python

Construirea unui obiect RandomizedSearchCV

Putem construi un obiect de căutare aleatorie similar cu cel de tip grid, cu o mică modificare:

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

Construirea unui obiect RandomizedSearchCV

Acum putem construi obiectul

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

Analiza rezultatelor

Rezultatul este identic!

Cum verificăm ce valori de hiperparametri au fost alese?

Dicționarul cv_results_ (în coloanele param_ relevante)!

Extragerea listelor:

rand_x = list(random_GBM_class.cv_results_['param_learning_rate'])
rand_y = list(random_GBM_class.cv_results_['param_min_samples_leaf'])
Ajustarea hiperparametrilor în Python

Analiza rezultatelor

Construirea vizualizării:

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

Analiza rezultatelor

Un grafic similar cu cel anterior:

grafic acoperire căutare aleatorie

Ajustarea hiperparametrilor în Python

Passons à la pratique !

Ajustarea hiperparametrilor în Python

Preparing Video For Download...