Introducción
En este laboratorio, demostraremos cómo ajustar robustamente un modelo lineal a datos defectuosos utilizando el algoritmo RANSAC en scikit-learn. El regresor lineal ordinario es sensible a los valores atípicos, y la línea ajustada puede desviarse fácilmente de la verdadera relación subyacente de los datos. El regresor RANSAC automaticamente divide los datos en valores internos y valores atípicos, y la línea ajustada se determina solo por los valores internos identificados. Utilizaremos el conjunto de datos make_regression de scikit-learn para generar datos aleatorios con valores atípicos, y luego ajustaremos tanto un modelo lineal como un regresor RANSAC a los datos.
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 bibliotecas y generar datos
Importaremos las bibliotecas necesarias, generaremos datos aleatorios utilizando el conjunto de datos make_regression y agregaremos valores atípicos a los datos.
import numpy as np
from matplotlib import pyplot as plt
from sklearn import linear_model, datasets
## Generar datos
n_samples = 1000
n_outliers = 50
X, y, coef = datasets.make_regression(
n_samples=n_samples,
n_features=1,
n_informative=1,
noise=10,
coef=True,
random_state=0,
)
## Agregar datos con valores atípicos
np.random.seed(0)
X[:n_outliers] = 3 + 0.5 * np.random.normal(size=(n_outliers, 1))
y[:n_outliers] = -3 + 10 * np.random.normal(size=n_outliers)
Ajustar un modelo lineal
Ajustaremos un modelo lineal a los datos utilizando la clase LinearRegression de scikit-learn.
## Ajustar la línea utilizando todos los datos
lr = linear_model.LinearRegression()
lr.fit(X, y)
Ajustar un regresor RANSAC
Ajustaremos un regresor RANSAC a los datos utilizando la clase RANSACRegressor de scikit-learn.
## Ajustar robustamente el modelo lineal con el algoritmo RANSAC
ransac = linear_model.RANSACRegressor()
ransac.fit(X, y)
inlier_mask = ransac.inlier_mask_
outlier_mask = np.logical_not(inlier_mask)
Predecir datos de los modelos estimados
Predeciremos los datos del modelo lineal y del regresor RANSAC y compararemos sus resultados.
## Predecir datos de los modelos estimados
line_X = np.arange(X.min(), X.max())[:, np.newaxis]
line_y = lr.predict(line_X)
line_y_ransac = ransac.predict(line_X)
Comparar coeficientes estimados
Compararemos los coeficientes estimados del modelo real, del modelo lineal y del regresor RANSAC.
## Compare estimated coefficients
print("Estimated coefficients (true, linear regression, RANSAC):")
print(coef, lr.coef_, ransac.estimator_.coef_)
Visualizar los resultados
Graficaremos los datos y las líneas ajustadas del modelo lineal y del regresor RANSAC.
## Visualize the results
lw = 2
plt.scatter(
X[inlier_mask], y[inlier_mask], color="yellowgreen", marker=".", label="Inliers"
)
plt.scatter(
X[outlier_mask], y[outlier_mask], color="gold", marker=".", label="Outliers"
)
plt.plot(line_X, line_y, color="navy", linewidth=lw, label="Linear regressor")
plt.plot(
line_X,
line_y_ransac,
color="cornflowerblue",
linewidth=lw,
label="RANSAC regressor",
)
plt.legend(loc="lower right")
plt.xlabel("Input")
plt.ylabel("Response")
plt.show()
Resumen
En este laboratorio, demostramos cómo ajustar robustamente un modelo lineal a datos defectuosos utilizando el algoritmo RANSAC en scikit-learn. Generamos datos aleatorios utilizando el conjunto de datos make_regression, agregamos valores atípicos a los datos, ajustamos tanto un modelo lineal como un regresor RANSAC a los datos, predecimos los datos de los dos modelos, comparamos sus coeficientes estimados y visualizamos los resultados. El regresor RANSAC automaticamente divide los datos en valores atípicos y valores no atípicos, y la línea ajustada se determina solo por los valores no atípicos identificados, lo que lo convierte en un método más robusto para ajustar modelos a datos con valores atípicos.