Pencarian Grid dengan Scikit Learn

Penyetelan Hyperparameter di Python

Alex Scriven

Data Scientist

Objek GridSearchCV

 

Memperkenalkan objek 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')
Penyetelan Hyperparameter di Python

Langkah-langkah Grid Search

 

Langkah dalam Grid Search:

  1. Algoritme untuk menyetel hyperparameter (sering disebut 'estimator')
  2. Menentukan hyperparameter yang akan disetel
  3. Menentukan rentang nilai untuk tiap hyperparameter
  4. Menetapkan skema cross-validation; dan
  5. Menetapkan fungsi skor untuk memilih kotak grid 'terbaik'
  6. Sertakan info atau fungsi tambahan
Penyetelan Hyperparameter di Python

Input Objek GridSearchCV

Input penting:

  • estimator
  • param_grid
  • cv
  • scoring
  • refit
  • n_jobs
  • return_train_score
Penyetelan Hyperparameter di Python

GridSearchCV 'estimator'

 

Input estimator:

  • Intinya adalah algoritme kita
  • Anda sudah memakai KNN, Random Forest, GBM, Logistic Regression

 

Ingat:

  • Hanya satu estimator per objek GridSearchCV
Penyetelan Hyperparameter di Python

GridSearchCV 'param_grid'

Input param_grid:

  • Menetapkan hyperparameter dan nilai yang diuji

Daripada daftar:

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

Menjadi:

param_grid = {'max_depth': [2, 4, 6, 8],
              'min_samples_leaf': [1, 2, 4, 6]}
Penyetelan Hyperparameter di Python

GridSearchCV 'param_grid'

Input param_grid:

Ingat: Kunci di kamus param_grid harus hyperparameter yang valid.

Contoh untuk estimator Logistic Regression:

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

GridSearchCV 'cv'

Input cv:

  • Pilihan skema cross-validation
  • Angka bulat menjalankan k-fold CV; 5 atau 10 umum dipakai

wikipedia k-fold

Penyetelan Hyperparameter di Python

GridSearchCV 'scoring'

 

Input scoring:

  • Skor untuk memilih kotak grid (model) terbaik
  • Gunakan metrik Anda sendiri atau modul metrics Scikit Learn

Lihat semua fungsi scoring bawaan seperti ini:

from sklearn import metrics
sorted(metrics.SCORERS.keys())
Penyetelan Hyperparameter di Python

GridSearchCV 'refit'

 

Input refit:

  • Memasang hyperparameter terbaik ke data latih
  • Membuat objek GridSearchCV bisa dipakai sebagai estimator (untuk prediksi)
  • Sangat berguna!
Penyetelan Hyperparameter di Python

GridSearchCV 'n_jobs'

Input n_jobs:

  • Membantu eksekusi paralel
  • Memungkinkan banyak model dibuat bersamaan, bukan satu per satu

Kode berguna:

import os
print(os.cpu_count())

Hati-hati memakai semua core untuk pemodelan jika ingin mengerjakan hal lain!

Penyetelan Hyperparameter di Python

GridSearchCV 'return_train_score'

 

Input return_train_score:

  • Mencatat statistik dari run pelatihan yang dijalankan
  • Berguna untuk analisis bias-variance, tetapi menambah biaya komputasi
  • Tidak membantu memilih model terbaik; hanya untuk analisis
Penyetelan Hyperparameter di Python

Membangun Objek GridSearchCV

 

Membangun Objek GridSearchCV kita sendiri:

# 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')
Penyetelan Hyperparameter di Python

Membangun Objek GridSearchCv

 

Menggabungkan semuanya:

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

Menggunakan Objek GridSearchCV

 

Karena refit disetel ke True, kita bisa langsung memakai objeknya:

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

# Make predictions
grid_rf_class.predict(X_test)
Penyetelan Hyperparameter di Python

Ayo berlatih!

Penyetelan Hyperparameter di Python

Preparing Video For Download...