training set에서 반복적으로 표본을 추출하고, 각 표본에 모델을 적합하여 적합한 모델들에 대해 정보를 얻는 것을 말한다.

예를 들어 각 표본 마다 적합 결과가 다를 것이므로, 적합 결과가 다른 정도를 조사할 때 사용할 수 있다.

 

Resampling에 주로 사용되는 방법으로는 교차검증(cross-validation)과 붓스트랩(bootstrap)이 있다.

 

cross-validation은 본질적으로는 validation error를 구하기 위해서이고, validation error를 구하는 이유는 이를 이용해 test error를 추정하는 방식으로 성능을 평가하거나 적절한 수준의 유연성을 선택하는데 사용. 즉, 모델 평가(model assessment), 모델 선택(model selection)

bootstrap은 파라미터의 추정 정확도 또는 모델의 결과로 나온 예측값의 정확도, 표준편차 등을 측정하는데 사용.

 

교차검증 (Cross-Validation)

보통은 이용할 수 있는 지정된 test set이 없기 때문에 training set을 이용하여 test error를 추정한다.

 

검증셋 기법 (Validation Set Approach)

관측치를 training set과 validation set으로 두 서브셋으로 나눈다.

모델적합은 training set에 대해 수행하고 적합된 모델은 validation set의 관측치들에 대한 반응변수 값을 예측하는데 사용.

결과의 validation error는 test error에 대한 추정치를 제공한다.

 

1. 어느 관측치들이 훈련셋과 검증셋에 포함되느냐에 따라 변동이 상당히 클 수 있다.(훈련셋/검증셋 분할의 임의성)

2. 통계적 방법들은 작은 수의 training set에 대해 성능이 나빠지는 경향이 있으므로 validation error가 전체 set을 대상으로 training한 모델의 test error를 과대추정하는 경향이 있을 수 있다.

 

LOOCV(Leave-One-Out Cross-Validation)

관측치에서 하나만 빼서 validation set으로 사용하는 방법. 즉 n-1개는 training set, 1개는 validation set으로 사용하는 방법이다. 최종적으로 LOOCV 추정치는 n개의 validation error의 평균으로 구한다.

 

관측치 \\({(x_1, y_1), ..., (x_n, y_n)}\\) 에서 \\((x_1, y_1)\\)만 제외해서 이걸 validation set으로 쓰고 나머지는 train 한 다음 \\(MSE_1 = (y_1 - \hat{y_1})^2\\)를 구한다.

같은 방식으로 \\(MSE_i\\)를 각각 구한 다음에

\\[CV_{(n)} = \frac{1}{n} \sum_{i=1}^n MSE_i\\]

 

1. LOOCV는 검증셋 기법에 비해 편향이 작다.

2. 훈련셋/검증셋 분할에 임의성이 없다. 항상 같은 결과를 내놓는다.

3. 단점은 모델을 n번 적합해야 하므로 아주 많은 계산시간이 필요할 수 있다.

 

k-fold 교차검증

검증셋 기법과 LOOCV의 중간 쯤에 있다고 보면 될 것 같다.

관측치들을 크기가 거의 같고 서로 겹치지 않는 k개의 그룹(fold)으로 분할하여

첫 번째 fold는 validation set, 나머지 적합 해서 \\(MSE_1\\) 구하고,

두 번째 fold를 validation set, 나머지 적합 해서 \\(MSE_2\\) 구하고... 반복한 다음

\\[CV_{(k)} = \frac{1}{k} \sum_{i=1}^n MSE_i\\]

 

1. 장점은 계산량이다. k는 보통 k=5 또는 k=10을 사용하기 때문에 LOOCV의 n번 적합에 비해 계산량이 적다.

2. 계산량이 작으면서도 검증셋 기법에서 얻어지는 검정오차 추정치의 변동보다 훨씬 낮다.

 

Cross-Validation은 왜 하나?

test MSE의 실질적인 추정치는 오차로 인해 정확히 맞추지 못하더라도 Flexibility(모델 복잡도)<> MSE 곡선에서 최소값의 위치는 validation MSE와 test MSE가 대체로 비슷하게 나타난다. 그래서 어느정도로 모델이 복잡해야 test error가 최소가 될 것인가?를 결정할때, 즉, 모델의 복잡도를 결정할 때 사용할 수 있다.

 

편향-분산 절충

k값이 극단적으로 크면, 즉 k = n이면 LOOCV이다. 

k값이 클 수록 편향이 감소하므로, LOOCV가 편향은 더 낮다.

그러나 분산은 k값이 클 수록 증가하게 된다. 각 모델의 training set 사이에 겹치는 부분이 있다면 적합된 모델의 결과가 서로 높은 양의 상관성을 지니기 때문이다. 상관성이 높은 값들의 평균은 상관성이 낮은 값들의 평균보다 분산이 크기 때문에 k값이 클 수록 분산이 증가한다.

k = 5 또는 k = 10을 사용하는 이유도 편향-분산 절충에서 이 정도 값을 선택하면 괜찮은 test error 추정치를 얻을 수 있다고 알려져 있기 때문이다.

 

붓스트랩 (Bootstrap)

bootstrap은 파라미터의 추정 정확도 또는 주어진 학습 방법의 정확도를 측정하는데 사용한다고 했다.

모평균을 추정하기 위해서 표본평균의 평균을 구하는 과정을 생각해보면,

모집단에서 표본들을 뽑아서 표본평균을 구하고, 이를 반복해서 표본평균을 여러개 만든 다음 표본평균의 평균을 구하고 이를 모평균에 대한 추정값으로 사용한다.

표본평균의 평균과 모평균이 얼마나 다를 것인가 하는 것은 표본평균들의 표준편차를 구한다. 이는 즉 모집단의 랜덤 표본에 대해 모평균과 표본평균의 평균은 대략 표본평균의 표준편차만큼 다를 것이라고 예상할 수 있다.

 

그러나 실세계에서는 원래의 모집단으로 부터 표본을 생성할 수 없다.

이렇게 그때그때 모집단으로부터 새로운 표본을 뽑아서 표본평균을 구하는 것이 불가능하니까, 대신 원래의 데이터셋으로부터 관측치를 반복적으로 추출하여 데이터셋을 얻는 방법이 Bootstrap이다.

n개의 관측치가 있다면, 여기서 n번 랜덤하게 복원추출하여 붓스트랩 데이터셋 \\(Z^{*i}\\)를 얻고, 여기서 파라미터 \\(\hat{\alpha}^{*i}\\)(위의 예라면 표본평균)을 추정한다.