ML, DL
[머신러닝] 클래스 불균형을 해결하기 위한 샘플링(언더 샘플링, 오버 샘플링)
대체불가 핫걸
2024. 10. 4. 10:05
클래스 불균형이란?
특정 클래스의 데이터 수가 다른 클래스에 비해 훨씬 적거나 많은 현상
전체 데이터 중에서 90%가 클래스 A이고 10%만이 클래스 B인 경우, 모델이 단순히 "모든 데이터가 클래스 A"라고 예측해도 정확도가 90%에 달할 수 있습니다. 그러나 이 경우 모델은 클래스 B를 거의 예측하지 못하게 되어 성능 평가 지표로는 부적절합니다.
이처럼 클래스 비율이 극단적으로 다를 경우 소수 클래스의 패턴을 학습하기 어렵고, 잘못된 예측 결과를 초래할 수 있습니다.
이러한 클래스 불균형 문제를 해결하기 위해 샘플링 기법이 존재합니다.
샘플링 기법
데이터의 분포를 조정하여 학습 데이터 세트의 클래스 비율을 맞추는 방법
!pip install imbalanced-learn
※ 라이브러리 설치 필요
언더샘플링 (Undersampling)
다수 클래스의 샘플 수를 줄여 소수 클래스와의 비율을 맞추는 방법
- 장점: 데이터 수가 줄어 학습 속도가 빨라질 수 있음
- 단점: 중요한 정보가 있는 데이터를 제거할 가능성이 있음
from imblearn.under_sampling import RandomUnderSampler
under_sample = RandomUnderSampler()
u_x_train, u_y_train = under_sample.fit_resample(x_train, y_train)
오버샘플링 (Oversampling)
소수 클래스의 샘플 수를 늘려 다수 클래스와 비율을 맞추는 방법
- 장점: 모든 데이터의 정보를 보존하면서 클래스 균형을 맞출 수 있음
- 단점: 데이터가 단순히 반복되면 오버피팅의 위험이 있음
from imblearn.over_sampling import RandomOverSampler
over_sample = RandomOverSampler()
o_x_train, o_y_train = over_sample.fit_resample(x_train, y_train)
SMOTE (Synthetic Minority Over-sampling Technique)
소수 클래스의 샘플들을 이용하여 인접한 샘플들 사이에 새로운 샘플을 합성하여 데이터 수를 늘리는 기법
- 장점: 데이터 분포를 더 다양하게 만들어 단순 오버샘플링보다 일반화 성능을 향상
- 단점: 새로운 데이터를 합성하기 때문에, 소수 클래스의 경계선에서 잘못된 샘플이 생성될 수 있음
from imblearn.over_sampling import SMOTE
smote = SMOTE()
s_x_train, s_y_train = smote.fit_resample(x_train, y_train)
반응형