Introduction
Dans ce tutoriel, nous allons apprendre à tracer une fonction de décision d'un ensemble de données pondéré à l'aide de scikit-learn. Nous allons également apprendre à attribuer des poids différents aux échantillons dans l'ensemble de données pour montrer comment les poids affectent la fonction 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 basculer vers 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 requises
Nous commençons par importer les bibliothèques nécessaires pour notre projet.
import numpy as np
import matplotlib.pyplot as plt
from sklearn import linear_model
Création d'un ensemble de données pondéré
Nous créons un ensemble de données pondéré à l'aide de la bibliothèque numpy. Nous générons 20 points avec des valeurs aléatoires et attribuons un poids plus élevé aux 10 derniers échantillons.
np.random.seed(0)
X = np.r_[np.random.randn(10, 2) + [1, 1], np.random.randn(10, 2)]
y = [1] * 10 + [-1] * 10
sample_weight = 100 * np.abs(np.random.randn(20))
sample_weight[:10] *= 10
Tracer l'ensemble de données pondéré
Nous traçons l'ensemble de données pondéré à l'aide de la bibliothèque matplotlib. La taille des points est proportionnelle à son poids.
xx, yy = np.meshgrid(np.linspace(-4, 5, 500), np.linspace(-4, 5, 500))
fig, ax = plt.subplots()
ax.scatter(
X[:, 0],
X[:, 1],
c=y,
s=sample_weight,
alpha=0.9,
cmap=plt.cm.bone,
edgecolor="black",
)
Ajuster le modèle non pondéré
Nous ajustons un modèle non pondéré à l'aide de l'algorithme SGDClassifier de la bibliothèque scikit-learn. Nous traçons ensuite la fonction de décision du modèle non pondéré.
clf = linear_model.SGDClassifier(alpha=0.01, max_iter=100)
clf.fit(X, y)
Z = clf.decision_function(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
no_weights = ax.contour(xx, yy, Z, levels=[0], linestyles=["solid"])
Ajuster le modèle pondéré
Nous ajustons un modèle pondéré en utilisant le même algorithme que dans l'Étape 4, mais cette fois-ci, nous passons l'argument sample_weight à la méthode fit. Nous traçons ensuite la fonction de décision du modèle pondéré.
clf = linear_model.SGDClassifier(alpha=0.01, max_iter=100)
clf.fit(X, y, sample_weight=sample_weight)
Z = clf.decision_function(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
samples_weights = ax.contour(xx, yy, Z, levels=[0], linestyles=["dashed"])
Ajouter une légende et afficher le tracé
Nous ajoutons une légende au tracé pour différencier les modèles non pondéré et pondéré. Nous affichons ensuite le tracé.
no_weights_handles, _ = no_weights.legend_elements()
weights_handles, _ = samples_weights.legend_elements()
ax.legend(
[no_weights_handles[0], weights_handles[0]],
["sans pondération", "avec pondération"],
loc="bas à gauche",
)
ax.set(xticks=(), yticks=())
plt.show()
Sommaire
Dans ce tutoriel, nous avons appris à tracer une fonction de décision d'un ensemble de données pondéré à l'aide de scikit-learn. Nous avons également appris à attribuer des poids différents aux échantillons dans l'ensemble de données pour montrer comment les poids affectent la fonction de décision.