머신러닝에서 입력 데이터가 많아지면 처리 속도가 현저히 떨어지게 된다. 이 때문에 머신러닝의 처리 속도를 빠르게 하기 위해서 대표되는 데이터로 최적화한 후, 이 데이터를 활용하여 모델을 학습할 필요가 있다.
머신러닝에서 데이터 샘플링은 데이터를 일부 정리해서 최적의 입력 데이터로 만드는 과정을 의미한다.
딥러닝의 경우 일반적으로 데이터 샘플링은 데이터셋을 학습,검증,테스트 데이터셋으로 나누는 것을 의미한다.
데이터 샘플링 방법
확률적 샘플링 : 통계에 기반한 방법
단숨 랜덤 샘플링 : 전체 데이터에서 무작위로 샘플을 추출하는 방법
Two-Stage Sampling : 전체 n개의 데이터를 m개의 하위 모집단으로 분리하는 방법
m개의 하위 모집단을 선택 --> m개의 하위 모집단 중에서 n개의 데이터를 단순 랜덤 샘플링
Stratified Sampling
모집단을 여러 개의 층으로 구분 --> 각 층에서 n개씩 랜덤하게 데이터를 추출하는 방법
Cluster Sampling : 모집단이 여러 개의 군집으로 구성되어 있는 경우
군집 중 하나 혹은 여러 개의 군집을 선정해서 선정된 군집의 전체 데이터를 사용하는 방법
ex) A대학교에서 학과와 학년을 정해서 해당 데이터를 모두 학습
Systematic Sampling : 1에서 n까지 모든 데이터에 번호를 매겨 일정 간격마다 하나씩 데이터 추출
일반적으로 시계열 데이터의 대표값을 샘플링하는데 주로 사용한다.
비확률적 샘플링 : 사람의 주관이 개입된 방법
Convenience Sampling : 데이터를 수집하기 좋은 시점이나 위치를 선정하여 샘플링
표본이 모집단에 비해 대표성이 떨어진다는 단점이 있다. 따라서 통계적 추론 (표본을 통한 일반화) 이 불가능하다.
Purpose Sampling
목적에 가장 적합한 대상으로 생각하는 대상을 선택하는 방법
목적에 가장 적합한 대상은 주관적으로 선택하기 때문에 이 또한 대표성이 떨어진다.
Quota Sampling
모집단을 세그먼트로 구분하여 각 세그먼트에 표본 수를 나타내는 쿼타를 할당하게 된다.
세그먼트 내에서는 주제와 관련된 특성이 비슷해야하며 세그먼트 사이에는 서로 다른 모집단을 나누어줘야 한다.
층별 샘플링과 방법은 유사하지만, 확률에 따라 선택하지 않고 주관적 판단에 의해 선택된다는 차이가 있다.
Multi-Label Data Sampling
일반적으로 데이터 샘플링을 위해서 Stratified Sampling을 많이 사용한다. 하지만 일반적인 Stratified Sampling은 Multi-Label 데이터의 특성을 고려하지 못한다.
Multi-label 데이터셋이라도 모든 클래스에 해당하는 데이터가 충분한 데이터셋에서는 Stratified Sampling을 사용하여 샘플링을 진행하여도 아무런 문제가 없다.
하지만 클래스의 수가 많아지고 데이터의 수가 충분하지 않다면 Tail Label 들이 존재하게 된다. Tail Label은 아래 그림과 같이 클래스에 포함된 데이터셋의 수로 정렬하였을 때 데이터가 매우 적은 레이블들을 의미한다.
일반적으로 클래스가 매우 많은 데이터셋에서는 대부분의 레이블이 이 Tail Label에 해당한다.
그렇다면, 이러한 데이터를 일반적인 Stratified Sampling을 을 통해 어떻게 될까?
아래의 그림은 Multi-label 데이터를 Stratified Sampling을 통해 학습, 테스트 데이터셋으로 샘플링했을 때 Tail Label의 데이터 분포를 나타낸다. 그림에서 보이는바와 같이 일부 클래스에서는 한 쪽으로 데이터가 몰리는 현상이 발생한다. 이는 실험에 있어 문제를 일으키지는 않는다.