Machine à vecteurs de support avec échantillons pondérés

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 allons apprendre à tracer la fonction de décision d'un ensemble de données pondérées dans un SVM. Nous allons créer un modèle qui prend en compte les poids des échantillons et un autre modèle qui ne prend pas en compte les poids des échantillons. Nous comparerons ensuite les deux modèles en traçant leurs fonctions de décision.

Conseils sur la machine virtuelle

Une fois le démarrage de la machine virtuelle terminé, cliquez dans le coin supérieur gauche pour passer à l'onglet Carnet de notes 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 ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills ml/sklearn -.-> lab-49332{{"Machine à vecteurs de support avec échantillons pondérés"}} end

Importation des bibliothèques

Nous allons commencer par importer les bibliothèques requises.

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

Création des données

Nous allons créer un ensemble de données de 20 points, où les 10 premiers points appartiennent à la classe 1 et les 10 derniers points appartiennent à la classe -1.

np.random.seed(0)
X = np.r_[np.random.randn(10, 2) + [1, 1], np.random.randn(10, 2)]
y = [1] * 10 + [-1] * 10

Création des poids d'échantillonnage

Nous allons créer deux ensembles de poids d'échantillonnage. Le premier ensemble de poids d'échantillonnage sera constant pour tous les points, et le second ensemble de poids d'échantillonnage sera plus élevé pour certains points aberrants.

sample_weight_last_ten = abs(np.random.randn(len(X)))
sample_weight_constant = np.ones(len(X))
sample_weight_last_ten[15:] *= 5
sample_weight_last_ten[9] *= 15

Entraînement des modèles

Nous allons créer deux modèles SVM. Le premier modèle ne prendra pas en compte les poids d'échantillonnage, et le second modèle prendra en compte les poids d'échantillonnage que nous venons de créer.

clf_no_weights = svm.SVC(gamma=1)
clf_no_weights.fit(X, y)

clf_weights = svm.SVC(gamma=1)
clf_weights.fit(X, y, sample_weight=sample_weight_last_ten)

Tracer les fonctions de décision

Nous allons tracer les fonctions de décision des deux modèles que nous venons de créer. Nous tracerons la fonction de décision du premier modèle à gauche, et la fonction de décision du second modèle à droite. La taille des points sera proportionnelle à leur poids.

fig, axes = plt.subplots(1, 2, figsize=(14, 6))

xx, yy = np.meshgrid(np.linspace(-4, 5, 500), np.linspace(-4, 5, 500))
Z = clf_no_weights.decision_function(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)

axes[0].contourf(xx, yy, Z, alpha=0.75, cmap=plt.cm.bone)
axes[0].scatter(X[:, 0], X[:, 1], c=y, s=100 * sample_weight_constant, alpha=0.9, cmap=plt.cm.bone, edgecolors="black")
axes[0].axis("off")
axes[0].set_title("Poids constants")

Z = clf_weights.decision_function(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)

axes[1].contourf(xx, yy, Z, alpha=0.75, cmap=plt.cm.bone)
axes[1].scatter(X[:, 0], X[:, 1], c=y, s=100 * sample_weight_last_ten, alpha=0.9, cmap=plt.cm.bone, edgecolors="black")
axes[1].axis("off")
axes[1].set_title("Poids modifiés")

plt.show()

Sommaire

Dans ce laboratoire, nous avons appris à tracer la fonction de décision d'un ensemble de données pondéré dans un SVM. Nous avons créé deux modèles, l'un qui prend en compte les poids d'échantillonnage et l'autre qui ne prend pas en compte les poids d'échantillonnage. Nous avons ensuite comparé les deux modèles en traçant leurs fonctions de décision.