Обучение с использованием Label Propagation

Beginner

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

Введение

В этом лабораторном занятии мы научимся использовать LabelPropagation для обучения меток неизвестных образцов на основе помеченных образцов. Мы сгенерируем датасет, содержащий две концентрические окружности, и присвоим метки каждому образцу. Затем мы используем LabelPropagation для обучения меток неизвестных образцов.

Советы по работе с ВМ

После запуска ВМ нажмите в левом верхнем углу, чтобы переключиться на вкладку Notebook и получить доступ к Jupyter Notebook для практики.

Иногда вам может потребоваться подождать несколько секунд, пока Jupyter Notebook загрузится. Валидация операций не может быть автоматизирована из-за ограничений Jupyter Notebook.

Если вы сталкиваетесь с проблемами во время обучения, не стесняйтесь обращаться к Labby. Оставьте отзыв после занятия, и мы оперативно решим проблему для вас.

Импортируем необходимые библиотеки

Начнем с импорта необходимых библиотек для этой лабораторной работы.

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

Генерируем датасет

Далее мы генерируем датасет, содержащий две концентрические окружности, с использованием make_circles. Мы присваиваем метки датасету таким образом, что все образцы неизвестны, кроме двух образцов, которые принадлежат внешней и внутренней окружностям соответственно.

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

Построение графика для исходных данных

Мы строим график для исходных данных, чтобы визуализировать окружности и метки.

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

Обучение меток с использованием LabelPropagation

Мы используем LabelSpreading для обучения меток неизвестных образцов.

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

Построение графика для обученных меток

Наконец, мы строим график для обученных меток, чтобы визуализировать точность 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()

Резюме

В этом практическом занятии мы узнали, как использовать LabelPropagation для обучения меток неизвестных образцов на основе меток известных образцов. Мы сгенерировали датасет, содержащий две концентрические окружности, и присвоили метки каждому образцу. Затем мы использовали LabelPropagation для обучения меток неизвестных образцов и визуализировали точность полученных меток.