Bootstrap

김당찬·2022년 4월 3일
0

Statistical Learning

목록 보기
9/14

Bootstrap Methods

여기서 설명하고자 하는 Bootstrap 방법은 모델의 metric, 정확도(accuracy)를 측정하는 과정에서의 bootstrap을 다룬다. Cross-validation과 마찬가지로 bootstrap은 (conditional) test error ErrT\text{Err}_\mathcal T 를 추정하기 위해 사용되지만, 일반적으로 기대예측오차 Err\text {Err} 만을 잘 추정해낸다.

정의

크기가 NN인 Training set이 Z=(z1,,zN)\mathbf Z=(z_1,\ldots,z_N) 와 같이 주어졌다고 하고, 이때 각 데이터는 zi=(xi,yi)z_i=(x_i,y_i) 로 구성되었다고 하자. Bootstrap은 이러한 training data에서 무작위로 복원추출을 진행하는 것인데, 추출한 sample의 크기가 원래 training set의 크기 NN과 동일할 때까지 추출한다. 이 과정을 BB번 진행하면 BB개의 bootstrap dataset이 생성되고, 이렇게 생성된 BB개의 데이터셋에 대해 모델의 성능을 측정하는 것을 bootstrap 과정이라고 한다.

Training set Z\mathbf Z에 대해 어떤 정확도 지표 S(Z)S(\mathbf Z)를 측정하는 상황이라고 하자. 즉, 우리가 관심있는 대상(qunatity of interest)은 S(Z)S(\mathbf Z)이고, 이에 대한 통계적 정확도를 측정해야 한다. 이를 위해 BB번의 bootstrap을 실행하여 데이터셋 Z1,,ZBZ^1,\ldots,Z^B 각각에 대해 SS값을 계산하여, 이들을 S(Z1),,S(ZB)S(Z^1),\ldots,S(Z^B) 라고 두자. 그러면 이로부터 원래 S(Z)S(\mathbf Z)의 sample distribution를 다음과 같이 얻을 수 있다.

Sˉ=bS(Zb)B,Var^=1B1b=1B(S(Zb)Sˉ)2\bar S=\frac{\sum_b S(Z^b)}{B}, \widehat{\text{Var}}={1\over B-1}\sum_{b=1}^B(S(Z^b)-\bar S)^2

Bootstrap prediction error

이번에는 앞서 설명한 bootstrap 방법을 이용해 예측오차를 추정하는 방법에 대해 생각해보자. 먼저, 각 bootstrap 데이터셋(b=1,,Bb=1,\ldots,B)에 대해 모델을 추정하는 방법을 생각하자(f^b\hat f^b). 그러면 이를 이용해 손실함수의 표본평균으로 예측오차의 추정량을 다음과 같이 정의할 수 있다.

Err^boot=1Bb=1B1Ni=1NL(yi,f^b(xi))\widehat{\text{Err}}_{boot}={1\over B}\sum_{b=1}^B{1\over N}\sum_{i=1}^N L(y_i,\hat f^b(x_i))

그러나, 이는 올바른 추정량이 될 수 없다. 손실함수를 계산하는데 쓰이는 데이터, 즉 test sample의 역할을 하는 데이터가 각 zi=(xi,yi)z_i=(x_i,y_i) 로 원래 Training set Z\mathbf Z인 반면 훈련에 쓰인 데이터는 Z\mathbf Z에서 추출한 bootstrap set들이기 때문이다. 즉, 훈련과 테스트 데이터의 성격이 매우 유사하여 test error의 추정량으로서의 의미가 없어진다. 만일 위 추정량을 이용하게 되면 예측오차가 비현실적으로 좋게 추정되고, 그렇기 때문에 cross-validation의 경우 training-test data가 중첩되지 않도록 하는 것이다.

Bootstrap error의 개선

Err^boot\widehat{\text{Err}}_{boot}의 성능을 개선하기 위해, 우선 bootstrap이 예측오차 추정에 주는 영향을 간단한 예를 통해 살펴보도록 하자.

클래스 {0,1}\{0,1\} 각각 NN개의 데이터가 있는 분류 문제에 1-Nearest Neighbor 분류기를 이용한다고 하자. 그러면 0-1 loss를 이용할 때 원 데이터셋의 true error(rate)는 0.5가 된다. 하지만 bootstrap을 이용하게 되는 경우 Err^boot\widehat{\text{Err}}_{boot}은 true error보다 낮아지게 된다. 만일 jj번째 관측값이 kk번째 bootstrap sample에 포함되지 않으면

Err^boot=1Ni=1N1Bb=1BL(yi,f^b(xi))\widehat{\text{Err}}_{boot}={1\over N}\sum_{i=1}^N{1\over B}\sum_{b=1}^B L(y_i,\hat f^b(x_i))

