[python] scikit-learn을 사용한 다중 라벨 분류

다중 라벨 분류는 한 샘플이 여러 개의 라벨에 속할 수 있는 분류 문제입니다. 예를 들어, 하나의 이미지에 있는 여러 개의 물체를 인식하는 문제가 다중 라벨 분류의 예시입니다. scikit-learn은 다중 라벨 분류를 위한 다양한 알고리즘과 도구를 제공합니다. 이 글에서는 scikit-learn을 사용하여 다중 라벨 분류를 수행하는 방법을 살펴보겠습니다.

데이터 준비

다중 라벨 분류를 위해 먼저 데이터를 준비해야 합니다. 일반적으로 데이터는 피쳐(Feature)와 라벨(Label)으로 이루어져 있습니다. 피쳐는 각각의 샘플이 가지고 있는 속성들을 나타내며, 라벨은 각각의 샘플이 속할 수 있는 클래스를 나타냅니다.

import numpy as np
from sklearn.model_selection import train_test_split

# 피쳐 데이터 로드
X = np.load('features.npy')

# 라벨 데이터 로드
y = np.load('labels.npy')

# 훈련 데이터와 테스트 데이터로 나누기
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

위의 코드에서 np.load 함수를 사용하여 피쳐와 라벨 데이터를 로드하고, train_test_split 함수를 사용하여 훈련 데이터와 테스트 데이터를 나눕니다.

모델 학습과 예측

scikit-learn에서는 다중 라벨 분류를 위한 다양한 알고리즘을 제공합니다. 예를 들어, MultiOutputClassifier는 다중 라벨 분류를 수행하는 래퍼(wrapper) 클래스입니다. 다음은 MultiOutputClassifier를 사용하여 다중 라벨 분류를 수행하는 예제 코드입니다.

from sklearn.multioutput import MultiOutputClassifier
from sklearn.ensemble import RandomForestClassifier

# 다중 라벨 분류를 위한 모델 정의
model = MultiOutputClassifier(RandomForestClassifier())

# 모델 학습
model.fit(X_train, y_train)

# 모델 예측
y_pred = model.predict(X_test)

위의 코드에서는 RandomForestClassifier를 사용하여 다중 라벨 분류를 수행하는 모델을 정의하고, MultiOutputClassifier를 사용하여 이 모델을 래핑합니다. 그 후에 fit 메서드를 사용하여 모델을 학습하고, predict 메서드를 사용하여 예측을 수행합니다.

성능 평가

다중 라벨 분류의 성능을 평가하기 위해 다양한 지표를 사용할 수 있습니다. 예를 들어, 정확도(Accuracy), F1 스코어(F1 Score), 재현율(Recall) 등의 지표를 사용할 수 있습니다.

from sklearn.metrics import accuracy_score, f1_score, recall_score

# 정확도 평가
accuracy = accuracy_score(y_test, y_pred)

# F1 스코어 평가
f1 = f1_score(y_test, y_pred, average='micro')

# 재현율 평가
recall = recall_score(y_test, y_pred, average='micro')

위의 코드에서는 accuracy_score, f1_score, recall_score 함수를 사용하여 각각 정확도, F1 스코어, 재현율을 계산합니다.

결론

scikit-learn을 사용하여 다중 라벨 분류를 수행하는 방법을 알아보았습니다. 데이터의 준비부터 모델 학습과 예측, 그리고 성능 평가까지의 과정을 경험할 수 있었습니다. scikit-learn은 다양한 알고리즘과 유틸리티 함수를 제공하므로, 다중 라벨 분류 문제에 적합한 방법을 선택하여 적용할 수 있습니다.

참고 자료