업 샘플링, 다운 샘플링
업 샘플링은 해당 분류에 속하는 데이터가 적은 쪽을 표본으로 더 많이 추출하는 방법이며, 다운 샘플링은 데이터가 많은 쪽을 적게 추출하는 방법이다.
예를 들어, 총 6개의 데이터가 있고 각각의 분류가 ‘0, 0, 0, 0, 1, 1’이라고 하자. 이 데이터를 그대로 쓰면 0을 예측할 확률이 큰 모델이 만들어지므로, 그대로 쓰지 않고 표본을 추출한다. 복원 추출 방식으로 분류 0과 1에서 각각 표본을 4개씩 뽑으면 ‘0, 0, 0, 0, 1, 1, 1, 1’이 되어 각 분류에 해당하는 데이터의 개수가 같아진다. 이것이 업 샘플링 방법이다. 반대로 다운 샘플링에서는 총 2개씩의 데이터를 0과 1에서 표본으로 뽑아 ‘0, 0, 1, 1’이 된다.
caret 패키지의 upSample( ), downSample( )이 이러한 표본 추출 방법을 지원한다.
caret::upSample : 업 샘플링을 수행한다. |
caret::upSample(
x, y # 데이터
)
반환 값은 업 샘플링된 결과다. |
caret::downSample : 다운 샘플링을 수행한다. |
caret::downSample(
x, y # 데이터
)
반환 값은 다운 샘플링된 결과다. |
upSample( )과 downSample( )의 사용법은 유사하므로 여기서는 upSample( )의 예만 살펴보자. upSample( )은 인자로 설명 변수(X)와 예측 대상이 되는 분류(Y)를 인자로 받아 변환된 데이터를 결과로 출력한다.
다음은 BreastCancer 데이터를 대상으로 upSample( )을 수행한 예다.
> x <- upSample(subset(BreastCancer, select=-Class), BreastCancer$Class) > table(BreastCancer$Class) benign malignant 458 241 > table(x$Class) benign malignant 458 458
분할표(교차표)를 살펴보면 업 샘플링 이전에는 458:241의 비율이던 데이터가 458:458로 균형 잡히게 변한 것을 볼 수 있다. upSample( )은 이를 위해 단순히 적은 쪽에 해당하는 분류의 데이터를 중복하여 추출하는 방식을 사용한다. 이는 다음을 통해 확인할 수 있다.
> NROW(x) [1] 916 > NROW(unique(x)) [1] 691
x 내 행의 수는 916이지만 이들 중 상당수는 중복된 것이다.