[5장]ISL with R : 재표본추출법(Resampling Method)
교차검증(Cross-Validation)
" [5장]ISL with R : 결정계수(R-Squared)"에서 설명한 것처럼 결정계수(R -Squared) 측정은 주어진 테스트 데이터에 대한 설명력만을 제공한다는 점, 모델의 과적합 문제를 판단하지 못한다는 한계를 갖고 있다. 따라서 모델의 성능을 측정하기 위해서는 추가적인 도구가 필요한데, 그 방법이 재표본추출 방법(Resampling Method)이다. 대표적인 재표본추출 방법으로 교차검증(Cross-Validation)과 부스트랩(Bootstrap)이 있다.
k-Fold Cross-Validation
재표본 추출 방법이 결정계수(R -Squared) 측정과 구분되는 가장 큰 특징은 교차 검증(Cross-Validation) 이라는 점이다. 데이터 셋을 교차로 훈련 데이터로 쓰는 과정에서 여러 개의 모델이(모델링 방법은 동일!) 만들어지고 남은 데이터로 성능 검증이 이루어지는 컨셉이다. k-Fold Cross-Validation은 표본군을 k 개로 나눠서 교차 검증을 하는 방법이다.
1 ~ 6 까지의 데이터 묶음으로 회귀모델 적용의 적정성을 확인하기 위해 k=2 인 k-Fild Cross-Validation을 한다고 가정하자. 처음 1회차에는 1~ 3까지 데이터를 훈련 데이터(1~ 3까지 데이터로 모델을 생성)로 사용하고, 4~ 6을 테스트 데이터로 사용한다.(4~ 6으로 모델 성능을 테스트) 다음 2회차에는 반대로 4~6을 훈련 데이터로 사용하고 1~3을 테스트 데이터로 사용한다. 이 때 1회차와 2회차에 생성된 회귀모델의 회귀계수는 당연히 다를 것이다.(훈련 데이터가 다르기 때문에)
1회차 때 1~ 3까지 데이터 세트로 모델을 만들고, 4~ 6까지 데이터로 테스트를 수행하면 아래 식과 같은 1회차 MSE(Mean Squared Error)를 구할 수 있다.
마찬가지로 2회차 때 4~ 6까지 데이터 세트로 모델을 만들고, 1~ 3까지 데이터로 테스트를 수행하면 2회차 MSE도 구할 수 있다. 이렇게 구한 MSE들의 평균을 Cross-Validation 값이라고 하고 식으로 나타내면 아래와 같다.
Leave-One-Out Cross-Validation (LOOCV)
LOOCV는 테스트 데이터는 하나의 샘플이 되고, 나머지 모든 데이터를 훈련 데이터로 사용한다. 전체 데이터에서 하나의 테스트 데이터만 제외하고 다른 모든 데이터를 훈련 데이터로 사용해서 모델을 만든 뒤 테스트 데이터로 모델의 성능을 검증한다. 주어진 모든 데이터를 한 번씩 테스트 데이터로 지정하며 총 n 개의 모델이 만들어서 검증을 한다.
LOOCV에서의 CV 값을 계산하는 식도 위의 식 2와 같다. 다만, k-Fold 교차검증에 비해서 n의 값이 훨씬 클 것이다. 비선형 모델에 대한 검증이 아닌 경우 Hat Matrix 성질을 이용해서 아래 식3과 같이 간단하게 CV 값을 구할 수도 있다.
부스트랩(Bootstrap)
부스트랩도 k-Fold Cross-Validation, LOOCV과 비교하면, 데이터 추출 방법이 다른 것이지 교차 검증이라는 컨셉은 동일하다. 부스트랩은 특히 데이터를 복원 추출한다는 특징이 있다. [(1,2),(3,4),(5,6),(7,8),(9,10)] 5개의 데이터 셋을 이용해서 부스트랩을 통해 모델을 검증한다고 가정하자. 부스트랩은 주어진 데이터셋과 동일한 5개를 임의로 복원 추출한다. 복원 추출이기 때문에 (1,2),(1,2),(5,6),(5,6),(9,10)이 뽑힐 수도 있고, (5,6),(5,6),(5,6),(5,6),(9,10)이 뽑힐 수도 있다. 이렇게 추출된 데이터 셋이 훈련 데이터가 되고, 뽑히지 않은 데이터가 테스트 데이터가 된다. (1,2),(1,2),(5,6),(5,6),(9,10)이 뽑혔다면, (3,4), (7,8)이 테스트 데이터가 되고, (5,6),(5,6),(5,6),(5,6),(9,10)이 뽑혔다면 (1,2),(3,4),(7,8)이 테스트 데이터가 되는 방식이다.
부스트랩은 위와 같은 복원 추출을 통한 모델 생성 및 검증을 1,000 번, 2,000 번 씩 무수히 많이 수행한다. 부스트랩을 n 번 반복한다면, 위 식 2과 같은 일반화 된 식을 통해서 CV 값을 구할 수 있다.