Régression vectorielle support

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

Dans ce laboratoire, nous utiliserons la régression vectorielle support (Support Vector Regression - SVR) pour ajuster un modèle à un ensemble de données 1D en utilisant des noyaux linéaires, polynomiaux et de fonction radiale de base (Radial Basis Function - RBF). Nous utiliserons la bibliothèque scikit-learn de Python pour effectuer la SVR.

Conseils sur la machine virtuelle (VM)

Une fois le démarrage de la VM terminé, cliquez dans le coin supérieur gauche pour basculer vers l'onglet Carnet de notes pour accéder au carnet Jupyter Notebook pour pratiquer.

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

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.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL sklearn(("Sklearn")) -.-> sklearn/CoreModelsandAlgorithmsGroup(["Core Models and Algorithms"]) ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn/CoreModelsandAlgorithmsGroup -.-> sklearn/svm("Support Vector Machines") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/svm -.-> lab-49310{{"Régression vectorielle support"}} ml/sklearn -.-> lab-49310{{"Régression vectorielle support"}} end

Générer des données d'échantillonnage

Tout d'abord, nous générons un ensemble de données d'échantillonnage composé de 40 valeurs aléatoires comprises entre 0 et 5. Nous calculons ensuite la fonction sinus de chaque valeur et ajoutons du bruit à chaque 5ème valeur.

import numpy as np

## Générer des données d'échantillonnage
X = np.sort(5 * np.random.rand(40, 1), axis=0)
y = np.sin(X).ravel()

## ajouter du bruit aux cibles
y[::5] += 3 * (0.5 - np.random.rand(8))

Ajuster le modèle de régression

Ensuite, nous ajustons un modèle SVR à notre ensemble de données d'échantillonnage en utilisant un noyau linéaire, polynomial et RBF. Nous définissons les hyperparamètres pour chaque modèle et les entraînons sur notre ensemble de données d'échantillonnage.

from sklearn.svm import SVR

## Ajuster le modèle de régression
svr_rbf = SVR(kernel="rbf", C=100, gamma=0.1, epsilon=0.1)
svr_lin = SVR(kernel="linear", C=100, gamma="auto")
svr_poly = SVR(kernel="poly", C=100, gamma="auto", degree=3, epsilon=0.1, coef0=1)

svrs = [svr_rbf, svr_lin, svr_poly]

for svr in svrs:
    svr.fit(X, y)

Visualiser les résultats

Enfin, nous visualisons les résultats de nos modèles SVR en les traçant par rapport à l'ensemble de données d'échantillonnage. Nous traçons également les vecteurs de support et les autres données d'entraînement.

import matplotlib.pyplot as plt

## Regarder les résultats
lw = 2

label_kernel = ["RBF", "Linéaire", "Polynômiale"]
couleur_modele = ["m", "c", "g"]

fig, axes = plt.subplots(nrows=1, ncols=3, figsize=(15, 10), sharey=True)

for ix, svr in enumerate(svrs):
    axes[ix].plot(
        X,
        svr.predict(X),
        color=couleur_modele[ix],
        lw=lw,
        label="Modèle {}".format(label_kernel[ix]),
    )
    axes[ix].scatter(
        X[svr.support_],
        y[svr.support_],
        facecolor="none",
        edgecolor=couleur_modele[ix],
        s=50,
        label="{} vecteurs de support".format(label_kernel[ix]),
    )
    axes[ix].scatter(
        X[np.setdiff1d(np.arange(len(X)), svr.support_)],
        y[np.setdiff1d(np.arange(len(X)), svr.support_)],
        facecolor="none",
        edgecolor="k",
        s=50,
        label="autres données d'entraînement",
    )
    axes[ix].legend(
        loc="upper center",
        bbox_to_anchor=(0.5, 1.1),
        ncol=1,
        fancybox=True,
        shadow=True,
    )

fig.text(0.5, 0.04, "données", ha="center", va="center")
fig.text(0.06, 0.5, "cible", ha="center", va="center", rotation="vertical")
fig.suptitle("Régression vectorielle support", fontsize=14)
plt.show()

Sommaire

Dans ce laboratoire, nous avons appris à utiliser la régression vectorielle support (Support Vector Regression - SVR) pour ajuster un modèle à un ensemble de données 1D en utilisant des noyaux linéaires, polynomiaux et RBF. Nous avons généré des données d'échantillonnage, ajusté des modèles de régression à l'aide de scikit-learn et visualisé les résultats.