Aprendizaje de Propagación de Etiquetas

Beginner

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

Introducción

En este laboratorio, aprenderemos a usar LabelPropagation para aprender las etiquetas de muestras desconocidas a partir de muestras etiquetadas. Generaremos un conjunto de datos que contiene dos círculos concéntricos y asignaremos una etiqueta a cada muestra. Luego, usaremos LabelPropagation para aprender las etiquetas de las muestras desconocidas.

Consejos sobre la VM

Una vez que se haya iniciado la VM, haga clic en la esquina superior izquierda para cambiar a la pestaña Cuaderno y acceder a Jupyter Notebook para practicar.

A veces, es posible que tenga que esperar unos segundos a que Jupyter Notebook termine de cargarse. La validación de las operaciones no se puede automatizar debido a las limitaciones de Jupyter Notebook.

Si tiene problemas durante el aprendizaje, no dude en preguntar a Labby. Deje sus comentarios después de la sesión y lo resolveremos rápidamente para usted.

Importar las bibliotecas necesarias

Comenzamos importando las bibliotecas necesarias para este laboratorio.

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

Generar el conjunto de datos

A continuación, generamos un conjunto de datos que contiene dos círculos concéntricos usando make_circles. Asignamos etiquetas al conjunto de datos de modo que todas las muestras son desconocidas excepto dos muestras que pertenecen respectivamente al círculo exterior y al círculo interior.

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

Graficar los datos crudos

Graficamos los datos crudos para visualizar los círculos y las etiquetas.

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)")

Aprender etiquetas con LabelPropagation

Usamos LabelSpreading para aprender las etiquetas de las muestras desconocidas.

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

Graficar las etiquetas aprendidas

Finalmente, graficamos las etiquetas aprendidas para visualizar la precisión 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()

Resumen

En este laboratorio, aprendimos cómo usar LabelPropagation para aprender las etiquetas de muestras desconocidas a partir de muestras etiquetadas. Generamos un conjunto de datos que contiene dos círculos concéntricos y le asignamos una etiqueta a cada muestra. Luego, usamos LabelPropagation para aprender las etiquetas de las muestras desconocidas y visualizamos la precisión de las etiquetas aprendidas.