입력 변환: "하키 스틱" (2)
이전 연습 문제에서, 이차 모형이 선형 모형보다 houseprice 데이터에 더 잘 맞는 듯 보였어요.
이번 연습 문제에서는 이차 모형이 실제로 범용(out-of-sample) 데이터에서 더 잘 동작하는지 확인해 보겠습니다.
데이터셋이 작기 때문에 교차 검증을 사용해요. 지난 연습 문제에서 만든 이차식 fmla_sqr와 houseprice 데이터 프레임이 준비되어 있습니다.
비교를 위해, 샘플 코드는 선형 모형 price ~ size의 교차 검증 예측을 계산합니다.
이 연습은 강의의 일부입니다
R로 하는 Supervised Learning: 회귀
연습 안내
kWayCrossValidation()을 사용해 3-폴드 교차 검증용 분할 플랜을 만드세요.- 함수의 3번째와 4번째 인자는
NULL로 설정해도 됩니다.
- 함수의 3번째와 4번째 인자는
- 샘플 코드를 살펴보고 실행해, 모형
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 = ___)