Graficar el hiperplano de separación con SGD

Beginner

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

Introducción

En este laboratorio, aprenderemos a usar Máquinas de Vectores de Soporte (SVM) con Descenso de Gradiente Estocástico (SGD) para clasificar datos. La SVM es un algoritmo de clasificación poderoso que se utiliza ampliamente en el aprendizaje automático para el análisis de clasificación y regresión. La idea detrás de la SVM es encontrar el mejor hiperplano que separa los datos en clases con el margen posiblemente más grande. El margen es la distancia entre el hiperplano y los puntos de datos más cercanos de cada clase. El Descenso de Gradiente Estocástico (SGD) es un algoritmo de optimización que se utiliza para encontrar los mejores parámetros para el algoritmo de SVM.

Consejos sobre la VM

Una vez que se haya iniciado 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 a que Jupyter Notebook termine de cargarse. La validación de 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.

Importar las bibliotecas necesarias y generar datos

Primero, necesitamos importar las bibliotecas necesarias y generar un conjunto de datos adecuado para la clasificación. En este ejemplo, generaremos 50 puntos separables utilizando la función make_blobs de Scikit-learn.

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import SGDClassifier
from sklearn.datasets import make_blobs

## creamos 50 puntos separables
X, Y = make_blobs(n_samples=50, centers=2, random_state=0, cluster_std=0.60)

Entrenar el modelo de SVM con SGD

A continuación, necesitamos entrenar el modelo de SVM utilizando SGD. Utilizaremos la clase SGDClassifier de Scikit-learn para entrenar el modelo. Estableceremos el parámetro loss en "hinge" para utilizar el algoritmo de SVM y el parámetro alpha en 0.01 para controlar la fuerza de regularización. También estableceremos el parámetro max_iter en 200 para limitar el número de iteraciones.

## ajustar el modelo
clf = SGDClassifier(loss="hinge", alpha=0.01, max_iter=200)
clf.fit(X, Y)

Graficar el hiperplano de separación con el margen máximo

Finalmente, podemos graficar el hiperplano de separación con el margen máximo que obtuvimos utilizando el algoritmo de SVM con SGD. Crearemos una malla de puntos utilizando np.meshgrid y luego computaremos la función de decisión para cada punto de la malla utilizando el método decision_function del modelo de SVM. Luego graficaremos el límite de decisión utilizando plt.contour y los puntos de datos utilizando plt.scatter.

## graficar la línea, los puntos y los vectores más cercanos al plano
xx = np.linspace(-1, 5, 10)
yy = np.linspace(-1, 5, 10)

X1, X2 = np.meshgrid(xx, yy)
Z = np.empty(X1.shape)
for (i, j), val in np.ndenumerate(X1):
    x1 = val
    x2 = X2[i, j]
    p = clf.decision_function([[x1, x2]])
    Z[i, j] = p[0]
levels = [-1.0, 0.0, 1.0]
linestyles = ["dashed", "solid", "dashed"]
colors = "k"
plt.contour(X1, X2, Z, levels, colors=colors, linestyles=linestyles)
plt.scatter(X[:, 0], X[:, 1], c=Y, cmap=plt.cm.Paired, edgecolor="black", s=20)

plt.axis("tight")
plt.show()

Resumen

En este laboratorio, aprendimos a usar Máquinas de Vectores de Soporte (SVM) con Descenso de Gradiente Estocástico (SGD) para clasificar datos. Generamos un conjunto de datos adecuado para la clasificación, entrenamos el modelo de SVM utilizando SGD y graficamos el hiperplano de separación con el margen máximo. La SVM es un algoritmo de clasificación poderoso que se utiliza ampliamente en el aprendizaje automático para el análisis de clasificación y regresión. La idea detrás de la SVM es encontrar el mejor hiperplano que separa los datos en clases con el margen posiblemente más grande. El Descenso de Gradiente Estocástico (SGD) es un algoritmo de optimización que se utiliza para encontrar los mejores parámetros para el algoritmo de SVM.