Estimação Robusta de Modelos Lineares

Beginner

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

Introdução

Neste laboratório, demonstraremos como ajustar robustamente um modelo linear a dados com falhas utilizando o algoritmo RANSAC no scikit-learn. O regressor linear ordinário é sensível a valores discrepantes, e a linha ajustada pode facilmente ser desviada da verdadeira relação subjacente dos dados. O regressor RANSAC automaticamente divide os dados em inliers e outliers, e a linha ajustada é determinada apenas pelos inliers identificados. Usaremos o conjunto de dados make_regression do scikit-learn para gerar dados aleatórios com valores discrepantes e, em seguida, ajustaremos tanto um modelo linear quanto um regressor RANSAC aos dados.

Dicas da Máquina Virtual

Após o arranque da máquina virtual, clique no canto superior esquerdo para mudar para a aba Notebook para aceder ao Jupyter Notebook para a prática.

Por vezes, pode ser necessário esperar alguns segundos para o Jupyter Notebook terminar de carregar. A validação das operações não pode ser automatizada devido a limitações no Jupyter Notebook.

Se tiver problemas durante o aprendizado, não hesite em contactar o Labby. Forneça feedback após a sessão e resolveremos prontamente o problema para si.

Importar bibliotecas e gerar dados

Importaremos as bibliotecas necessárias, geraremos dados aleatórios usando o conjunto de dados make_regression e adicionaremos valores discrepantes aos dados.

import numpy as np
from matplotlib import pyplot as plt
from sklearn import linear_model, datasets

## Gerar dados
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,
)

## Adicionar dados de valores discrepantes
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 um modelo linear

Ajustaremos um modelo linear aos dados utilizando a classe LinearRegression do scikit-learn.

## Ajustar a linha usando todos os dados
lr = linear_model.LinearRegression()
lr.fit(X, y)

Ajustar um regressor RANSAC

Ajustaremos um regressor RANSAC aos dados utilizando a classe RANSACRegressor do scikit-learn.

## Ajustar robustamente o modelo linear com o algoritmo RANSAC
ransac = linear_model.RANSACRegressor()
ransac.fit(X, y)
inlier_mask = ransac.inlier_mask_
outlier_mask = np.logical_not(inlier_mask)

Prever dados de modelos estimados

Preveremos os dados do modelo linear e do regressor RANSAC e compararemos os seus resultados.

## Prever dados dos 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

Vamos comparar os coeficientes estimados do modelo verdadeiro, do modelo linear e do regressor RANSAC.

## Comparar coeficientes estimados
print("Coeficientes estimados (verdadeiro, regressão linear, RANSAC):")
print(coef, lr.coef_, ransac.estimator_.coef_)

Visualizar os resultados

Vamos plotar os dados e as linhas ajustadas do modelo linear e do regressor RANSAC.

## Visualizar os resultados
lw = 2
plt.scatter(
    X[inlier_mask], y[inlier_mask], color="yellowgreen", marker=".", label="Valores interiores"
)
plt.scatter(
    X[outlier_mask], y[outlier_mask], color="gold", marker=".", label="Valores exteriores"
)
plt.plot(line_X, line_y, color="navy", linewidth=lw, label="Regressão linear")
plt.plot(
    line_X,
    line_y_ransac,
    color="cornflowerblue",
    linewidth=lw,
    label="Regressor RANSAC",
)
plt.legend(loc="lower right")
plt.xlabel("Entrada")
plt.ylabel("Resposta")
plt.show()

Resumo

Neste laboratório, demonstramos como ajustar robustamente um modelo linear a dados com erros utilizando o algoritmo RANSAC no scikit-learn. Gerámos dados aleatórios usando o conjunto de dados make_regression, adicionámos valores discrepantes aos dados, ajustámos um modelo linear e um regressor RANSAC aos dados, previmos os dados dos dois modelos, comparámos os seus coeficientes estimados e visualizámos os resultados. O regressor RANSAC divide automaticamente os dados em valores interiores e exteriores, e a linha ajustada é determinada apenas pelos valores interiores identificados, tornando-o um método mais robusto para ajustar modelos a dados com valores discrepantes.