Tracé de la fonction de décision pour un ensemble de données pondéré

Beginner

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

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.