소개
이 실습에서는 레이블이 지정된 샘플로부터 알 수 없는 샘플의 레이블을 학습하는 방법인 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 을 사용하여 알 수 없는 샘플의 레이블을 학습하고 학습된 레이블의 정확도를 시각화했습니다.