[python] scikit-learn을 이용한 언더샘플링

머신 러닝 모델을 구축할 때, 불균형한 데이터셋을 다루는 것은 일반적인 문제입니다. 특히, 대부분의 예측 변수가 하나의 클래스에 치우쳐 있는 경우에 문제가 발생할 수 있습니다. 이러한 문제를 해결하기 위해 언더샘플링이라는 기법이 사용됩니다.

언더샘플링은 다수 클래스의 데이터 포인트를 제거하여 데이터셋의 균형을 맞추는 방법입니다. 이를 통해 모델이 전체 데이터셋을 더 잘 학습할 수 있습니다. scikit-learn은 이러한 언더샘플링을 수행하는 여러 가지 방법을 제공합니다.

1. RandomUnderSampler 사용하기

scikit-learn의 imbalanced-learn 패키지에는 RandomUnderSampler라는 클래스가 포함되어 있습니다. 이 클래스는 랜덤하게 다수 클래스의 데이터 포인트를 제거하여 균형을 맞춥니다.

아래는 RandomUnderSampler를 사용하여 언더샘플링하는 예제입니다:

from imblearn.under_sampling import RandomUnderSampler

rus = RandomUnderSampler(random_state=0)
X_resampled, y_resampled = rus.fit_resample(X, y)

위의 예제에서 X는 예측 변수의 배열이고 y는 대상 변수의 배열입니다. fit_resample 메서드는 언더샘플링을 수행하고, 새로운 언더샘플링된 데이터셋 X_resampledy_resampled를 반환합니다.

또 다른 언더샘플링의 방법은 TomekLinks를 사용하는 것입니다. TomekLinks는 다수 클래스와 소수 클래스 사이의 경계에 위치한 데이터 포인트를 제거하여 균형을 맞춥니다.

아래는 TomekLinks를 사용하여 언더샘플링하는 예제입니다:

from imblearn.under_sampling import TomekLinks

tl = TomekLinks()
X_resampled, y_resampled = tl.fit_resample(X, y)

위의 예제에서도 fit_resample 메서드를 사용하여 언더샘플링을 수행하고 새로운 데이터셋을 반환합니다.

결론

언더샘플링은 머신 러닝 모델에서 불균형한 데이터셋을 처리하는 강력한 기술입니다. scikit-learn의 imbalanced-learn 패키지는 RandomUnderSampler, TomekLinks 등 다양한 언더샘플링 방법을 제공하여 이를 손쉽게 수행할 수 있습니다. 이러한 기법을 사용하여 모델의 성능을 향상시킬 수 있습니다.


참고문서: