about bootstrapping

Written on July 13, 2017

어떤 데이터의 평균을 구하는 문제를 생각해 보자. 보통 이런 문제의 목적은 그 데이터를 생산한 대상이 앞으로 생산할 데이터가 무엇일지 예상하는 것이다. 예를 들면 지구의 평균 온도는 무엇인가와 같은 질문에 답을 하기 위해서는 몇년간의 데이터가 필요할것이다. 하지만, 여름철에만 측정한 온도만을 이용한다면, 지구의 평균온도를 정확히 추정할 수 없을 것이다. 그러므로 상황에 따른 데이터가용성의 변화에 대해서 고려할 필요가 있다.

측정한 데이터가 무수히 많다면 다음 식을 이용해 간단히 평균치를 추정할 수 있다.

여기서 전체 데이터셋을 절반으로 나누어서 부분 데이터셋들의 평균을 구해보면, 부분 데이터셋들은 서로 비슷한 값을 가지게 된다. 반면, 데이터의 양이 충분하지 않다면 각 부분 데이터셋들의 평균은 크게 달라진다는 것을 아래와 같이 확인할 수 있다.

import numpy as np
np.std([np.random.rand(10000000).mean() for i in range(3)])
Out[51]: 6.2204855598945252e-05

np.std([np.random.rand(1000).mean() for i in range(3)])
Out[53]: 0.0014510638198848356

데이터의 양이 충분하지 않을 때에는 이를 이용하여 추정한 결과의 신뢰구간(confidence interval)를 계산할 필요가 있다. 보통, 수집한 데이터의 확률변수의 분포를 정확히 모르기 때문에 측정된 통계치의 신뢰도를 가늠할 방법이 없다. 이 때 bootstrapping을 사용한다. 측정된 n개의 데이터 중에서 중복을 허용하여 m개를 뽑고, 그들의 평균을 구하기를 여러 번 반복한다. 그럼 평균의 분포를 구할 수 있게 되고, 이로부터 95% 확률로 sample mean이 (a, b) 사이의 구간에 위치한다는 것을 보일 수 있을 것이다.

Bootstrapping in machine learning

“bootstrapping”은 ML에서도 사용되는데, 이는 랜덤 샘플링을 통해 training data의 양을 늘리는 기법이다.

“bootstrapping”이 사용되는 경우로 데이터 셋(training set) 내의 데이터 분포가 고르지 않은 경우를 말할 수 있다. 예를 들자면, 사과와 오렌지를 구분하는 classifier를 트레이닝하는 경우를 생각해 보자. 만약 training set에 사과 이미지 1만장과 오렌지 이미지 100장이 포함되어 있다면, 항상 사과만 찍는 classifier도 99%의 트레이닝 정확도를 보일 수 있다. 이렇게 편향적인 데이터 분포에서는, 적은 학습 데이터를 가지는 클래스의 error는 무시되는 방향으로 학습이 되기 쉽다. 이 문제를 해결하기 위한 방법에는 크게 세 가지가 있을 수 있다. 첫 번째는 가중치를 줄 수 있는 알고리즘을 사용하는 것이고, 두 번째는 “bootstrapping”을 이용해서 오렌지의 데이터 수를 늘리는 것이며, 마지막은 사과 데이터의 수를 역으로 줄이는 것이다.

“bootstrapping”은 over-fitting을 줄이는 데에도 도움이 되며, 이를 “bagging”이라고 한다. Over-fitting을 줄이기 위해서는 데이터가 많은 게 제일 좋지만 그게 마땅치 않을 때가 많다. 그렇다고 model의 complexity를 줄이는 건 그건 역으로 정확도에 악영향을 줄 수 있다. 만약 계산 시간이 크게 문제가 되지 않는 경우라면, 여러 개의 모델을 써서 model ensemble(여러 모델을 통해 결과를 뽑고, 그 값들을 평균하거나 voting하여 최종 값을 산출하는 방법)을 통해 모델의 안정성을 크게 높일 수 있다. 각각의 모델이 over-fitting 되어있더라도, 그들을 평균내면 서로서로 상쇄되어 더 general한 모델이 되기 때문이다.

“bootstrapping”을 이용하면 주어진 데이터가 충분하지 않아도 model ensemble을 만들 수 있다. 똑같은 알고리즘을 통해 m번 학습시킨다고 하자. 이 때 매번 training data를 random sampling하면, 서로 다른 m개의 모델이 만들어 진다. 각각의 모델은 학습 과정에서 사용된 데이터에 over-fitting 되어 있겠지만, m개 전체를 사용하여 결정을 내리면 over-fitting 걱정이 크게 줄어들 것이다.

부트스트레핑은 또한, 분류문제에서 분류오류가 나는 데이터셋이 선택될 확률을 증가시킴으로써 모델의 학습정확도를 높이는데에도 활용될 수 있다.

이 포스트의 내용은 여기에서 발췌한 것입니다.