Spec-Zone.ru › scikit-learn

Примечание

Перейти к концу для скачивания полного примера кода. или для запуска этого примера в вашем браузере через 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)")
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)
LabelSpreading(alpha=0.8, kernel='knn')
В среде Jupyter, пожалуйста, перезапустите ячейку, чтобы отобразить HTML-представление, или доверьтесь блокноту.
На GitHub HTML-представление не может быть отображено, пожалуйста, попробуйте загрузить эту страницу с nbviewer.org.
LabelSpreading(alpha=0.8, kernel='knn')


Теперь мы можем проверить, какие метки были присвоены каждой выборке, когда метка была неизвестна.

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()
Labels learned with Label Spreading (KNN)

Общее время выполнения скрипта: (0 минут 0.174 секунд)

Launch binder
Launch JupyterLite

Download Jupyter notebook: plot_label_propagation_structure.ipynb

Download Python source code: plot_label_propagation_structure.py

Download zipped: plot_label_propagation_structure.zip

Похожие примеры

Демонстрация алгоритма кластеризации DBSCAN

Демонстрация алгоритма спектрального бикластеринг

Демонстрация алгоритма кластеризации affinity propagation

Метки цифр: демонстрация производительности

© 2007–2025 The scikit-learn developers
Licensed under the 3-clause BSD License.
https://scikit-learn.org/1.6/auto_examples/semi_supervised/plot_label_propagation_structure.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API