Estimación de modelo lineal robusto

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


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills ml/sklearn -.-> lab-49257{{"Estimación de modelo lineal robusto"}} end

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.