Ajuste de hiperparâmetros

Aprendizado Supervisionado com o scikit-learn

George Boorman

Core Curriculum Manager

Ajuste de hiperparâmetros

  • Regressão ridge/lasso: como escolher alpha

  • KNN: como escolher n_neighbors

  • Hiperparâmetros: parâmetros que especificamos antes de ajustar o modelo

    • Como alpha e n_neighbors
Aprendizado Supervisionado com o scikit-learn

Como escolher os hiperparâmetros corretos

  1. Testar muitos valores diferentes de hiperparâmetros

  2. Fazer o ajuste de todos eles separadamente

  3. Observar o desempenho deles

  4. Escolher os valores com melhor desempenho

 

  • Isso é chamado de ajuste de hiperparâmetros

  • É essencial usar a validação cruzada para evitar o sobreajuste ao conjunto de teste

  • Ainda podemos dividir os dados e realizar a validação cruzada no conjunto de treinamento

  • Reservamos o conjunto de teste para a avaliação final

Aprendizado Supervisionado com o scikit-learn

Validação cruzada com pesquisa em grade

grade de possíveis valores de n vizinhos de 2 a 11, em incrementos de 3, e opções de métricas euclidiana ou de manhattan

Aprendizado Supervisionado com o scikit-learn

Validação cruzada com pesquisa em grade

Pontuações de validação cruzada k-fold para cada combinação de hiperparâmetros na grade

Aprendizado Supervisionado com o scikit-learn

Validação cruzada com pesquisa em grade

Destaque para 5 vizinhos e métrica euclidiana, com pontuação de 0,8748

Aprendizado Supervisionado com o scikit-learn

GridSearchCV no scikit-learn

from sklearn.model_selection import GridSearchCV

kf = KFold(n_splits=5, shuffle=True, random_state=42)
param_grid = {"alpha": np.arange(0.0001, 1, 10), "solver": ["sag", "lsqr"]}
ridge = Ridge()
ridge_cv = GridSearchCV(ridge, param_grid, cv=kf)
ridge_cv.fit(X_train, y_train)
print(ridge_cv.best_params_, ridge_cv.best_score_)
{'alpha': 0.0001, 'solver': 'sag'}
0.7529912278705785
Aprendizado Supervisionado com o scikit-learn

Limitações e uma abordagem alternativa

  • Validação cruzada com 3 grupos, 1 hiperparâmetro, 10 valores totais = 30 ajustes
  • Validação cruzada com 10 grupos, 3 hiperparâmetros, 30 valores ao todo = 900 ajustes
Aprendizado Supervisionado com o scikit-learn

RandomizedSearchCV

from sklearn.model_selection import RandomizedSearchCV

kf = KFold(n_splits=5, shuffle=True, random_state=42) param_grid = {'alpha': np.arange(0.0001, 1, 10), "solver": ['sag', 'lsqr']} ridge = Ridge()
ridge_cv = RandomizedSearchCV(ridge, param_grid, cv=kf, n_iter=2) ridge_cv.fit(X_train, y_train)
print(ridge_cv.best_params_, ridge_cv.best_score_)
{'solver': 'sag', 'alpha': 0.0001}
0.7529912278705785
Aprendizado Supervisionado com o scikit-learn

Avaliação com o conjunto de teste

test_score = ridge_cv.score(X_test, y_test)

print(test_score)
0.7564731534089224
Aprendizado Supervisionado com o scikit-learn

Vamos praticar!

Aprendizado Supervisionado com o scikit-learn

Preparing Video For Download...