위 식에서 i=j,b=ki=j, b=k인 항의 값이 00이 되므로 true error보다 낮아지게 된다. 이때 낮아지는 정도는 ii번째 관측값이 bb번째 bootstrap sample에 속하지 않을 확률, 즉

P{observation ibootstrap sample b}=1[1(11N)N]e1=0.368\begin{aligned} P\{\text{observation }i\notin \text{bootstrap sample } b\} &=1-[1-(1-{1\over N})^N]\\ &\approx e^{-1} = 0.368 \end{aligned}

에 비례한다. 즉, Err^boot\widehat{\text{Err}}_{boot}의 기댓값은 대략 0.5×0.368=0.1840.5\times0.368 = 0.184 가 되고, 실제 true error 0.5에 비해 많이 낮은 수치이다.

즉, 위 예시에서 문제가 되었던 것은 bootstrap이 특정 관측값을 포함하지 않는 경우이고, 이를 해결하기 위해 LOOCV와 유사한 방법을 사용해야 한다. 각각의 관측값 ziz_i에 대해 ziz_i를 포함하지 않는 bootstrap sample만을 다루자. 즉, ziz_i를 포함하지 않는 bootstrap sample들의 인덱스 집합을 CiC^{-i}로 두고, 이때 샘플의 개수를 Ci|C^{-i}|로 쓰자. 이를 이용해 다음과 같이 예측오차에 대한 Leave-one-out bootstrap(LOOB) 추정치를 정의할 수 있다.

Err^(1)=1Ni=1N1CibCiL(yi,f^b(xi))\widehat{\text{Err}}^{(1)}={1\over N}\sum_{i=1}^N{1\over|C^{-i}|}\sum_{b\in C^{-i}}L(y_i,\hat f^b(x_i))

이때 주의해야 할 것은, 모든 bootstrap sample이 어떤 관측값 ziz_i를 모두 포함하면 Ci=0|C^{-i}|=0이 되므로 모든 관측값에 대해 Ci>0|C^{-i}|>0이 되도록 큰 BB값을 설정해야 한다는 것이다. 또한, 앞서 살펴본 특정 관측값이 어떤 bootstrap sample에 포함될 확률 0.632를 이용해 ".632 estimator"를 다음과 같이 정의할 수 있다(자세한 유도과정은 복잡하므로 생략했다).

Err^.632=0.368err+0.632Err^(1)\widehat{\text{Err}}^{.632}=0.368\cdot\overline{\text{err}}+0.632\cdot\widehat{\text{Err}}^{(1)}

앞선 0-1 class 분류 문제에 이를 적용하면, err=0\overline{\text{err}}=0, Err^(1)=0.5\widehat{\text{Err}}^{(1)}=0.5 이므로 .632 estimator는 0.316의 값을 갖는다. 그러나, 이 역시도 true error 0.5에 못미치는 bias을 갖는다. 이를 해결하기 위해, 과적합이 일어나는 정도를 수치화하여 이를 토대로 추정치를 개선할 수 있다.

.632+ estimator

우선, no-information error rate γ\gamma 를 정의하자. 이는 input data와 클래스 레이블이 독립이라고 가정할 때 예측 규칙의 error rate로 정의된다. 하지만 실제 데이터는 독립성을 보장할 수 없으므로, 우리는 이에 대한 추정치를 다음과 같이 정의한다.

γ^=1N2i=1Ni=1NL(yi,f^(xi))\hat\gamma = {1\over N^2}\sum_{i=1}^N\sum_{i'=1}^NL(y_i,\hat f(x_{i'}))

즉, 각 예측변수 xix_i들과 반응변수 yiy_i들의 모든 가능한 N2N^2 개의 조합에 대한 sample error rate를 추정치로 사용한다. 이를 이용하여 상대적 과적합율relative overfitting rate 을 다음과 같이 정의하는데, 이는 LOOB 추정치의 과적합이 상대적으로 얼만큼 발생했는지를 측정하는 변수이다.

R^=Err^(1)errγ^err\hat R=\frac{\widehat{\text{Err}}^{(1)}-\overline{\text{err}}}{\hat \gamma-\overline{\text{err}}}

위 값이 0이면 과적합이 일어나지 않음을 의미하고, 1이면 과적합의 정도가 no-information value γ^err\hat\gamma-\overline{\text{err}}와 일치함을 의미한다. 이를 바탕으로 다음과 같이 개선된 .632+ estimator을 얻을 수 있다.

Err^.632+=(1w^)err+w^Err^(1)where w^=0.63210.368R^\widehat{\text{Err}}^{.632+}=(1-\hat w)\cdot\overline{\text{err}}+\hat w\cdot\widehat{\text{Err}}^{(1)}\\ \text{where } \hat w=\frac{0.632}{1-0.368\hat R}

References

  • The Elements of Statistical Learning, 2e.
profile
블로그 이사했습니다 https://ddangchani.github.io

0개의 댓글