Modelo de regresión Elastic-Net de Scikit-Learn

Machine LearningMachine LearningBeginner
Practicar Ahora

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

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, usaremos el modelo de regresión Elastic-Net de Scikit-learn para ilustrar cómo el rendimiento de un estimador en datos no vistos (datos de prueba) no es el mismo que el rendimiento en datos de entrenamiento. Generaremos datos de muestra, calcularemos los errores de entrenamiento y prueba y graficaremos las funciones de resultados.

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.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn(("Sklearn")) -.-> sklearn/ModelSelectionandEvaluationGroup(["Model Selection and Evaluation"]) sklearn(("Sklearn")) -.-> sklearn/UtilitiesandDatasetsGroup(["Utilities and Datasets"]) sklearn/ModelSelectionandEvaluationGroup -.-> sklearn/model_selection("Model Selection") sklearn/UtilitiesandDatasetsGroup -.-> sklearn/datasets("Datasets") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/model_selection -.-> lab-49320{{"Modelo de regresión Elastic-Net de Scikit-Learn"}} sklearn/datasets -.-> lab-49320{{"Modelo de regresión Elastic-Net de Scikit-Learn"}} ml/sklearn -.-> lab-49320{{"Modelo de regresión Elastic-Net de Scikit-Learn"}} end

Generar datos de muestra

Generaremos datos de muestra usando la función make_regression() de Scikit-learn. Estableceremos el número de muestras de entrenamiento en 75, el número de muestras de prueba en 150 y el número de características en 500. También estableceremos n_informative en 50 y shuffle en False.

import numpy as np
from sklearn import linear_model
from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split

n_samples_train, n_samples_test, n_features = 75, 150, 500
X, y, coef = make_regression(
    n_samples=n_samples_train + n_samples_test,
    n_features=n_features,
    n_informative=50,
    shuffle=False,
    noise=1.0,
    coef=True,
)
X_train, X_test, y_train, y_test = train_test_split(
    X, y, train_size=n_samples_train, test_size=n_samples_test, shuffle=False
)

Calcular los errores de entrenamiento y prueba

Calcularemos los errores de entrenamiento y prueba usando el modelo de regresión Elastic-Net de Scikit-learn. Estableceremos el parámetro de regularización alpha en un rango de valores de 10^-5 a 10^1 usando np.logspace(). También estableceremos l1_ratio en 0.7 y max_iter en 10000.

alphas = np.logspace(-5, 1, 60)
enet = linear_model.ElasticNet(l1_ratio=0.7, max_iter=10000)
train_errors = list()
test_errors = list()
for alpha in alphas:
    enet.set_params(alpha=alpha)
    enet.fit(X_train, y_train)
    train_errors.append(enet.score(X_train, y_train))
    test_errors.append(enet.score(X_test, y_test))

i_alpha_optim = np.argmax(test_errors)
alpha_optim = alphas[i_alpha_optim]
print("Optimal regularization parameter : %s" % alpha_optim)

Graficar las funciones de resultados

Graficaremos las funciones de resultados usando la librería matplotlib. Usaremos la función plt.subplot() para crear dos subgráficos. En el primer subgráfico, graficaremos los errores de entrenamiento y prueba en función del parámetro de regularización. También graficaremos una línea vertical en el parámetro de regularización óptimo. En el segundo subgráfico, graficaremos los coeficientes reales y los coeficientes estimados.

import matplotlib.pyplot as plt

plt.subplot(2, 1, 1)
plt.semilogx(alphas, train_errors, label="Train")
plt.semilogx(alphas, test_errors, label="Test")
plt.vlines(
    alpha_optim,
    plt.ylim()[0],
    np.max(test_errors),
    color="k",
    linewidth=3,
    label="Optimum on test",
)
plt.legend(loc="lower right")
plt.ylim([0, 1.2])
plt.xlabel("Regularization parameter")
plt.ylabel("Performance")

## Show estimated coef_ vs true coef
plt.subplot(2, 1, 2)
plt.plot(coef, label="True coef")
plt.plot(coef_, label="Estimated coef")
plt.legend()
plt.subplots_adjust(0.09, 0.04, 0.94, 0.94, 0.26, 0.26)
plt.show()

Resumen

En este laboratorio, aprendimos cómo usar el modelo de regresión Elastic-Net de Scikit-learn para calcular los errores de entrenamiento y prueba y graficar las funciones de resultados. También aprendimos cómo el rendimiento de un estimador en datos no vistos (datos de prueba) no es el mismo que el rendimiento en datos de entrenamiento. Generamos datos de muestra, calculamos los errores de entrenamiento y prueba y graficamos las funciones de resultados usando las funciones make_regression(), linear_model.ElasticNet(), train_test_split(), np.logspace() y matplotlib.