Génération d'un ensemble de données à étiquetage multiple avec Scikit-Learn

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 à générer un ensemble de données à étiquetage multiple en utilisant la fonction make_multilabel_classification de la bibliothèque Scikit-Learn. Cette fonction génère des échantillons aléatoires de données à étiquetage multiple, où chaque échantillon a des comptes de deux caractéristiques, qui sont distribuées différemment dans chacune des deux classes.

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 au carnet Jupyter Notebook pour la pratique.

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 votre feedback après la session, et nous résoudrons rapidement le problème pour vous.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL sklearn(("Sklearn")) -.-> sklearn/UtilitiesandDatasetsGroup(["Utilities and Datasets"]) ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn/UtilitiesandDatasetsGroup -.-> sklearn/datasets("Datasets") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/datasets -.-> lab-49255{{"Génération d'un ensemble de données à étiquetage multiple avec Scikit-Learn"}} ml/sklearn -.-> lab-49255{{"Génération d'un ensemble de données à étiquetage multiple avec Scikit-Learn"}} end

Importez les bibliothèques requises et définissez les constantes

Tout d'abord, nous devons importer les bibliothèques requises et définir les couleurs et la constante de graine aléatoire pour générer l'ensemble de données à étiquetage multiple.

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_multilabel_classification as make_ml_clf

COLORS = np.array(
    [
        "!",
        "#FF3333",  ## rouge
        "#0198E1",  ## bleu
        "#BF5FFF",  ## violet
        "#FCD116",  ## jaune
        "#FF7216",  ## orange
        "#4DBD33",  ## vert
        "#87421F",  ## brun
    ]
)

## Utilisez la même graine aléatoire pour plusieurs appels à make_multilabel_classification pour
## vous assurer d'avoir les mêmes distributions
RANDOM_SEED = np.random.randint(2**10)

Définissez la fonction de tracé

Ensuite, nous définissons une fonction plot_2d qui trace l'ensemble de données à étiquetage multiple généré aléatoirement. Elle prend trois arguments : n_labels, n_classes et length.

def plot_2d(ax, n_labels=1, n_classes=3, length=50):
    X, Y, p_c, p_w_c = make_ml_clf(
        n_samples=150,
        n_features=2,
        n_classes=n_classes,
        n_labels=n_labels,
        length=length,
        allow_unlabeled=False,
        return_distributions=True,
        random_state=RANDOM_SEED,
    )

    ax.scatter(
        X[:, 0], X[:, 1], color=COLORS.take((Y * [1, 2, 4]).sum(axis=1)), marker="."
    )
    ax.scatter(
        p_w_c[0] * length,
        p_w_c[1] * length,
        marker="*",
        linewidth=0.5,
        edgecolor="black",
        s=20 + 1500 * p_c**2,
        color=COLORS.take([1, 2, 4]),
    )
    ax.set_xlabel("Feature 0 count")
    return p_c, p_w_c

Cette fonction génère l'ensemble de données en utilisant la fonction make_multilabel_classification avec les paramètres spécifiés. Ensuite, elle trace l'ensemble de données à l'aide de la fonction scatter de la bibliothèque Matplotlib. La fonction renvoie les probabilités de classe et les probabilités de caractéristique.

Tracez l'ensemble de données

Maintenant, nous traçons l'ensemble de données à étiquetage multiple généré aléatoirement en utilisant la fonction plot_2d. Nous créons une figure avec deux sous-graphiques et appelons la fonction plot_2d pour chaque sous-graphique avec des valeurs de paramètre différentes.

_, (ax1, ax2) = plt.subplots(1, 2, sharex="row", sharey="row", figsize=(8, 4))
plt.subplots_adjust(bottom=0.15)

p_c, p_w_c = plot_2d(ax1, n_labels=1)
ax1.set_title("n_labels=1, length=50")
ax1.set_ylabel("Feature 1 count")

plot_2d(ax2, n_labels=3)
ax2.set_title("n_labels=3, length=50")
ax2.set_xlim(left=0, auto=True)
ax2.set_ylim(bottom=0, auto=True)

plt.show()

Affichez les probabilités de classe et de caractéristique

Enfin, nous affichons les probabilités de classe et de caractéristique pour chaque classe en utilisant les probabilités de classe et de caractéristique renvoyées par la fonction plot_2d.

print("Les données ont été générées à partir de (random_state=%d):" % RANDOM_SEED)
print("Classe", "P(C)", "P(w0|C)", "P(w1|C)", sep="\t")
for k, p, p_w in zip(["rouge", "bleu", "jaune"], p_c, p_w_c.T):
    print("%s\t%0.2f\t%0.2f\t%0.2f" % (k, p, p_w[0], p_w[1]))

Sommaire

Dans ce laboratoire, nous avons appris à générer un ensemble de données à étiquetage multiple en utilisant la fonction make_multilabel_classification de la bibliothèque Scikit-Learn. Nous avons également appris à tracer l'ensemble de données et à afficher les probabilités de classe et de caractéristique.