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.
Параметры
kernel kernel: {'knn', 'rbf'} или вызываемый объект, по умолчанию='rbf'

Строковый идентификатор используемой функции ядра или сама функция ядра.
Допустимы только строки 'rbf' и 'knn'. Передаваемая функция
должна принимать два аргумента, каждый формы (n_samples, n_features),
и возвращать матрицу весов формы (n_samples, n_samples).
'knn'
alpha alpha: float, по умолчанию=0.2

Коэффициент ограничения. Значение из интервала (0, 1), задающее,
в какой степени образец должен перенимать информацию от соседей,
а не опираться на свою начальную метку.
При alpha=0 начальная информация о метках сохраняется; при alpha=1
вся начальная информация заменяется.
0.8
gamma gamma: float, по умолчанию=20

Параметр ядра rbf.
20
n_neighbors n_neighbors: int, по умолчанию=7

Параметр ядра knn, представляющий собой строго положительное целое число.
7
max_iter max_iter: int, по умолчанию=30

Максимальное допустимое число итераций.
30
tol tol: float, по умолчанию=1e-3

Допуск сходимости: порог, при достижении которого система считается
находящейся в стационарном состоянии.
0.001
n_jobs n_jobs: int, по умолчанию=None

Количество параллельных заданий для запуска.
``None`` означает 1, если только не используется контекст :obj:`joblib.parallel_backend`.
``-1`` означает использование всех процессоров. Подробнее см. :term:`Глоссарий <n_jobs>`.
None
Обученные атрибуты
Название Тип Значение
X_ X_: ndarray формы (n_samples, n_features)

Входной массив.
ndarray[float64](200, 2) [[ 1. , 0. ], [ 1. , 0.06], [ 0.99, 0.13], ..., [ 0.79,-0.15], [ 0.79,-0.1 ], [ 0.8 ,-0.05]]
classes_ classes_: ndarray формы (n_classes,)

Различные метки, используемые для классификации образцов.
ndarray[float64](2,) [0.,1.]
label_distributions_ label_distributions_: ndarray формы (n_samples, n_classes)

Категориальное распределение для каждого элемента.
ndarray[float64](200, 2) [[1.,0.], [1.,0.], [1.,0.], ..., [0.,1.], [0.,1.], [0.,1.]]
n_features_in_ n_features_in_: int

Количество признаков, обнаруженных во время :term:`обучения`.

.. versionadded:: 0.24
int 2
n_iter_ n_iter_: int

Число выполненных итераций.
int 18
transduction_ transduction_: ndarray формы (n_samples,)

Метка, присвоенная каждому элементу во время :term:`обучения`.
ndarray[float64](200,) [0.,0.,0.,...,1.,1.,1.]


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

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

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

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

Связанные примеры

Граница принятия решений классификаторов с частичным привлечением учителя и SVM на наборе данных Iris

Демонстрация алгоритма Spectral Biclustering

Классификация текстовых данных с частичным привлечением учителя

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

© 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

Spec-Zone.ru

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