Validación cruzada con modelos lineales

Beginner

This tutorial is from open-source community. Access the source code

Introducción

En este laboratorio, usaremos validación cruzada con modelos lineales. Usaremos el conjunto de datos de diabetes y aplicaremos GridSearchCV para encontrar el mejor valor de alfa para la regresión Lasso. Luego graficaremos los errores y usaremos LassoCV para ver cuánto podemos confiar en la selección de alfa.

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 comentarios después de la sesión y lo resolveremos rápidamente para usted.

Cargar y preparar el conjunto de datos

Primero, cargaremos y prepararemos el conjunto de datos de diabetes. Solo usaremos las primeras 150 muestras para este ejercicio.

import matplotlib.pyplot as plt
import numpy as np
from sklearn import datasets

X, y = datasets.load_diabetes(return_X_y=True)
X = X[:150]
y = y[:150]

Aplicar GridSearchCV

A continuación, aplicaremos GridSearchCV para encontrar el mejor valor de alfa para la regresión Lasso. Usaremos una gama de valores de alfa desde 10^-4 hasta 10^-0.5 con 30 valores intermedios. Usaremos 5 pliegues para la validación cruzada.

from sklearn.linear_model import Lasso
from sklearn.model_selection import GridSearchCV

lasso = Lasso(random_state=0, max_iter=10000)
alphas = np.logspace(-4, -0.5, 30)

tuned_parameters = [{"alpha": alphas}]
n_folds = 5

clf = GridSearchCV(lasso, tuned_parameters, cv=n_folds, refit=False)
clf.fit(X, y)

Graficar los errores

Ahora graficaremos los errores para ver el mejor valor de alfa. Graficaremos las puntuaciones promedio de prueba y los errores estándar de las puntuaciones.

scores = clf.cv_results_["mean_test_score"]
scores_std = clf.cv_results_["std_test_score"]

plt.figure().set_size_inches(8, 6)
plt.semilogx(alphas, scores)

std_error = scores_std / np.sqrt(n_folds)

plt.semilogx(alphas, scores + std_error, "b--")
plt.semilogx(alphas, scores - std_error, "b--")

plt.fill_between(alphas, scores + std_error, scores - std_error, alpha=0.2)

plt.ylabel("Puntuación CV +/- error estándar")
plt.xlabel("alfa")
plt.axhline(np.max(scores), linestyle="--", color=".5")
plt.xlim([alphas[0], alphas[-1]])

Usar LassoCV para comprobar la selección de alfa

Finalmente, usaremos LassoCV para ver cuánto podemos confiar en la selección de alfa. Usaremos KFold con 3 pliegues.

from sklearn.linear_model import LassoCV
from sklearn.model_selection import KFold

lasso_cv = LassoCV(alphas=alphas, random_state=0, max_iter=10000)
k_fold = KFold(3)

print("Respuesta a la pregunta extra:","¿hasta qué punto puedes confiar en la selección de alfa?")
print()
print("Parámetros de alfa que maximizan la puntuación de generalización en diferentes")
print("subconjuntos de los datos:")
for k, (train, test) in enumerate(k_fold.split(X, y)):
    lasso_cv.fit(X[train], y[train])
    print(
        "[pliegue {0}] alfa: {1:.5f}, puntuación: {2:.5f}".format(
            k, lasso_cv.alpha_, lasso_cv.score(X[test], y[test])
        )
    )

print()
print("Respuesta: No mucho, ya que obtuvimos diferentes valores de alfa para diferentes")
print("subconjuntos de los datos y, además, las puntuaciones para estos alfas difieren")
print("bastante sustancialmente.")

Resumen

En este laboratorio, aprendimos cómo usar la validación cruzada con modelos lineales. Usamos GridSearchCV para encontrar el mejor valor de alfa para la regresión Lasso y graficamos los errores para visualizar la selección. También usamos LassoCV para comprobar la selección de alfa.