Regresión de Vectores de Soporte

Beginner

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

Introducción

En este laboratorio, usaremos el Regresor de Vectores de Soporte (Support Vector Regression - SVR) para ajustar un modelo a un conjunto de datos unidimensionales usando núcleos lineales, polinomiales y de Función Básica Radial (Radial Basis Function - RBF). Usaremos la biblioteca scikit-learn de Python para realizar el SVR.

Consejos sobre la VM

Una vez que se haya completado 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 para 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.

Generar datos de muestra

Primero, generamos un conjunto de datos de muestra compuesto por 40 valores aleatorios entre 0 y 5. Luego, calculamos la función seno de cada valor y agregamos ruido a cada quinto valor.

import numpy as np

## Generate sample data
X = np.sort(5 * np.random.rand(40, 1), axis=0)
y = np.sin(X).ravel()

## add noise to targets
y[::5] += 3 * (0.5 - np.random.rand(8))

Ajustar el modelo de regresión

A continuación, ajustamos un modelo de SVR a nuestro conjunto de datos de muestra usando un kernel lineal, polinomial y RBF. Establecemos los hiperparámetros para cada modelo y los entrenamos en nuestro conjunto de datos de muestra.

from sklearn.svm import SVR

## Fit regression model
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 los resultados

Finalmente, visualizamos los resultados de nuestros modelos de SVR graficándolos contra el conjunto de datos de muestra. También graficamos los vectores de soporte y otros datos de entrenamiento.

import matplotlib.pyplot as plt

## Look at the results
lw = 2

kernel_label = ["RBF", "Linear", "Polynomial"]
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="{} model".format(kernel_label[ix]),
    )
    axes[ix].scatter(
        X[svr.support_],
        y[svr.support_],
        facecolor="none",
        edgecolor=model_color[ix],
        s=50,
        label="{} support vectors".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="other training data",
    )
    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, "data", ha="center", va="center")
fig.text(0.06, 0.5, "target", ha="center", va="center", rotation="vertical")
fig.suptitle("Support Vector Regression", fontsize=14)
plt.show()

Resumen

En este laboratorio, aprendimos cómo usar el Regresor de Vectores de Soporte (Support Vector Regression - SVR) para ajustar un modelo a un conjunto de datos unidimensionales usando núcleos lineales, polinomiales y RBF. Generamos datos de muestra, ajustamos modelos de regresión usando scikit-learn y visualizamos los resultados.