Regressão Vetorial de Suporte

Beginner

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

Introdução

Neste laboratório, utilizaremos a Regressão Vetorial de Suporte (SVR) para ajustar um modelo a um conjunto de dados unidimensional utilizando núcleos lineares, polinomiais e de Função de Base Radial (RBF). Usaremos a biblioteca scikit-learn do Python para realizar a SVR.

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 o carregamento. 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.

Gerar Dados de Amostra

Primeiro, geramos um conjunto de dados de amostra composto por 40 valores aleatórios entre 0 e 5. Em seguida, calculamos a função seno de cada valor e adicionamos algum ruído a cada 5º valor.

import numpy as np

## Gerar dados de amostra
X = np.sort(5 * np.random.rand(40, 1), axis=0)
y = np.sin(X).ravel()

## adicionar ruído aos alvos
y[::5] += 3 * (0.5 - np.random.rand(8))

Ajustar o Modelo de Regressão

Em seguida, ajustamos um modelo SVR ao nosso conjunto de dados de amostra usando um kernel linear, polinomial e RBF. Definimos os hiperparâmetros para cada modelo e os treinamos no nosso conjunto de dados de amostra.

from sklearn.svm import SVR

## Ajustar o modelo de regressão
svr_rbf = SVR(kernel="rbf", C=100, gamma=0.1, epsilon=0.1)
svr_lin = SVR(kernel="linear", C=100, gamma="auto")
svr_poly = SVR(kernel="poly", C=100, gamma="auto", degree=3, epsilon=0.1, coef0=1)

svrs = [svr_rbf, svr_lin, svr_poly]

for svr in svrs:
    svr.fit(X, y)

Visualizar Resultados

Finalmente, visualizamos os resultados dos nossos modelos SVR traçando-os contra o conjunto de dados de amostra. Também representamos os vetores de suporte e outros dados de treino.

import matplotlib.pyplot as plt

## Examinar os resultados
lw = 2

kernel_label = ["RBF", "Linear", "Polinomial"]
model_color = ["m", "c", "g"]

fig, axes = plt.subplots(nrows=1, ncols=3, figsize=(15, 10), sharey=True)

for ix, svr in enumerate(svrs):
    axes[ix].plot(
        X,
        svr.predict(X),
        color=model_color[ix],
        lw=lw,
        label="Modelo {}".format(kernel_label[ix]),
    )
    axes[ix].scatter(
        X[svr.support_],
        y[svr.support_],
        facecolor="none",
        edgecolor=model_color[ix],
        s=50,
        label="Vetores de suporte {}".format(kernel_label[ix]),
    )
    axes[ix].scatter(
        X[np.setdiff1d(np.arange(len(X)), svr.support_)],
        y[np.setdiff1d(np.arange(len(X)), svr.support_)],
        facecolor="none",
        edgecolor="k",
        s=50,
        label="Outros dados de treino",
    )
    axes[ix].legend(
        loc="upper center",
        bbox_to_anchor=(0.5, 1.1),
        ncol=1,
        fancybox=True,
        shadow=True,
    )

fig.text(0.5, 0.04, "dados", ha="center", va="center")
fig.text(0.06, 0.5, "alvo", ha="center", va="center", rotation="vertical")
fig.suptitle("Regressão Vetorial de Suporte", fontsize=14)
plt.show()

Resumo

Neste laboratório, aprendemos a utilizar a Regressão Vetorial de Suporte (SVR) para ajustar um modelo a um conjunto de dados unidimensional utilizando kernels lineares, polinomiais e RBF. Gerámos dados de amostra, ajustámos modelos de regressão utilizando a biblioteca scikit-learn e visualizámos os resultados.