들어가며
지난 글에서는 최종적으로 해쉬를 이용해서 테스트 세트를 추출하는 방법을 알아보았습니다. 훈련이 잘 진행되기 위해서는 샘플링(추출)된 데이터의 분포가 기존의 데이터 분포와 유사해야 합니다. 이를 위해 계층적 샘플링을 사용할 수 있습니다.
계층이란?
계층은 전체모수를 동질의 그룹으로 나누는 기준입니다.
계층적 샘플링이 필요한 이유?
모델을 학습시키거나 테스트를 할 때 사용되는 데이터가 편향적으로 전체 모수에서 추출된 경우 학습의 일반화가 제대로 진행되지 않기 때문에 전체 모수를 계층에 따라 나누고 추출된 데이터가 각 계층을 대표하도록 하여 편향을 방지하기 위해서입니다.
예시
기존의 설루션을 담당하는 전문가가 주택 중간 가격은 중간 수입과의 관계가 중요하다고 합니다. 중간수입과의 관계에 대해서 잘 학습하기 위해서 중간 수입을 기준으로 계층적 샘플링을 진행하도록 하겠습니다.
https://colab.research.google.com/drive/1wWaPMCEb3ewf3CNKIeu262vQaCG36apw#scrollTo=8Fn0WVFPQ-2r
1. 카테고리수의 축소
계층 샘플링을 위해서는 각 계층에는 충분한 데이터가 있어야 합니다. 그러나 위 히스토그램을 보면 5 이상의 중간소득에 대한 데이터수는 상당히 적으므로 카테고리 수를 제한하여 각 카테고리의 데이터수를 증가시키도록 합시다.
2. StratifiedShuffleSampling을 이용한 계층적 샘플링
카테고리를 축소했으니 사이킷런 모듈을 통해서 계층적 샘플링을 진행할 수 있습니다.
랜덤 추출과 비교하면 확실히 StratifiedShuffleSplit은 계층을 잘 대표하면서 추출하고 있습니다.
'Machine Learning' 카테고리의 다른 글
머신러닝 프로젝트 - 4.1 데이터 정제(누락된 데이터 다루기) (0) | 2020.03.04 |
---|---|
머신러닝 프로젝트 - 3. 데이터 탐색(피어슨의 상관계수),시각화, 특성 조합 (2) | 2020.03.01 |
머신러닝 프로젝트 - 2. 테스트 세트 추출하기 (0) | 2020.02.29 |
머신러닝 프로젝트 - 1. 데이터 준비하기 (0) | 2020.02.28 |
머신러닝 프로젝트 개발 과정 - 0. 문제 정의 (0) | 2020.02.18 |