Aprendizagem por Propagação de Rótulos

Beginner

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

Introdução

Neste laboratório, aprenderemos a utilizar o LabelPropagation para aprender as etiquetas de amostras desconhecidas a partir de amostras rotuladas. Iremos gerar um conjunto de dados contendo dois círculos concêntricos e atribuir etiquetas a cada amostra. Em seguida, utilizaremos o LabelPropagation para aprender as etiquetas das amostras desconhecidas.

Dicas da Máquina Virtual

Após o arranque da máquina virtual, clique no canto superior esquerdo para mudar para a aba Notebook para aceder ao Jupyter Notebook para a prática.

Por vezes, pode ser necessário esperar alguns segundos para o Jupyter Notebook terminar de carregar. A validação das operações não pode ser automatizada devido a limitações no Jupyter Notebook.

Se tiver problemas durante o aprendizado, não hesite em contactar o Labby. Forneça feedback após a sessão e resolveremos prontamente o problema para si.

Importação de Bibliotecas Necessárias

Começamos importando as bibliotecas necessárias para este laboratório.

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

Gerar Conjunto de Dados

Em seguida, geramos um conjunto de dados contendo dois círculos concêntricos usando make_circles. Atribuímos etiquetas ao conjunto de dados de forma que todas as amostras sejam desconhecidas, exceto duas amostras, que pertencem aos círculos externo e interno, respectivamente.

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

Plotar Dados Brutos

Plotamos os dados brutos para visualizar os círculos e as etiquetas.

plt.figure(figsize=(4, 4))
plt.scatter(
    X[labels == outer, 0],
    X[labels == outer, 1],
    color="navy",
    marker="s",
    lw=0,
    label="externo rotulado",
    s=10,
)
plt.scatter(
    X[labels == inner, 0],
    X[labels == inner, 1],
    color="c",
    marker="s",
    lw=0,
    label="interno rotulado",
    s=10,
)
plt.scatter(
    X[labels == -1, 0],
    X[labels == -1, 1],
    color="darkorange",
    marker=".",
    label="não rotulado",
)
plt.legend(scatterpoints=1, shadow=False, loc="center")
_ = plt.title("Dados brutos (2 classes=externo e interno)")

Aprender Etiquetas com LabelPropagation

Usamos LabelSpreading para aprender as etiquetas das amostras desconhecidas.

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

Plotar Etiquetas Aprendidas

Finalmente, plotamos as etiquetas aprendidas para visualizar a precisão do 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="externo aprendido",
)
plt.scatter(
    X[inner_numbers, 0],
    X[inner_numbers, 1],
    color="c",
    marker="s",
    lw=0,
    s=10,
    label="interno aprendido",
)
plt.legend(scatterpoints=1, shadow=False, loc="center")
plt.title("Etiquetas aprendidas com Label Spreading (KNN)")
plt.show()

Resumo

Neste laboratório, aprendemos como usar LabelPropagation para aprender as etiquetas de amostras desconhecidas a partir de amostras rotuladas. Gerámos um conjunto de dados contendo dois círculos concêntricos e atribuímos etiquetas a cada amostra. Em seguida, usamos LabelPropagation para aprender as etiquetas das amostras desconhecidas e visualizamos a precisão das etiquetas aprendidas.