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