상호작용 항 모델링 (2)
이번 연습에서는 이전 연습에서 적합한 상호작용 모델의 성능을, 주효과만 포함한 모델의 성능과 비교해 보겠습니다. 이 데이터셋은 작기 때문에, 교차 검증을 사용해 홀드아웃 데이터에 대한 예측을 모의 실험하겠습니다.
계산을 위해 dplyr 패키지를 사용하기 시작합니다.
mutate()(docs)는 tbl(데이터 프레임의 한 형태)에 새 열을 추가합니다.group_by()(docs)는 tbl에서 행을 그룹화하는 방법을 지정합니다.summarize()(docs)는 열의 요약 통계를 계산합니다.
또한 여러 열을 키-값 쌍으로 접는 tidyr의 pivot_longer() (docs)도 사용합니다. alcohol 데이터 프레임과 수식 fmla_add, fmla_interaction은 미리 불러와져 있습니다.
이 연습은 강의의 일부입니다
R로 하는 Supervised Learning: 회귀
연습 안내
kWayCrossValidation()(docs)을 사용해 3-겹 교차 검증을 위한 분할 계획을 만드세요.- 첫 번째 인자는 분할할 행의 수입니다.
- 두 번째 인자는 교차 검증의 폴드 수입니다.
- 함수의 세 번째와 네 번째 인자는
NULL로 설정해도 됩니다.
- 샘플 코드를 확인하고 실행해 상호작용 항이 없는 모델의 3-겹 교차 검증 예측을 구해
pred_add열에 할당하세요. - 상호작용 항이 있는 모델의 3-겹 교차 검증 예측을 구하세요. 예측값을
pred_interaction열에 할당하세요.- 절차는 샘플 코드에 나와 있습니다.
- 이미 생성한 동일한
splitPlan을 사용하세요.
- 빈칸을 채워 다음을 수행하세요.
- 예측값을 하나의 열
pred로pivot_longer하세요. - 잔차 열(실제 결과 - 예측 결과)을 추가하세요.
- 모델 유형별로 교차 검증 예측의 RMSE를 구하세요.
- 예측값을 하나의 열
- RMSE를 비교하세요. 이 결과를 바탕으로 어떤 모델을 사용하시겠습니까?
실습형 인터랙티브 연습
이 예제를 이 샘플 코드를 완성하여 풀어보세요.
# alcohol is available
summary(alcohol)
# Both the formulae are available
fmla_add
fmla_interaction
# Create the splitting plan for 3-fold cross validation
set.seed(34245) # set the seed for reproducibility
splitPlan <- ___(___(___), ___, ___, ___)
# Sample code: Get cross-val predictions for main-effects only model
alcohol$pred_add <- 0 # initialize the prediction vector
for(i in 1:3) {
split <- splitPlan[[i]]
model_add <- lm(fmla_add, data = alcohol[split$train, ])
alcohol$pred_add[split$app] <- predict(model_add, newdata = alcohol[split$app, ])
}
# Get the cross-val predictions for the model with interactions
alcohol$pred_interaction <- 0 # initialize the prediction vector
for(i ___ ___) {
split <- ___
model_interaction <- lm(___, data = alcohol[split$train, ])
alcohol$___[split$app] <- predict(___, newdata = alcohol[split$app, ])
}
# Get RMSE
alcohol %>%
pivot_longer(cols=c('pred_add', 'pred_interaction'), names_to='modeltype', values_to='pred') %>%
mutate(residuals = ____) %>%
group_by(modeltype) %>%
summarize(rmse = ___(___(___)))