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.
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.