Estimación de modelo lineal robusto

Beginner

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

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.