Graficar Huber vs Ridge

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, compararemos el rendimiento de dos modelos de regresión, HuberRegressor y Ridge, en un conjunto de datos con valores atípicos fuertes. Generaremos un conjunto de datos de ejemplo, le agregaremos valores atípicos fuertes y luego ajustaremos ambos modelos al conjunto de datos. Visualizaremos los resultados y compararemos el rendimiento de los modelos.

Consejos sobre la VM

Una vez finalizada la inicialización de 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 las 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.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL sklearn(("Sklearn")) -.-> sklearn/UtilitiesandDatasetsGroup(["Utilities and Datasets"]) ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn(("Sklearn")) -.-> sklearn/CoreModelsandAlgorithmsGroup(["Core Models and Algorithms"]) sklearn/CoreModelsandAlgorithmsGroup -.-> sklearn/linear_model("Linear Models") sklearn/UtilitiesandDatasetsGroup -.-> sklearn/datasets("Datasets") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/linear_model -.-> lab-49160{{"Graficar Huber vs Ridge"}} sklearn/datasets -.-> lab-49160{{"Graficar Huber vs Ridge"}} ml/sklearn -.-> lab-49160{{"Graficar Huber vs Ridge"}} end

Importar las bibliotecas necesarias

Comenzaremos importando las bibliotecas necesarias, incluyendo numpy y matplotlib para la manipulación y visualización de datos, y HuberRegressor y Ridge de scikit-learn para la modelización de regresión.

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_regression
from sklearn.linear_model import HuberRegressor, Ridge

Generar datos de ejemplo

Ahora generaremos un conjunto de datos de ejemplo utilizando la función make_regression de scikit-learn. Generaremos un conjunto de datos con 20 muestras, una característica y una semilla aleatoria de 0. También agregaremos algo de ruido al conjunto de datos.

rng = np.random.RandomState(0)
X, y = make_regression(
    n_samples=20, n_features=1, random_state=0, noise=4.0, bias=100.0
)

Agregar valores atípicos fuertes al conjunto de datos

Agregaremos cuatro valores atípicos fuertes al conjunto de datos. Generaremos valores aleatorios para estos valores atípicos utilizando la distribución normal. Luego agregaremos estos valores atípicos al conjunto de datos.

X_outliers = rng.normal(0, 0.5, size=(4, 1))
y_outliers = rng.normal(0, 2.0, size=4)
X_outliers[:2, :] += X.max() + X.mean() / 4.0
X_outliers[2:, :] += X.min() - X.mean() / 4.0
y_outliers[:2] += y.min() - y.mean() / 4.0
y_outliers[2:] += y.max() + y.mean() / 4.0
X = np.vstack((X, X_outliers))
y = np.concatenate((y, y_outliers))

Visualizar el conjunto de datos

Ahora visualizaremos el conjunto de datos utilizando matplotlib. Graficaremos los valores de X en función de los valores de y.

plt.plot(X, y, "b.")
plt.title("Dataset with Strong Outliers")
plt.xlabel("X")
plt.ylabel("y")
plt.show()

Ajustar el regresor Huber

Ahora ajustaremos el HuberRegressor al conjunto de datos. Ajustaremos el modelo para una serie de valores de epsilon para mostrar cómo la función de decisión se aproxima a la de la regresión Ridge a medida que aumenta el valor de epsilon.

## Define the range of values for epsilon
epsilon_values = [1, 1.5, 1.75, 1.9]

## Define the x values for plotting
x = np.linspace(X.min(), X.max(), 7)

## Define the colors for plotting
colors = ["r-", "b-", "y-", "m-"]

## Fit the huber regressor over a series of epsilon values.
for k, epsilon in enumerate(epsilon_values):
    huber = HuberRegressor(alpha=0.0, epsilon=epsilon)
    huber.fit(X, y)
    coef_ = huber.coef_ * x + huber.intercept_
    plt.plot(x, coef_, colors[k], label="huber loss, %s" % epsilon)

## Add a legend to the plot
plt.legend(loc=0)

## Show the plot
plt.title("HuberRegressor with Different Epsilon Values")
plt.xlabel("X")
plt.ylabel("y")
plt.show()

Ajustar el regresor Ridge

Ahora ajustaremos el regresor Ridge al conjunto de datos y compararemos su rendimiento con el del HuberRegressor.

## Fit a ridge regressor to compare it to huber regressor.
ridge = Ridge(alpha=0.0, random_state=0)
ridge.fit(X, y)
coef_ridge = ridge.coef_
coef_ = ridge.coef_ * x + ridge.intercept_
plt.plot(x, coef_, "g-", label="ridge regression")

## Add a legend to the plot
plt.legend(loc=0)

## Show the plot
plt.title("Comparison of HuberRegressor vs Ridge")
plt.xlabel("X")
plt.ylabel("y")
plt.show()

Resumen

En este laboratorio, comparamos el rendimiento de dos modelos de regresión, HuberRegressor y Ridge, en un conjunto de datos con valores atípicos fuertes. Generamos un conjunto de datos de ejemplo, le agregamos valores atípicos fuertes y luego ajustamos ambos modelos al conjunto de datos. Visualizamos los resultados y comparamos el rendimiento de los modelos. Observamos que el HuberRegressor fue menos influenciado por los valores atípicos que el regresor Ridge, y que a medida que aumentaba el valor de epsilon, la función de decisión del HuberRegressor se aproximaba a la del regresor Ridge.