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겹 사이를 선택합니다. 이는 신뢰할 수 있는 테스트 오류율을 생성하는 최적의 플라이 수임이 입증되었기 때문입니다.