Girdi dönüşümleri: "hockey stick" (2)
Son egzersizde, ikinci dereceden bir modelin houseprice verilerine doğrusal bir modelden daha iyi uyduğunu görmüştün.
Bu egzersizde, ikinci dereceden modelin örneklem dışı veride daha iyi performans gösterip göstermeyeceğini doğrulayacaksın.
Bu veri kümesi küçük olduğundan, çapraz doğrulama kullanacaksın. Önceki egzersizde oluşturduğun ikinci dereceden formül fmla_sqr ve houseprice veri çerçevesi kullanımın için hazır.
Karşılaştırma için, örnek kod doğrusal model price ~ size için çapraz doğrulama tahminlerini hesaplayacak.
Bu egzersiz, kursun bir parçasıdır
R'de Supervised Learning: Regresyon
Egzersiz talimatları
- 3 katlı bir çapraz doğrulama için bölme planı oluşturmak üzere
kWayCrossValidation()kullan.- Fonksiyonun 3. ve 4. argümanlarını
NULLolarak ayarlayabilirsin.
- Fonksiyonun 3. ve 4. argümanlarını
price ~ sizemodelinin 3 katlı çapraz doğrulama tahminlerini elde etmek vepred_linsütununa eklemek için örnek kodu incele ve çalıştır.- Fiyatın, karesi alınmış boyutun bir fonksiyonu olarak çapraz doğrulama tahminlerini al. Bunları
pred_sqrsütununa ata.- Prosedürü örnek kod veriyor.
- Zaten oluşturduğun bölme planını kullanabilirsin.
- Tahminleri pivotlamak ve artık değerleri (residuals) hesaplamak için boşlukları doldur.
- İki modelin RMSE değerlerini karşılaştırmak için boşlukları doldur. Hangisi daha iyi uyuyor?
Uygulamalı etkileşimli egzersiz
Bu egzersizi bu örnek kodu tamamlayarak deneyin.
# 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 = ___)