더북(TheBook)

샘플을 추출한 후 클래스 0인 원본 샘플과 업샘플링된 클래스 1을 연결하여 균형 잡힌 데이터셋을 얻을 수 있습니다.

>>> X_bal = np.vstack((X[y==0], X_upsampled))
>>> y_bal = np.hstack((y[y==0], y_upsampled))

그 결과 다수 클래스를 예측하는 규칙은 50% 정확도를 달성합니다.

>>> y_pred = np.zeros(y_bal.shape[0])
>>> np.mean(y_pred == y_bal) * 100
50.0

비슷하게 데이터셋에서 다수 클래스의 훈련 샘플을 삭제하여 다운샘플링(downsampling)할 수 있습니다. resample 함수를 사용하여 다운샘플링을 수행하려면 이전 예에서 클래스 레이블 1과 0을 서로 바꾸면 됩니다.

Note ≡ 클래스 불균형 문제를 해결하기 위해 새로운 훈련 데이터 생성하기


불균형한 클래스를 다루는 또 다른 기법은 인공적인 훈련 샘플을 생성하는 것입니다. 이 방법은 책 범위를 벗어납니다. 인공적인 훈련 샘플 생성에 가장 널리 사용되는 알고리즘은 아마도 SMOTE(Synthetic Minority Over-sampling TEchnique)입니다. 나이트시 차울라(Nitesh Chawla) 등이 쓴 원본 연구 논문에서 이 기법에 대한 자세한 내용을 배울 수 있습니다.22 또 불균형한 데이터셋을 위한 파이썬 라이브러리인 imbalanced-learn을 확인해 보세요. 여기에는 SMOTE 알고리즘이 구현되어 있습니다. imbalanced-learn에 관한 자세한 내용은 다음 주소를 참고하세요

https://github.com/scikit-learn-contrib/imbalanced-learn

 

 


22 SMOTE: Synthetic Minority Over-sampling Technique, Journal of Artificial Intelligence Research, 16: 321-357, 2002

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.