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.
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.