R의 k-fold 교차 검증(단계별)


데이터 세트에 대한 모델의 성능을 평가하려면 모델의 예측이 관찰된 데이터와 얼마나 잘 일치하는지 측정해야 합니다.

이를 수행하기 위해 일반적으로 사용되는 방법은 다음 접근 방식을 사용하는 k-겹 교차 검증 으로 알려져 있습니다.

1. 데이터 세트를 대략 동일한 크기의 k개 그룹, 즉 “접기”로 무작위로 나눕니다.

2. 접힌 부분 중 하나를 구속 세트로 선택합니다. 템플릿을 나머지 k-1 접기로 조정합니다. 인장된 플라이의 관찰에 대한 MSE 테스트를 계산합니다.

3. 매번 다른 세트를 제외 세트로 사용하여 이 프로세스를 k 번 반복합니다.

4. k개의 테스트 MSE의 평균으로 전체 테스트 MSE를 계산합니다.

R에서 k-겹 교차 검증을 수행하는 가장 쉬운 방법은 R의 캐럿 라이브러리에서 trainControl() 함수를 사용하는 것입니다.

이 튜토리얼에서는 이 함수를 사용하여 R의 특정 모델에 대해 k-겹 교차 검증을 수행하는 방법에 대한 간단한 예를 제공합니다.

예: R의 K-겹 교차 검증

R에 다음과 같은 데이터 세트가 있다고 가정합니다.

 #create data frame
df <- data.frame(y=c(6, 8, 12, 14, 14, 15, 17, 22, 24, 23),
                 x1=c(2, 5, 4, 3, 4, 6, 7, 5, 8, 9),
                 x2=c(14, 12, 12, 13, 7, 8, 7, 4, 6, 5))

#view data frame
df

y x1 x2
6 2 14
8 5 12
12 4 12
14 3 13
14 4 7
15 6 8
17 7 7
22 5 4
24 8 6
23 9 5

다음 코드는 다중 선형 회귀 모델을 R의 이 데이터 세트에 맞추고 k = 5번으로 k겹 교차 검증을 수행하여 모델 성능을 평가하는 방법을 보여줍니다.

 library (caret)

#specify the cross-validation method
ctrl <- trainControl(method = " cv ", number = 5)

#fit a regression model and use k-fold CV to evaluate performance
model <- train(y ~ x1 + x2, data = df, method = " lm ", trControl = ctrl)

#view summary of k-fold CV               
print(model)

Linear Regression 

10 samples
 2 predictors

No pre-processing
Resampling: Cross-Validated (5 fold) 
Summary of sample sizes: 8, 8, 8, 8, 8 
Resampling results:

  RMSE Rsquared MAE     
  3.018979 1 2.882348

Tuning parameter 'intercept' was held constant at a value of TRUE

결과를 해석하는 방법은 다음과 같습니다.

  • 전처리가 수행되지 않았습니다. 즉, 모델을 피팅하기 전에 어떤 방식으로든 데이터를 확장 하지 않았습니다.
  • 모델을 평가하는 데 사용한 리샘플링 방법은 5겹 교차 검증이었습니다.
  • 각 훈련 세트의 표본 크기는 8이었습니다.
  • RMSE: 제곱평균제곱근 오류. 이는 모델의 예측과 실제 관찰 간의 평균 차이를 측정합니다. RMSE가 낮을수록 모델이 실제 관측치를 더 정확하게 예측할 수 있습니다.
  • Rsquared: 모델에 의한 예측과 실제 관찰 간의 상관 관계를 측정한 것입니다. R-제곱이 높을수록 모델이 실제 관측치를 더 정확하게 예측할 수 있습니다.
  • MAE: 평균 절대 오차입니다. 이는 모델에 의한 예측과 실제 관찰 간의 평균 절대 차이입니다. MAE가 낮을수록 모델이 실제 관측치를 더 정확하게 예측할 수 있습니다.

결과에 제공된 세 가지 측정값(RMSE, R-제곱 및 MAE) 각각은 게시되지 않은 데이터에 대한 모델 성능에 대한 아이디어를 제공합니다.

실제로 우리는 일반적으로 여러 다른 모델을 적합하고 여기에 제시된 결과에서 제공되는 세 가지 측정항목을 비교하여 어떤 모델이 가장 낮은 테스트 오류율을 생성하므로 사용하기에 가장 좋은 모델인지 결정합니다.

다음 코드를 사용하여 최종 모델 적합성을 검사할 수 있습니다.

 #view final model
model$finalModel

Call:
lm(formula = .outcome ~ ., data = dat)

Coefficients:
(Intercept) x1 x2  
    21.2672 0.7803 -1.1253  

최종 모델은 다음과 같습니다.

y = 21.2672 + 0.7803*(x 1 ) – 1.12538(x 2 )

다음 코드를 사용하여 각 접기에 대한 모델 예측을 표시할 수 있습니다.

 #view predictions for each fold
model$resample

      RMSE Rsquared MAE Resample
1 4.808773 1 3.544494 Fold1
2 3.464675 1 3.366812 Fold2
3 6.281255 1 6.280702 Fold3
4 3.759222 1 3.573883 Fold4
5 1.741127 1 1.679767 Fold5

이 예에서는 k=5 접기를 사용하도록 선택했지만 원하는 만큼의 접기를 선택할 수 있습니다. 실제로 우리는 일반적으로 5~10겹 사이를 선택합니다. 이는 신뢰할 수 있는 테스트 오류율을 생성하는 최적의 플라이 수임이 입증되었기 때문입니다.

의견을 추가하다

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다