데이터 분석을 할 때, 때때로 클래스 간의 불균형이 발생하기도 합니다. 예를 들어, 암을 진단하는 분류 문제에서는 양성(Positive) 샘플보다 음성(Negative) 샘플의 수가 더 적을 수 있습니다. 이때, SMOTE는 클래스 간의 불균형을 해결하기 위한 방법 중 하나입니다.
SMOTE는 Synthetic Minority Over-sampling Technique의 약자로, 소수 클래스의 샘플을 증가시키기 위해 인근 샘플을 사용하여 새로운 샘플을 합성하는 방법입니다. 예를 들어, 소수 클래스의 샘플이 A, B, C, D라면, SMOTE는 A와 인근 샘플인 B와 C를 사용하여 새로운 샘플 E와 F를 합성합니다.
하지만, SMOTE를 사용할 때는 주의해야 할 점이 있습니다. 합성된 샘플은 원래 데이터와 다를 수 있으므로, 과도한 오버샘플링은 모델의 성능을 저하시킬 수 있습니다. 따라서, 적절한 수준에서 오버샘플링을 수행해야 합니다.
from imblearn.over_sampling import SMOTE
from sklearn.datasets import make_classification
# 데이터 생성
X, y = make_classification(n_classes=3, class_sep=2,
weights=[0.1, 0.2, 0.7], n_informative=3,
n_redundant=1, flip_y=0, n_features=20,
n_clusters_per_class=1, n_samples=1000,
random_state=10)
# SMOTE 적용
smote = SMOTE(random_state=42)
X_smote, y_smote = smote.fit_resample(X, y)
# 결과 출력
print("SMOTE 적용 전 데이터: ", X.shape, y.shape)
print("SMOTE 적용 후 데이터: ", X_smote.shape, y_smote.shape)
SMOTE 적용 전 데이터: (1000, 20) (1000,)
SMOTE 적용 후 데이터: (2100, 20) (2100,)
반응형