[모각코]2021-08-14

배현수·2021년 8월 14일

오늘할 일 : imbalance를 잡기 위한 방법과 대표적인 SMOTE에 대해 알아보고 적용해보기

1. Imbalance를 잡기 위한 방법

  • over sampling : 소수의 데이터를 복제하여 다수의 데이터와의 비율을 맞춤(오버피팅이 될 수 있음)
  • under sampling : 다수의 데이터를 일부 삭제하여 소수의 데이터와의 비율을 맞춤(중요한 데이터의 손실을 가져올 수 있음)
  • 가장 많이 쓰는 방식으로는 over sampling의 한 종류인 SMOTE가 있음

2. SMOTE

(1) smote

  • 소개
    -부트스트래핑이나 KNN(최근접이웃) 모델 기법을 활용한다.
    - 소수 데이터 중 특정 벡터 (샘플)와 가장 가까운 이웃 사이의 차이를 계산한다.
    - 이 차이에 0과 1사이의 난수를 곱한다.
    - 타겟 벡터에 추가한다.
    - 두 개의 특정 기능 사이의 선분을 따라 임의의 점을 선택할 수 있다.
  • 활용
/* 데이터 스케일링*/
from sklearn.preprocessing import MinMaxScaler

scaler = MinMaxScaler(feature_range=(0, 1))
scaler.fit_transform(X_train)
X_train = scaler.fit_transform(X_train)

/* 데이터복제 */
from sklearn.datasets import make_classification
from sklearn.decomposition import PCA
from imblearn.over_sampling import SMOTE

# 모델설정
sm = SMOTE(ratio='auto', kind='regular')

# train데이터를 넣어 복제함
X_resampled, y_resampled = sm.fit_sample(X_train,list(y_train))

print('After OverSampling, the shape of train_X: {}'.format(X_resampled.shape))
print('After OverSampling, the shape of train_y: {} \n'.format(X_resampled.shape))

print("After OverSampling, counts of label '1': {}".format(sum(y_resampled==1)))
print("After OverSampling, counts of label '0': {}".format(sum(y_resampled==0)))
profile
HUFS_BME

0개의 댓글