Classification de données avec le noyau SVM

Beginner

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

Introduction

Ce laboratoire fournit un guide étape par étape sur la manière d'utiliser les noyaux SVM pour classifier des points de données. Les noyaux SVM sont particulièrement utiles lorsque les points de données ne sont pas linéairement séparables. Nous utiliserons scikit-learn en Python pour effectuer cette tâche.

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 Carnet de notes pour accéder au carnet Jupyter pour la pratique.

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

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

Importation des bibliothèques

Dans cette étape, nous allons importer les bibliothèques nécessaires pour effectuer la tâche de classification.

import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm

Création d'un ensemble de données et de cibles

Dans cette étape, nous allons créer un ensemble de données et des cibles pour notre tâche de classification. Nous utiliserons la bibliothèque numpy pour créer l'ensemble de données et les cibles.

X = np.c_[
    (0.4, -0.7),
    (-1.5, -1),
    (-1.4, -0.9),
    (-1.3, -1.2),
    (-1.1, -0.2),
    (-1.2, -0.4),
    (-0.5, 1.2),
    (-1.5, 2.1),
    (1, 1),
    ## --
    (1.3, 0.8),
    (1.2, 0.5),
    (0.2, -2),
    (0.5, -2.4),
    (0.2, -2.3),
    (0, -2.7),
    (1.3, 2.1),
].T
Y = [0] * 8 + [1] * 8

Création du modèle

Dans cette étape, nous allons créer le modèle SVM-Kernel avec trois noyaux différents : linéaire, polynôme et fonction de base radiale (RBF). Le noyau linéaire est utilisé pour les points de données linéairement séparables, tandis que les noyaux polynôme et RBF sont utiles pour les points de données non linéairement séparables.

## fit the model
for kernel in ("linear", "poly", "rbf"):
    clf = svm.SVC(kernel=kernel, gamma=2)
    clf.fit(X, Y)

Visualiser le modèle

Dans cette étape, nous allons visualiser le modèle SVM-Kernel en traçant la droite, les points et les vecteurs les plus proches du plan.

    ## plot the line, the points, and the nearest vectors to the plane
    plt.figure(fignum, figsize=(4, 3))
    plt.clf()

    plt.scatter(
        clf.support_vectors_[:, 0],
        clf.support_vectors_[:, 1],
        s=80,
        facecolors="none",
        zorder=10,
        edgecolors="k",
    )
    plt.scatter(X[:, 0], X[:, 1], c=Y, zorder=10, cmap=plt.cm.Paired, edgecolors="k")

    plt.axis("tight")
    x_min = -3
    x_max = 3
    y_min = -3
    y_max = 3

    XX, YY = np.mgrid[x_min:x_max:200j, y_min:y_max:200j]
    Z = clf.decision_function(np.c_[XX.ravel(), YY.ravel()])

    ## Put the result into a color plot
    Z = Z.reshape(XX.shape)
    plt.figure(fignum, figsize=(4, 3))
    plt.pcolormesh(XX, YY, Z > 0, cmap=plt.cm.Paired)
    plt.contour(
        XX,
        YY,
        Z,
        colors=["k", "k", "k"],
        linestyles=["--", "-", "--"],
        levels=[-0.5, 0, 0.5],
    )

    plt.xlim(x_min, x_max)
    plt.ylim(y_min, y_max)

    plt.xticks(())
    plt.yticks(())
    fignum = fignum + 1
plt.show()

Sommaire

Dans ce laboratoire, nous avons appris à utiliser les SVM-Kernels pour classifier des points de données. Nous avons créé un ensemble de données et des cibles, créé le modèle SVM-Kernel avec trois noyaux différents et visualisé le modèle. Les SVM-Kernels sont particulièrement utiles lorsque les points de données ne sont pas linéairement séparables.