레이블 전파 학습

Beginner

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

소개

이 실습에서는 레이블이 지정된 샘플로부터 알 수 없는 샘플의 레이블을 학습하는 방법인 LabelPropagation 을 배우게 됩니다. 두 개의 동심원으로 구성된 데이터셋을 생성하고 각 샘플에 레이블을 할당합니다. 그런 다음 LabelPropagation 을 사용하여 알 수 없는 샘플의 레이블을 학습합니다.

VM 팁

VM 시작이 완료되면 왼쪽 상단 모서리를 클릭하여 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("원시 데이터 (2 개 클래스: outer 및 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("Label Spreading (KNN) 으로 학습된 레이블")
plt.show()

요약

이 실습에서는 레이블이 지정된 샘플로부터 알 수 없는 샘플의 레이블을 학습하는 방법인 LabelPropagation 을 배웠습니다. 두 개의 동심원으로 구성된 데이터셋을 생성하고 각 샘플에 레이블을 할당했습니다. 그런 다음 LabelPropagation 을 사용하여 알 수 없는 샘플의 레이블을 학습하고 학습된 레이블의 정확도를 시각화했습니다.