Introducción
En el aprendizaje automático, las curvas de validación se utilizan para determinar las puntuaciones de entrenamiento y validación de un clasificador para diferentes valores de hiperparámetros. Esto puede ayudar a seleccionar los mejores hiperparámetros para un modelo. En este laboratorio, usaremos scikit-learn para trazar curvas de validación para un clasificador de máquinas de vectores de soporte (SVM).
Consejos sobre la VM
Una vez que se haya iniciado la VM, haga clic en la esquina superior izquierda para cambiar a la pestaña Cuaderno y acceder a Jupyter Notebook para practicar.
A veces, es posible que tenga que esperar unos segundos a que Jupyter Notebook termine de cargarse. La validación de operaciones no se puede automatizar debido a las limitaciones de Jupyter Notebook.
Si tiene problemas durante el aprendizaje, no dude en preguntar a Labby. Deje sus comentarios después de la sesión y lo resolveremos rápidamente para usted.
Carga del conjunto de datos
Comenzaremos cargando el conjunto de datos de dígitos de scikit-learn y seleccionando un subconjunto de los datos para la clasificación binaria de los dígitos 1 y 2.
from sklearn.datasets import load_digits
X, y = load_digits(return_X_y=True)
subset_mask = np.isin(y, [1, 2]) ## binary classification: 1 vs 2
X, y = X[subset_mask], y[subset_mask]
Definiendo el rango de hiperparámetros
Definiremos un rango de valores para el parámetro gamma del kernel de SVM que queremos probar.
param_range = np.logspace(-6, -1, 5)
Calculando las puntuaciones de validación
Usaremos la función validation_curve de scikit-learn para calcular las puntuaciones de entrenamiento y validación para el clasificador SVM con diferentes valores de gamma.
from sklearn.svm import SVC
from sklearn.model_selection import validation_curve
train_scores, test_scores = validation_curve(
SVC(),
X,
y,
param_name="gamma",
param_range=param_range,
scoring="accuracy",
n_jobs=2,
)
Graficando las curvas de validación
Usaremos matplotlib para graficar las puntuaciones de entrenamiento y validación en función de gamma.
import matplotlib.pyplot as plt
train_scores_mean = np.mean(train_scores, axis=1)
train_scores_std = np.std(train_scores, axis=1)
test_scores_mean = np.mean(test_scores, axis=1)
test_scores_std = np.std(test_scores, axis=1)
plt.title("Validation Curve with SVM")
plt.xlabel(r"$\gamma$")
plt.ylabel("Score")
plt.ylim(0.0, 1.1)
lw = 2
plt.semilogx(
param_range, train_scores_mean, label="Training score", color="darkorange", lw=lw
)
plt.fill_between(
param_range,
train_scores_mean - train_scores_std,
train_scores_mean + train_scores_std,
alpha=0.2,
color="darkorange",
lw=lw,
)
plt.semilogx(
param_range, test_scores_mean, label="Cross-validation score", color="navy", lw=lw
)
plt.fill_between(
param_range,
test_scores_mean - test_scores_std,
test_scores_mean + test_scores_std,
alpha=0.2,
color="navy",
lw=lw,
)
plt.legend(loc="best")
plt.show()
Resumen
En este laboratorio, aprendimos cómo usar scikit-learn para graficar curvas de validación para un clasificador de máquina de vectores de soporte. Cargamos un conjunto de datos, definimos un rango de valores de hiperparámetros, calculamos las puntuaciones de validación y graficamos los resultados. Esto puede ayudar a seleccionar los mejores hiperparámetros para un modelo y mejorar su rendimiento.