준지도 학습 알고리즘

Beginner

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

소개

이 실습에서는 레이블이 지정된 학습 데이터와 레이블이 지정되지 않은 학습 데이터가 혼합된 머신러닝 유형인 준지도 학습 (semi-supervised learning) 개념을 탐구합니다. 준지도 학습 알고리즘은 레이블이 지정되지 않은 데이터를 활용하여 모델의 성능을 향상시키고 새로운 샘플에 대한 일반화 능력을 높일 수 있습니다. 이는 레이블이 지정된 데이터가 적고 레이블이 지정되지 않은 데이터가 많은 경우에 특히 유용합니다.

이 실습에서는 자기훈련 (Self Training) 과 레이블 전파 (Label Propagation) 라는 두 가지 준지도 학습 알고리즘에 중점을 둘 것입니다. 파이썬의 인기 머신러닝 라이브러리인 scikit-learn 을 사용하여 이러한 알고리즘을 구현하고 사용하는 방법을 배울 것입니다.

VM 팁

VM 시작이 완료되면 왼쪽 상단 모서리를 클릭하여 Notebook 탭으로 전환하여 연습을 위한 Jupyter Notebook에 접근합니다.

때때로 Jupyter Notebook 이 완전히 로드되기까지 몇 초 정도 기다려야 할 수 있습니다. Jupyter Notebook 의 제한으로 인해 작업 검증은 자동화될 수 없습니다.

학습 중 문제가 발생하면 Labby 에 문의하십시오. 세션 후 피드백을 제공하면 문제를 신속하게 해결해 드리겠습니다.

scikit-learn 설치

시작하기 전에 scikit-learn 이 설치되어 있는지 확인해야 합니다. 설치되지 않았다면 다음 명령어를 사용하여 설치할 수 있습니다.

pip install -U scikit-learn

자기훈련 (Self Training)

자기훈련 알고리즘 개요

자기훈련 알고리즘은 Yarowsky 의 알고리즘을 기반으로 합니다. 레이블이 지정되지 않은 데이터로부터 학습하여 지도 학습 분류기를 준지도 학습 분류기로 활용할 수 있도록 합니다. 이 알고리즘은 레이블이 지정된 데이터와 레이블이 지정되지 않은 데이터를 반복적으로 사용하여 지도 학습 분류기를 학습시키고, 레이블이 지정되지 않은 데이터에 대한 예측 결과를 사용하여 이러한 샘플의 일부를 레이블이 지정된 데이터에 추가합니다. 알고리즘은 모든 샘플에 레이블이 지정되거나 반복에서 새로운 샘플이 선택되지 않을 때까지 반복을 계속합니다.

scikit-learn 에서 자기훈련 사용

scikit-learn 에서 자기훈련 알고리즘은 SelfTrainingClassifier 클래스에 구현되어 있습니다. 이 알고리즘을 사용하려면 predict_proba 메서드를 구현하는 지도 학습 분류기를 제공해야 합니다. 자기훈련 알고리즘 사용 예시는 다음과 같습니다.

from sklearn.semi_supervised import SelfTrainingClassifier
from sklearn.linear_model import LogisticRegression

## 로지스틱 회귀 분류기를 생성합니다.
classifier = LogisticRegression()

## 로지스틱 회귀 분류기를 기본 분류기로 사용하는 자기훈련 분류기를 생성합니다.
self_training_classifier = SelfTrainingClassifier(classifier)

## 레이블이 지정된 데이터와 레이블이 지정되지 않은 데이터로 자기훈련 분류기를 학습시킵니다.
self_training_classifier.fit(X_labeled, y_labeled, X_unlabeled)

## 새로운 샘플에 대한 레이블을 예측합니다.
y_pred = self_training_classifier.predict(X_test)

위의 예에서 X_labeledy_labeled는 레이블이 지정된 데이터이고, X_unlabeled는 레이블이 지정되지 않은 데이터이며, X_test는 예측할 새로운 샘플입니다.

레이블 전파 (Label Propagation)

레이블 전파 알고리즘 개요

레이블 전파는 준지도 그래프 추론 알고리즘의 한 유형입니다. 입력 데이터셋의 모든 항목에 대한 유사도 그래프를 구성하고, 이 그래프를 사용하여 레이블이 지정된 데이터의 레이블을 레이블이 지정되지 않은 데이터로 전파합니다. 레이블 전파는 분류 작업에 사용될 수 있으며, 커널 메서드를 지원하여 데이터를 다른 차원 공간으로 투영할 수 있습니다.

scikit-learn 에서 레이블 전파 사용

scikit-learn 에서는 LabelPropagationLabelSpreading 두 가지 레이블 전파 모델을 제공합니다. 두 모델 모두 유사도 그래프를 구성하고 레이블을 전파합니다. 레이블 전파 사용 예시는 다음과 같습니다.

from sklearn.semi_supervised import LabelPropagation

## 레이블 전파 모델을 생성합니다.
label_propagation = LabelPropagation()

## 레이블이 지정된 데이터로 레이블 전파 모델을 학습시킵니다.
label_propagation.fit(X_labeled, y_labeled)

## 새로운 샘플에 대한 레이블을 예측합니다.
y_pred = label_propagation.predict(X_test)

위의 예에서 X_labeledy_labeled는 레이블이 지정된 데이터이고, X_test는 예측할 새로운 샘플입니다.

요약

준지도 학습은 레이블이 지정되지 않은 데이터를 활용하여 모델의 성능을 향상시킬 수 있는 강력한 기법입니다. 이 실습에서는 두 가지 준지도 학습 알고리즘인 자기훈련 (Self Training) 과 레이블 전파 (Label Propagation) 에 대해 학습했습니다. 또한, scikit-learn 을 사용하여 이러한 알고리즘을 구현하고 사용하는 방법을 배웠습니다. 레이블이 지정되지 않은 데이터를 머신 러닝 워크플로우에 통합함으로써 사용 가능한 데이터를 더 효율적으로 활용하고, 더 정확한 예측을 얻을 수 있습니다.