과대적합 : 학습데이터(traing data)에는 정밀도가 높으나 시험데이터(test data)에는 정밀도가 현저하게 떨어지는 경우

 

=> 과대적합은 표본 수를 늘리거나,초모수(hyper parameter)를 조정 또는 규제화 강도를 높이는 것, 특성변수의 차원축 
      소, 통계적으로 유의하지 않는 특성변수를 제거하여 특성변수의 수 줄이기 등으로 해결함

 

과소적합: 학습데이터의 정밀도가 목표한 정밀도보다 현저하게 낮은 경우

 

=>  과소적합은 특성변수를 늘리거나 규제화를 약화시키기 혹은 다른 모형을 선택하여 해결하여야 함.

 

*validation set이 필요한 이유

train set으로 모델을 훈련하고, test set으로 모델을 검증할 경우 문제점

= > 고정된 test set으로 성능을 검증&수정하는 과정을 반복할 경우, 해당 모델은 test set에만 잘 작동하는 모델이 될 수 있음. test setoverfitting되어 새로운 데이터에는 알맞은 모델이 되지 못함.

이런 문제를 해결하기 위해 사용하는 것이 바로 Cross Validation이다.

 

 

   <holdout cross-validation>

모수추정: 데이터를 통해 모델 학습과정에서 모수추정하게 됨

초모수 선택 : 여러 개의 초모수 값을 순차적으로 학습데이터와 검증 데이터에 적용하여검증데이터의 성능예를 들어손실함수값 또는 정밀도이 학습데이터의 성능에 근접하게 하는 초모수를 선택.

(초모수 선택과정에서 validation set은 일종의 test data 역할을 하여 해당 초모수일 때의 모델의 성능을 validation set으로 점검함. 하지만 초모수 튜닝과정까지도 결국 적합한 모델을 찾는 과정임)

 

=> 모수와 초모수가 선택되면 해당 모델을 test data(unseen data)를 이용하여 성능을 점검함.

 

고정된 자료분할의 문제점 : 검증데이터가 잘 선택되면 좋은 결과를 보이고 잘못 선택되면 검증데이터의 성능이 나쁘게 나온다면 초모수의 선택이 옳은지 그른지를 판단할 수 없게 된다. , 최적의 초모수 값이 선택된 validation data에 의존함. 특히 자료의 크기가 작을 경우에는 이러한 현상이 두드러짐.

=> 이를 보완한 검증법 : k-fold cross- validation

 

 

<k-fold cross- validation>

  1. train data와 test data로 나눈 후, train data를 다시 k개의 fold로 나눈다.
  2. 첫 번째 자료분할에서 첫 (k-1)개의 foldtrain data로 간주하고 맨 마지막 foldvalidation data로 간주한다.
  3. (k-1)개의 fold로 구성된 train data를 이용하여, 초모수를 특정값으로 고정한 후 모형의 모수를 추정한다.
  4. 추정된 모형에 validation data을 적용하여 validation data의 성능( 예를 들어손실함수값 또는 정밀도)을 구하여
    $ E_1 $이라고 하자.
  5. 두 번째 foldvalidation data로 간주하고 나머지 foldtrain data로 간주하여 동일 방법으로 (이때 초모수 값은
    $ E_1 $
    일때와 같음) validation data의 성능을 구하여 $ E_2 $ 이라고 하자.
    validation data의 성능  $ E_1 $, $ E_2 $, ...., $ E_k $ 를 구한 후, 평균 $\frac{1}{k} \sum_{i=1}^{k} E_i$으로 고정된 초모수의 성능을 평가한다.(
    k-fold cross validation 동안 초모수의 값은 고정되어 있음)

장점: validation data를 어떤 것을 선택하느냐에 따라 큰 영향을 받지 않음. data수가 적을 때 k값을 증가시키면 더 많은 훈련 데이터가 반복에 사용되고 모델성능을 평균화하여 일반화 성능을 추정할 때 더 낮은 편향을 만들게 된다. k 값이 매우 높으면 교차검증의 시간이 오래걸리고 분산이 높은 추정을 만듦.(과대적합)

 

< stratified k-fold cross validation>

데이터가 불균형할 때 각 fold에서 클래스 비율이 전체 데이터에서의 클래스 비율로 유지되도록 하면서 k-fold cross validation을 실행하게 됨

 

 

 

 

(a) 높은 편향 ( train datavalidation data모두 정확도가 낮음) : 높은 편향은 underfitting을 의미함 => 특성변수를 늘리거나 규제화를 약화시키기 혹은 다른 모형을 선택하여 해결하여야 함.

(b) 높은 분산 : train datavalidation data 사이의 정확도 차이가 큼 : overfitting을 의미함

=> 표본 수를 늘리거나초모수(hyper parameter)를 조정 또는 규제화 강도를 높이는 것, 특성변수의 차원축소, 통계적으로 유의하지 않는 특성변수를 제거하여 특성변수의 수 줄이기 등으로 해결함.

(, train data의 노이즈가 많은 경우에는 표본수를 늘리는 것이 도움이 되지 못함)

 

*초모수 튜닝의 대표적인 방법 : grid search

grid search: 리스트로 저장된 여러 가지 하이퍼 파라미터값 전체를 조사하여 그 중 최적의 초모수를 구하는 방법

 

*k-fold cross validationtrain datak개의 fold로 나눈후 k번의 validation set을 사용함으로써 validation data set에는 덜 민감하도록 하였음 .하지만 test data에는 민감함. 즉 처음 datatrain datatest data로 나눌 때 선택되는 test data에 따라 모델의 성능이 판단될수 있음. 따라서 test data에도 fold를 이용한 cross-validation이 필요함을 알게 됨.

외부 루프와 내부루프의 이중 루프 구조를 통해 test data에도 fold를 이용한 cross-validation이 적용된 기술 :nested cross validation

 

 

< nested cross validation >

 

  1. 전체 데이터를 $ k_1 $분할하여 순차적으로 하나의 foldtest data로 사용하고 나머지를 train data로 사용함.
    => 
    외곽루프에  $ k_1 $개의 train test data set이 생성됨.
  2. 각각의 외곽루프마다 train data를 $ k_2 $분할하여 순차적으로 하나의 foldvalidation data로 사용하고 나머지를 train data로 사용함
    => 내부루프에 $ k_2 $개의 train-validation set이 생성됨.
  3. $ k_2 $내부루프를 이용하여 초모수를 fix하고 이를 validation data를 이용하여 성능평가하고 초모수를 바꾸어 가면서 이를 반복하여 최적의 초모수를 선택함.
  4. 이를 test data로 성능을 평가함
  5. 이러한 반복을 외곽루프로 $ k_1 $번 반복하여 test data의 성능의 척도가 $ k_1$개 구해짐.
  6. $ k_1 $개의 test data의 성능척도를 평균하여 최종성능을 구한다. 경쟁모형도 동일한 방법(nested cross validation)을 이용하여 성능을 구한 후 모형간 성능을 비교할 수있음. 

cf) 데이터가 충분히 크면 k-fold cross validation이 필요없음.

+ Recent posts