Règlement des égalités dans l'algorithme SVM

Machine LearningMachine LearningBeginner
Pratiquer maintenant

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

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Ce laboratoire présente le tri en cas d'égalité dans les SVM et son impact sur la frontière de décision. En SVM, le tri en cas d'égalité est le mécanisme utilisé pour résoudre les conflits entre deux ou plusieurs classes lorsque leurs distances sont égales. Il n'est pas activé par défaut lorsque decision_function_shape='ovr' car cela est coûteux. Par conséquent, ce laboratoire illustre l'effet du paramètre break_ties pour un problème de classification multiclasse avec decision_function_shape='ovr'.

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églerons rapidement le problème pour vous.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL sklearn(("Sklearn")) -.-> sklearn/UtilitiesandDatasetsGroup(["Utilities and Datasets"]) ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn(("Sklearn")) -.-> sklearn/CoreModelsandAlgorithmsGroup(["Core Models and Algorithms"]) sklearn/CoreModelsandAlgorithmsGroup -.-> sklearn/svm("Support Vector Machines") sklearn/UtilitiesandDatasetsGroup -.-> sklearn/datasets("Datasets") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/svm -.-> lab-49312{{"Règlement des égalités dans l'algorithme SVM"}} sklearn/datasets -.-> lab-49312{{"Règlement des égalités dans l'algorithme SVM"}} ml/sklearn -.-> lab-49312{{"Règlement des égalités dans l'algorithme SVM"}} end

Importation des bibliothèques requises

Dans cette étape, nous allons importer les bibliothèques requises pour les SVM et la visualisation.

import numpy as np
import matplotlib.pyplot as plt
from sklearn.svm import SVC
from sklearn.datasets import make_blobs

Création de données d'échantillonnage

Dans cette étape, nous allons créer un ensemble de données d'échantillonnage à l'aide de la fonction make_blobs de scikit-learn. Cet ensemble de données contient 3 classes et 2 caractéristiques.

X, y = make_blobs(random_state=27)

Création d'un modèle SVM avec et sans tri en cas d'égalité

Dans cette étape, nous allons créer deux modèles SVM - l'un avec le tri en cas d'égalité désactivé et l'autre avec le tri en cas d'égalité activé. Nous allons utiliser la classe SVC de scikit-learn pour créer ces modèles. Le paramètre break_ties est défini sur False et True pour les deux modèles, respectivement.

for break_ties, title, ax in zip((False, True), titles, sub.flatten()):
    svm = SVC(
        kernel="linear", C=1, break_ties=break_ties, decision_function_shape="ovr"
    ).fit(X, y)

Création de la frontière de décision

Dans cette étape, nous allons créer la frontière de décision pour les deux modèles. Nous utiliserons la fonction predict pour prédire les classes pour les points de données d'échantillonnage et tracer la frontière de décision.

    xs = np.linspace(xlim[0], xlim[1], 1000)
    ys = np.linspace(ylim[0], ylim[1], 1000)
    xx, yy = np.meshgrid(xs, ys)

    pred = svm.predict(np.c_[xx.ravel(), yy.ravel()])

    colors = [plt.cm.Accent(i) for i in [0, 4, 7]]

    points = ax.scatter(X[:, 0], X[:, 1], c=y, cmap="Accent")
    classes = [(0, 1), (0, 2), (1, 2)]
    line = np.linspace(X[:, 1].min() - 5, X[:, 1].max() + 5)
    ax.imshow(
        -pred.reshape(xx.shape),
        cmap="Accent",
        alpha=0.2,
        extent=(xlim[0], xlim[1], ylim[1], ylim[0]),
    )

Tracer la frontière de décision

Dans cette étape, nous allons tracer la frontière de décision créée dans l'étape précédente. Nous utiliserons les attributs coef_ et intercept_ du modèle SVM pour tracer la frontière de décision.

    for coef, intercept, col in zip(svm.coef_, svm.intercept_, classes):
        line2 = -(line * coef[1] + intercept) / coef[0]
        ax.plot(line2, line, "-", c=colors[col[0]])
        ax.plot(line2, line, "--", c=colors[col[1]])
    ax.set_xlim(xlim)
    ax.set_ylim(ylim)
    ax.set_title(title)
    ax.set_aspect("equal")

Afficher le graphique

Dans cette étape, nous allons afficher le graphique contenant la frontière de décision pour les deux modèles.

plt.show()

Sommaire

Ce laboratoire a illustré l'effet du tri en cas d'égalité dans l'algorithme SVM sur la frontière de décision. Nous avons créé deux modèles SVM - l'un avec le tri en cas d'égalité désactivé et l'autre avec le tri en cas d'égalité activé. Nous avons ensuite tracé la frontière de décision pour les deux modèles. La frontière de décision du modèle avec le tri en cas d'égalité activé était non convexe dans la zone où les classes étaient liées.