Apprentissage par propagation d'étiquettes

Beginner

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

Introduction

Dans ce laboratoire, nous allons apprendre à utiliser LabelPropagation pour apprendre les étiquettes d'échantillons inconnus à partir d'échantillons étiquetés. Nous allons générer un ensemble de données contenant deux cercles concentriques et attribuer des étiquettes à chaque échantillon. Ensuite, nous utiliserons LabelPropagation pour apprendre les étiquettes des échantillons inconnus.

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

Importation des bibliothèques requises

Nous commençons par importer les bibliothèques requises pour ce laboratoire.

import numpy as np
from sklearn.datasets import make_circles
import matplotlib.pyplot as plt
from sklearn.semi_supervised import LabelSpreading

Générer un ensemble de données

Ensuite, nous générons un ensemble de données contenant deux cercles concentriques à l'aide de make_circles. Nous attribuons des étiquettes à l'ensemble de données de sorte que tous les échantillons soient inconnus, sauf deux échantillons qui appartiennent respectivement aux cercles extérieur et intérieur.

n_samples = 200
X, y = make_circles(n_samples=n_samples, shuffle=False)
outer, inner = 0, 1
labels = np.full(n_samples, -1.0)
labels[0] = outer
labels[-1] = inner

Tracer les données brutes

Nous traçons les données brutes pour visualiser les cercles et les étiquettes.

plt.figure(figsize=(4, 4))
plt.scatter(
    X[labels == outer, 0],
    X[labels == outer, 1],
    color="navy",
    marker="s",
    lw=0,
    label="outer labeled",
    s=10,
)
plt.scatter(
    X[labels == inner, 0],
    X[labels == inner, 1],
    color="c",
    marker="s",
    lw=0,
    label="inner labeled",
    s=10,
)
plt.scatter(
    X[labels == -1, 0],
    X[labels == -1, 1],
    color="darkorange",
    marker=".",
    label="unlabeled",
)
plt.legend(scatterpoints=1, shadow=False, loc="center")
_ = plt.title("Raw data (2 classes=outer and inner)")

Apprendre les étiquettes avec LabelPropagation

Nous utilisons LabelSpreading pour apprendre les étiquettes des échantillons inconnus.

label_spread = LabelSpreading(kernel="knn", alpha=0.8)
label_spread.fit(X, labels)

Tracer les étiquettes apprises

Enfin, nous traçons les étiquettes apprises pour visualiser la précision de LabelPropagation.

output_labels = label_spread.transduction_
output_label_array = np.asarray(output_labels)
outer_numbers = np.where(output_label_array == outer)[0]
inner_numbers = np.where(output_label_array == inner)[0]

plt.figure(figsize=(4, 4))
plt.scatter(
    X[outer_numbers, 0],
    X[outer_numbers, 1],
    color="navy",
    marker="s",
    lw=0,
    s=10,
    label="outer learned",
)
plt.scatter(
    X[inner_numbers, 0],
    X[inner_numbers, 1],
    color="c",
    marker="s",
    lw=0,
    s=10,
    label="inner learned",
)
plt.legend(scatterpoints=1, shadow=False, loc="center")
plt.title("Labels learned with Label Spreading (KNN)")
plt.show()

Sommaire

Dans ce laboratoire, nous avons appris à utiliser LabelPropagation pour apprendre les étiquettes d'échantillons inconnus à partir d'échantillons étiquetés. Nous avons généré un ensemble de données contenant deux cercles concentriques et attribué des étiquettes à chaque échantillon. Ensuite, nous avons utilisé LabelPropagation pour apprendre les étiquettes des échantillons inconnus et visualisé la précision des étiquettes apprises.