시작하기무료로 시작하기

입력 변환: "하키 스틱" (2)

이전 연습 문제에서, 이차 모형이 선형 모형보다 houseprice 데이터에 더 잘 맞는 듯 보였어요. 이번 연습 문제에서는 이차 모형이 실제로 범용(out-of-sample) 데이터에서 더 잘 동작하는지 확인해 보겠습니다. 데이터셋이 작기 때문에 교차 검증을 사용해요. 지난 연습 문제에서 만든 이차식 fmla_sqrhouseprice 데이터 프레임이 준비되어 있습니다.

비교를 위해, 샘플 코드는 선형 모형 price ~ size의 교차 검증 예측을 계산합니다.

이 연습은 강의의 일부입니다

R로 하는 Supervised Learning: 회귀

강의 보기

연습 안내

  • kWayCrossValidation()을 사용해 3-폴드 교차 검증용 분할 플랜을 만드세요.
    • 함수의 3번째와 4번째 인자는 NULL로 설정해도 됩니다.
  • 샘플 코드를 살펴보고 실행해, 모형 price ~ size의 3-폴드 교차 검증 예측을 구해 pred_lin 열에 추가하세요.
  • 제곱한 size를 설명 변수로 하는 가격의 교차 검증 예측을 구하세요. 결과를 pred_sqr 열에 할당하세요.
    • 절차는 샘플 코드에 나와 있어요.
    • 이미 만든 분할 플랜을 그대로 사용해도 됩니다.
  • 빈칸을 채워 예측값을 피벗하고 잔차를 계산하세요.
  • 빈칸을 채워 두 모형의 RMSE를 비교하세요. 어떤 모형이 더 잘 맞나요?

실습형 인터랙티브 연습

이 예제를 이 샘플 코드를 완성하여 풀어보세요.

# houseprice is available
summary(houseprice)

# fmla_sqr is available
fmla_sqr

# Create a splitting plan for 3-fold cross validation
set.seed(34245)  # set the seed for reproducibility
splitPlan <- ___

# Sample code: get cross-val predictions for price ~ size
houseprice$pred_lin <- 0  # initialize the prediction vector
for(i in 1:3) {
  split <- splitPlan[[i]]
  model_lin <- lm(price ~ size, data = houseprice[split$train,])
  houseprice$pred_lin[split$app] <- predict(model_lin, newdata = houseprice[split$app,])
}

# Get cross-val predictions for price as a function of size^2 (use fmla_sqr)
houseprice$pred_sqr <- 0 # initialize the prediction vector
for(i in 1:3) {
  split <- ___
  model_sqr <- lm(___, data = houseprice[split$train, ])
  houseprice$___[split$app] <- predict(___, newdata = houseprice[split$app, ])
}

# Pivot the predictions and calculate the residuals
houseprice_long <- houseprice %>%
  pivot_longer(cols = c('pred_lin', 'pred_sqr'), names_to = 'modeltype', values_to = 'pred') %>%
  mutate(residuals = ___)

# Compare the cross-validated RMSE for the two models
houseprice_long %>% 
  group_by(modeltype) %>% # group by modeltype
  summarize(rmse = ___)
코드 편집 및 실행