개발학습일지

[AI] 머신 러닝 데이터의 불균형 샘플링하는 방법 _ SMOTE를 활용한 오버샘플링 본문

AI/Machine Learning

[AI] 머신 러닝 데이터의 불균형 샘플링하는 방법 _ SMOTE를 활용한 오버샘플링

처카푸 2024. 4. 15. 15:52

SMOTE를 활용한 오버샘플링

시점 : 피처스케일링을 하기 전, X와 y 를 나누고 난 직후에 하는 것이 가장 바람직하다

샘플링에는 

- 언더 샘플링

- 오버샘플링 : 적은 데이터 세트를 증식하여 학습을 위한 충분한 데이터를 확보하는 방법

이 있다. 

일반적으로 언더샘플링보다 오버샘플링이 예측 성능상 더 유리한 경우가 많아 주로 사용된다.

 

1. y의 데이터의 불균형 정도를 확인한다

y.value_counts()
>>>
    class
    0    262
    1    130
    Name: count, dtype: int64
import seaborn as sb
sb.countplot(data=df, x='class')
plt.show()

y 데이터의 불균형 상태

2. 1 인 데이터가 적으므로, up sampling 기법으로 데이터를 늘려준다

- imblearn 라이브러리를 이용한다

- 데이터 불균형 문제를 해소 할 수 있다 

from imblearn.over_sampling import SMOTE
sm = SMOTE()
X.shape  # 업샘플링 하기 전 데이터
# (392, 8)
X, y = sm.fit_resample(X, y)
X.shape # 업샘플링 하고 난 후 데이터
# (524, 8)
y.value_counts()
>>>
    class
    0    262
    1    262
    Name: count, dtype: int64