Optimización de hiperparámetros

Aprendizaje supervisado con scikit-learn

George Boorman

Core Curriculum Manager

Optimización de hiperparámetros

  • Regresión Ridge/Lasso: elegir alpha

  • KNN: elegir n_neighbors

  • Hiperparámetros: parámetros que especificamos antes de ajustar el modelo

    • Como alpha y n_neighbors
Aprendizaje supervisado con scikit-learn

Elegir los hiperparámetros correctos

  1. Probar muchos valores diferentes de hiperparámetros

  2. Colocarlos todos por separado

  3. Comprobar su rendimiento

  4. Elegir los valores de mejor rendimiento

 

  • Esto se denomina ajuste de hiperparámetros.

  • Es esencial utilizar la validación cruzada para evitar el sobreajuste del conjunto de prueba.

  • Todavía podemos dividir los datos y realizar una validación cruzada en el conjunto de entrenamiento.

  • Conservaremos el conjunto de pruebas para la evaluación final.

Aprendizaje supervisado con scikit-learn

Validación cruzada de búsqueda en cuadrícula

parrilla de valores potenciales de n vecinos de 2 a 11 en incrementos de 3, y opciones métricas de euclídeo o manhattan

Aprendizaje supervisado con scikit-learn

Validación cruzada de búsqueda en cuadrícula

puntuaciones de validación cruzada k-fold para cada combinación de hiperparámetros en la parrilla

Aprendizaje supervisado con scikit-learn

Validación cruzada de búsqueda en cuadrícula

5 vecinos y resaltado de la métrica euclídea, con una puntuación de 0,8748

Aprendizaje supervisado con scikit-learn

GridSearchCV en 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
Aprendizaje supervisado con scikit-learn

Limitaciones y un enfoque alternativo

  • Validación cruzada de 3 pliegues, 1 hiperparámetro, 10 valores totales = 30 ajustes
  • Validación cruzada de 10 pliegues, 3 hiperparámetros, 30 valores totales = 900 ajustes
Aprendizaje supervisado con 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
Aprendizaje supervisado con scikit-learn

Evaluar en el conjunto de pruebas

test_score = ridge_cv.score(X_test, y_test)

print(test_score)
0.7564731534089224
Aprendizaje supervisado con scikit-learn

¡Vamos a practicar!

Aprendizaje supervisado con scikit-learn

Preparing Video For Download...