Gráfico Huber vs Ridge

Beginner

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

Introdução

Neste laboratório, compararemos o desempenho de dois modelos de regressão, HuberRegressor e Ridge, num conjunto de dados com outliers fortes. Geraremos um conjunto de dados de brinquedo, adicionaremos outliers fortes a ele e, em seguida, ajustaremos ambos os modelos ao conjunto de dados. Visualizaremos os resultados e compararemos o desempenho dos modelos.

Dicas da Máquina Virtual

Após o arranque da VM, 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 a aprendizagem, não hesite em contactar o Labby. Forneça feedback após a sessão e resolveremos prontamente o problema para si.

Importação de Bibliotecas Necessárias

Começaremos importando as bibliotecas necessárias, incluindo numpy e matplotlib para manipulação e visualização de dados, e HuberRegressor e Ridge do scikit-learn para modelagem de regressão.

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_regression
from sklearn.linear_model import HuberRegressor, Ridge

Gerar Dados de Brinquedo

Agora, geraremos um conjunto de dados de brinquedo usando a função make_regression do scikit-learn. Geraremos um conjunto de dados com 20 amostras, uma característica e uma semente aleatória de 0. Também adicionaremos algum ruído ao conjunto de dados.

rng = np.random.RandomState(0)
X, y = make_regression(
    n_samples=20, n_features=1, random_state=0, noise=4.0, bias=100.0
)

Adicionar Valores Discrepantes Fortes ao Conjunto de Dados

Vamos adicionar quatro valores discrepantes fortes ao conjunto de dados. Geraremos valores aleatórios para esses valores discrepantes usando a distribuição normal. Em seguida, adicionaremos esses valores discrepantes ao conjunto de dados.

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 o Conjunto de Dados

Agora, visualizaremos o conjunto de dados usando matplotlib. Plotaremos os valores de X contra os valores de y.

plt.plot(X, y, "b.")
plt.title("Conjunto de Dados com Valores Discrepantes Fortes")
plt.xlabel("X")
plt.ylabel("y")
plt.show()

Ajustar o Regressor Huber

Agora, ajustaremos o HuberRegressor ao conjunto de dados. Ajustaremos o modelo em uma gama de valores de epsilon para mostrar como a função de decisão se aproxima da regressão Ridge à medida que o valor de epsilon aumenta.

## Defina a faixa de valores para epsilon
epsilon_values = [1, 1.5, 1.75, 1.9]

## Defina os valores de x para plotagem
x = np.linspace(X.min(), X.max(), 7)

## Defina as cores para plotagem
colors = ["r-", "b-", "y-", "m-"]

## Ajuste o regressor huber em uma série de valores de epsilon.
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="perda huber, %s" % epsilon)

## Adicione uma legenda ao gráfico
plt.legend(loc=0)

## Exiba o gráfico
plt.title("HuberRegressor com Diferentes Valores de Epsilon")
plt.xlabel("X")
plt.ylabel("y")
plt.show()

Ajustar o Regressor Ridge

Agora, ajustaremos o regressor Ridge ao conjunto de dados e compararemos seu desempenho com o do HuberRegressor.

## Ajustar um regressor ridge para compará-lo ao regressor huber.
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="regressão ridge")

## Adicionar uma legenda ao gráfico
plt.legend(loc=0)

## Mostrar o gráfico
plt.title("Comparação de HuberRegressor vs Ridge")
plt.xlabel("X")
plt.ylabel("y")
plt.show()

Resumo

Neste laboratório, comparamos o desempenho de dois modelos de regressão, HuberRegressor e Ridge, em um conjunto de dados com outliers fortes. Geramos um conjunto de dados de brinquedo, adicionamos outliers fortes a ele e, em seguida, ajustamos ambos os modelos ao conjunto de dados. Visualizamos os resultados e comparamos o desempenho dos modelos. Observamos que o HuberRegressor foi menos influenciado pelos outliers do que o regressor Ridge e que, à medida que o valor de epsilon aumentava, a função de decisão do HuberRegressor se aproximava da do regressor Ridge.