[ML] 클래스 불균형 해소

Woong·2023년 8월 30일
0

Python / Machine Learning

목록 보기
16/22
  • 데이터셋의 클래스 비율이 불균형할 경우, 다수 클래스 쪽으로 편향되기 쉬워짐

  • 소수 클래스에서의 예측 오류에 패널티를 부여하는 방법

    • scikit-learn class_weight=balanced 로 설정하여 조정
  • 소수 클래스의 샘플을 늘리거나, 다수 클래스 샘플을 줄이거나, 훈련 샘플을 인공적으로 생성

  • resample 함수를 통해 클래스 불균형 해소

    • upsample 또는 downsample 하여 밸런스 맞추기
X_imb = np.vstack((X[y == 0], X[y == 1][:40]))
y_imb = np.hstack((y[y == 0], y[y == 1][:40]))
from sklearn.utils import resample

print('샘플링하기 전 클래스 1의 샘플 개수:', X_imb[y_imb == 1].shape[0])

X_upsampled, y_upsampled = resample(X_imb[y_imb == 1],
                                    y_imb[y_imb == 1],
                                    replace=True,
                                    n_samples=X_imb[y_imb == 0].shape[0],
                                    random_state=1)

print('샘플링하기 후 클래스 1의 샘플 개수:', X_upsampled.shape[0])
X_bal = np.vstack((X[y == 0], X_upsampled))
y_bal = np.hstack((y[y == 0], y_upsampled))

0개의 댓글