Примечание
Перейти в конец, чтобы скачать полный код примера или запустить этот пример в браузере с помощью JupyterLite или Binder.
Распространение меток на окружностях: изучение сложной структуры
Пример того, как LabelPropagation изучает сложную внутреннюю структуру, демонстрируя «обучение на многообразиях». Внешняя окружность должна быть помечена как «красная», а внутренняя — как «синяя». Поскольку каждая группа меток расположена внутри собственной отдельной фигуры, мы можем убедиться, что метки правильно распространяются по окружности.
# Authors: The scikit-learn developers # SPDX-License-Identifier: BSD-3-Clause
Мы создаём набор данных из двух концентрических окружностей. Кроме того, каждому образцу набора данных присваивается метка: 0 (принадлежит внешней окружности), 1 (принадлежит внутренней окружности) или -1 (неизвестно). Здесь все метки, кроме двух, обозначены как неизвестные.
import numpy as np from sklearn.datasets import 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
Построение графика исходных данных
import matplotlib.pyplot as plt
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)")

Цель LabelSpreading — присвоить метку образцу, для которого она изначально неизвестна.
from sklearn.semi_supervised import LabelSpreading label_spread = LabelSpreading(kernel="knn", alpha=0.8) label_spread.fit(X, labels)
Теперь мы можем проверить, какие метки были присвоены каждому образцу, для которого метка была неизвестна.
output_labels = label_spread.transduction_
output_label_array = np.asarray(output_labels)
outer_numbers = (output_label_array == outer).nonzero()[0]
inner_numbers = (output_label_array == inner).nonzero()[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()

Общее время выполнения скрипта: (0 минут 0.155 секунды)
Связанные примеры
© 2007–2026 The scikit-learn developers
Licensed under the 3-clause BSD License.
https://scikit-learn.org/1.9/auto_examples/semi_supervised/plot_label_propagation_structure.html