Classifieur multi-classe SGD de Scikit-Learn

Beginner

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

Introduction

Dans ce laboratoire, nous utiliserons SGDClassifier de Scikit-Learn pour implémenter un modèle de classification multi-classe sur le célèbre ensemble de données iris. Nous tracerons la surface de décision du modèle sur l'ensemble de données et visualiserons les hyperplans correspondant aux trois classifieurs one-versus-all (OVA).

Conseils sur la machine virtuelle

Une fois le démarrage de la machine virtuelle terminé, cliquez dans le coin supérieur gauche pour basculer vers l'onglet Notebook pour accéder à Jupyter Notebook pour la pratique.

Parfois, vous devrez peut-être attendre quelques secondes pour que Jupyter Notebook ait fini de charger. La validation des opérations ne peut pas être automatisée en raison des limitations de Jupyter Notebook.

Si vous rencontrez des problèmes pendant l'apprentissage, n'hésitez pas à demander à Labby. Donnez votre feedback après la session, et nous résoudrons rapidement le problème pour vous.

Charger et préparer les données

Nous commençons par importer les bibliothèques nécessaires et charger l'ensemble de données iris. Nous allons ensuite mélanger les données et les standardiser pour les utiliser dans l'entraînement.

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

## charger l'ensemble de données iris
iris = datasets.load_iris()

## prendre les deux premières caractéristiques
X = iris.data[:, :2]
y = iris.target
couleurs = "bry"

## mélanger les données
idx = np.arange(X.shape[0])
np.random.seed(13)
np.random.shuffle(idx)
X = X[idx]
y = y[idx]

## standardiser les données
moyenne = X.mean(axis=0)
écart_type = X.std(axis=0)
X = (X - moyenne) / écart_type

Entraîner le modèle

Nous allons maintenant entraîner le modèle SGDClassifier sur l'ensemble de données iris à l'aide de la méthode fit(). Cette méthode prend les données d'entrée et les valeurs cibles en entrée et entraîne le modèle sur les données données.

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

Visualiser la surface de décision

Nous allons maintenant tracer la surface de décision du modèle entraîné sur l'ensemble de données iris. Nous utiliserons la classe DecisionBoundaryDisplay pour visualiser la frontière de décision du modèle.

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

Tracer les points d'entraînement

Nous allons maintenant tracer les points d'entraînement sur la surface de décision. Nous utiliserons la méthode scatter() pour tracer les points d'entraînement avec des couleurs différentes pour les différentes valeurs cibles.

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

Tracer les classifieurs un-versus-tous

Nous allons maintenant tracer les trois classifieurs un-versus-tous (OVA) sur la surface de décision. Nous utiliserons les attributs coef* et intercept* du modèle entraîné pour tracer les hyperplans correspondant aux classifieurs 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()

Sommaire

Dans ce laboratoire, nous avons appris à utiliser SGDClassifier de Scikit-Learn pour implémenter un modèle de classification multi-classe sur l'ensemble de données iris. Nous avons visualisé la surface de décision du modèle entraîné sur l'ensemble de données et tracé les hyperplans correspondant aux trois classifieurs un-versus-tous (OVA).