소개
이 실습에서는 레이블 확산 알고리즘을 사용하여 반지도 학습을 수행하는 방법을 보여줍니다. 손글씨 숫자 데이터셋의 일부를 사용하며, 이 중 40 개의 샘플만 레이블이 지정됩니다. 그런 다음 레이블 확산을 사용하여 나머지 300 개의 샘플을 예측합니다.
VM 팁
VM 시작이 완료되면 왼쪽 상단 모서리를 클릭하여 Notebook 탭으로 전환하여 연습을 위한 Jupyter Notebook에 접근합니다.
때때로 Jupyter Notebook 이 완전히 로드되기까지 몇 초 정도 기다려야 할 수 있습니다. Jupyter Notebook 의 제한으로 인해 작업의 유효성 검사를 자동화할 수 없습니다.
학습 중 문제가 발생하면 Labby 에 문의하십시오. 세션 후 피드백을 제공하면 문제를 신속하게 해결해 드리겠습니다.
데이터 로드 및 셔플
먼저 숫자 데이터셋을 로드하고 데이터를 무작위로 섞습니다.
digits = datasets.load_digits()
rng = np.random.RandomState(2)
indices = np.arange(len(digits.data))
rng.shuffle(indices)
반지도 학습을 위한 데이터 준비
340 개의 샘플을 선택하고, 이 중 40 개의 샘플만 알려진 레이블을 갖습니다. 레이블을 알 수 없는 나머지 300 개 샘플의 인덱스를 저장합니다. 그런 다음 레이블을 섞어서 레이블이 없는 샘플은 -1 로 표시합니다.
X = digits.data[indices[:340]]
y = digits.target[indices[:340]]
n_total_samples = len(y)
n_labeled_points = 40
indices = np.arange(n_total_samples)
unlabeled_set = indices[n_labeled_points:]
y_train = np.copy(y)
y_train[unlabeled_set] = -1
레이블 확산 모델 학습
gamma=0.25 및 max_iter=20 으로 레이블 확산 모델을 학습합니다.
lp_model = LabelSpreading(gamma=0.25, max_iter=20)
lp_model.fit(X, y_train)
모델 성능 평가
모델의 성능을 평가하기 위해 분류 보고서와 혼동 행렬을 생성합니다.
predicted_labels = lp_model.transduction_[unlabeled_set]
true_labels = y[unlabeled_set]
print(
"레이블 확산 모델: %d 레이블 지정된 점 & %d 레이블 미지정 점 (%d 총)"
% (n_labeled_points, n_total_samples - n_labeled_points, n_total_samples)
)
print(classification_report(true_labels, predicted_labels))
ConfusionMatrixDisplay.from_predictions(
true_labels, predicted_labels, labels=lp_model.classes_
)
가장 불확실한 예측 시각화
가장 불확실한 상위 10 개 예측을 선택하고 표시합니다.
pred_entropies = stats.distributions.entropy(lp_model.label_distributions_.T)
uncertainty_index = np.argsort(pred_entropies)[-10:]
f = plt.figure(figsize=(7, 5))
for index, image_index in enumerate(uncertainty_index):
image = images[image_index]
sub = f.add_subplot(2, 5, index + 1)
sub.imshow(image, cmap=plt.cm.gray_r)
plt.xticks([])
plt.yticks([])
sub.set_title(
"예측: %i\n실제: %i" % (lp_model.transduction_[image_index], y[image_index])
)
f.suptitle("소량의 레이블 데이터로 학습")
plt.show()
요약
이 실험에서는 레이블 확산 알고리즘을 사용하여 반지도 학습을 수행하는 방법을 보여주었습니다. 소량의 레이블 데이터로 모델을 학습시키고 나머지 샘플의 레이블을 예측하는 데 사용했습니다. 모델은 잘 작동하여 대부분의 샘플 레이블을 정확하게 예측했습니다.