Clasificador SGD de múltiples clases de Scikit-Learn

Beginner

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

Introducción

En este laboratorio, usaremos SGDClassifier de Scikit-Learn para implementar un modelo de clasificación multi-clase en el famoso conjunto de datos iris. Graficaremos la superficie de decisión del modelo en el conjunto de datos y visualizaremos los hiperplanos correspondientes a los tres clasificadores one-versus-all (OVA).

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

Cargar y preparar los datos

Comenzamos importando las bibliotecas necesarias y cargando el conjunto de datos iris. Luego barajaremos los datos y los estandarizaremos para usarlos en el entrenamiento.

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

## cargar el conjunto de datos iris
iris = datasets.load_iris()

## tomar las primeras dos características
X = iris.data[:, :2]
y = iris.target
colors = "bry"

## barajar los datos
idx = np.arange(X.shape[0])
np.random.seed(13)
np.random.shuffle(idx)
X = X[idx]
y = y[idx]

## estandarizar los datos
mean = X.mean(axis=0)
std = X.std(axis=0)
X = (X - mean) / std

Entrenar el modelo

Ahora entrenaremos el modelo SGDClassifier en el conjunto de datos iris con la ayuda del método fit(). Este método toma los datos de entrada y los valores objetivo como entrada y entrena el modelo con los datos dados.

clf = SGDClassifier(alpha=0.001, max_iter=100).fit(X, y)

Visualizar la superficie de decisión

Ahora graficaremos la superficie de decisión del modelo entrenado en el conjunto de datos iris. Usaremos la clase DecisionBoundaryDisplay para visualizar el límite de decisión del modelo.

from sklearn.inspection import DecisionBoundaryDisplay

ax = plt.gca()
DecisionBoundaryDisplay.from_estimator(
    clf,
    X,
    cmap=plt.cm.Paired,
    ax=ax,
    response_method="predict",
    xlabel=iris.feature_names[0],
    ylabel=iris.feature_names[1],
)
plt.axis("tight")

Graficar los puntos de entrenamiento

Ahora graficaremos los puntos de entrenamiento en la superficie de decisión. Usaremos el método scatter() para graficar los puntos de entrenamiento con diferentes colores para diferentes valores objetivo.

for i, color in zip(clf.classes_, colors):
    idx = np.where(y == i)
    plt.scatter(
        X[idx, 0],
        X[idx, 1],
        c=color,
        label=iris.target_names[i],
        cmap=plt.cm.Paired,
        edgecolor="black",
        s=20,
    )
plt.title("Decision surface of multi-class SGD")
plt.axis("tight")

Graficar clasificadores One-Against-All

Ahora graficaremos los tres clasificadores one-versus-all (OVA) en la superficie de decisión. Usaremos los atributos coef* e intercept* del modelo entrenado para graficar los hiperplanos correspondientes a los clasificadores OVA.

xmin, xmax = plt.xlim()
ymin, ymax = plt.ylim()
coef = clf.coef_
intercept = clf.intercept_


def plot_hyperplane(c, color):
    def line(x0):
        return (-(x0 * coef[c, 0]) - intercept[c]) / coef[c, 1]

    plt.plot([xmin, xmax], [line(xmin), line(xmax)], ls="--", color=color)


for i, color in zip(clf.classes_, colors):
    plot_hyperplane(i, color)
plt.legend()
plt.show()

Resumen

En este laboratorio, aprendimos cómo usar SGDClassifier de Scikit-Learn para implementar un modelo de clasificación multi-clase en el conjunto de datos iris. Visualizamos la superficie de decisión del modelo entrenado en el conjunto de datos y graficamos los hiperplanos correspondientes a los tres clasificadores one-versus-all (OVA).