Machine Learning

머신러닝 프로젝트 - 계층적 샘플링(stratified sampling)

BEOKS 2020. 2. 29. 19:40

들어가며

지난 글에서는 최종적으로 해쉬를 이용해서 테스트 세트를 추출하는 방법을 알아보았습니다. 훈련이 잘 진행되기 위해서는 샘플링(추출)된 데이터의 분포가 기존의 데이터 분포와 유사해야 합니다. 이를 위해 계층적 샘플링을 사용할 수 있습니다.

 

계층이란?

계층은 전체모수를 동질의 그룹으로 나누는 기준입니다.

계층적 샘플링이 필요한 이유?

모델을 학습시키거나 테스트를 할 때 사용되는 데이터가 편향적으로 전체 모수에서 추출된 경우 학습의 일반화가 제대로 진행되지 않기 때문에 전체 모수를 계층에 따라 나누고 추출된 데이터가 각 계층을 대표하도록 하여 편향을 방지하기 위해서입니다.

예시

기존의 설루션을 담당하는 전문가가 주택 중간 가격은 중간 수입과의 관계가 중요하다고 합니다. 중간수입과의 관계에 대해서 잘 학습하기 위해서 중간 수입을 기준으로 계층적 샘플링을 진행하도록 하겠습니다.

https://colab.research.google.com/drive/1wWaPMCEb3ewf3CNKIeu262vQaCG36apw#scrollTo=8Fn0WVFPQ-2r

 

Google Colaboratory

 

colab.research.google.com

1. 카테고리수의 축소

계층 샘플링을 위해서는 각 계층에는 충분한 데이터가 있어야 합니다. 그러나 위 히스토그램을 보면 5 이상의 중간소득에 대한 데이터수는 상당히 적으므로 카테고리 수를 제한하여 각 카테고리의 데이터수를 증가시키도록 합시다.

https://colab.research.google.com/drive/1wWaPMCEb3ewf3CNKIeu262vQaCG36apw#scrollTo=k5h6-de6R4gj&line=3&uniqifier=1

 

Google Colaboratory

 

colab.research.google.com

2. StratifiedShuffleSampling을 이용한 계층적 샘플링

카테고리를 축소했으니 사이킷런 모듈을 통해서 계층적 샘플링을 진행할 수 있습니다.

랜덤 추출과 비교하면 확실히 StratifiedShuffleSplit은 계층을 잘 대표하면서 추출하고 있습니다.