Regressão Isotónica Não Paramétrica com Scikit-Learn

Beginner

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

Introdução

Neste tutorial, aprenderemos sobre regressão isotónica, uma técnica de regressão não paramétrica que encontra uma aproximação não decrescente de uma função, minimizando o erro quadrático médio nos dados de treino. Usaremos a biblioteca de aprendizado de máquina popular scikit-learn, em Python, para implementar a regressão isotónica e compará-la com a regressão linear.

Dicas da Máquina Virtual

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

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 o problema rapidamente para si.

Importação de Bibliotecas Necessárias

Começaremos importando as bibliotecas necessárias para este tutorial: NumPy, Matplotlib e scikit-learn.

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.collections import LineCollection

from sklearn.linear_model import LinearRegression
from sklearn.isotonic import IsotonicRegression
from sklearn.utils import check_random_state

Gerar Dados

Em seguida, geraremos alguns dados para usar em nossa regressão. Criaremos uma tendência monotónica não linear com ruído uniforme homocedástico.

n = 100
x = np.arange(n)
rs = check_random_state(0)
y = rs.randint(-50, 50, size=(n,)) + 50.0 * np.log1p(np.arange(n))

Ajustar Modelos de Regressão Isotónica e Linear

Agora, ajustaremos os modelos de regressão isotónica e linear aos dados gerados.

ir = IsotonicRegression(out_of_bounds="clip")
y_ = ir.fit_transform(x, y)

lr = LinearRegression()
lr.fit(x[:, np.newaxis], y)  ## x precisa ser 2D para LinearRegression

Plotar Resultados

Finalmente, plotaremos os resultados dos dois modelos de regressão para visualizar o quão bem eles ajustam os dados.

segments = [[[i, y[i]], [i, y_[i]]] for i in range(n)]
lc = LineCollection(segments, zorder=0)
lc.set_array(np.ones(len(y)))
lc.set_linewidths(np.full(n, 0.5))

fig, (ax0, ax1) = plt.subplots(ncols=2, figsize=(12, 6))

ax0.plot(x, y, "C0.", markersize=12)
ax0.plot(x, y_, "C1.-", markersize=12)
ax0.plot(x, lr.predict(x[:, np.newaxis]), "C2-")
ax0.add_collection(lc)
ax0.legend(("Dados de treino", "Ajuste isotónico", "Ajuste linear"), loc="lower right")
ax0.set_title("Ajuste de regressão isotónica em dados ruidosos (n=%d)" % n)

x_test = np.linspace(-10, 110, 1000)
ax1.plot(x_test, ir.predict(x_test), "C1-")
ax1.plot(ir.X_thresholds_, ir.y_thresholds_, "C1.", markersize=12)
ax1.set_title("Função de previsão (%d limiares)" % len(ir.X_thresholds_))

plt.show()

Resumo

Neste tutorial, aprendemos sobre a regressão isotónica, uma técnica de regressão não paramétrica que encontra uma aproximação não decrescente de uma função, minimizando o erro quadrático médio nos dados de treino. Também implementamos a regressão isotónica usando o scikit-learn e comparámo-la com a regressão linear.