เริ่มต้นใช้งานเริ่มต้นใช้งานได้ฟรี

การแปลงค่า input: "hockey stick" (2)

ในแบบฝึกหัดที่แล้ว เราพบว่าโมเดล quadratic ดูเหมือนจะพอดีกับข้อมูล houseprice ได้ดีกว่าโมเดลเชิงเส้น ในแบบฝึกหัดนี้ จะได้ตรวจสอบว่าโมเดล quadratic ให้ประสิทธิภาพที่ดีกว่าบนข้อมูลนอกตัวอย่างจริงหรือไม่ เนื่องจากชุดข้อมูลนี้มีขนาดเล็ก จึงใช้ cross-validation สูตร quadratic fmla_sqr ที่สร้างไว้ในแบบฝึกหัดก่อนหน้า และ data frame houseprice พร้อมใช้งานแล้ว

เพื่อให้เปรียบเทียบได้ โค้ดตัวอย่างจะคำนวณค่าพยากรณ์จาก cross-validation ของโมเดลเชิงเส้น price ~ size ไว้ให้

แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร

Supervised Learning ใน R: การถดถอย

ดูคอร์ส

คำแนะนำการฝึกหัด

  • ใช้ kWayCrossValidation() เพื่อสร้างแผนการแบ่งข้อมูลสำหรับ cross-validation แบบ 3-fold
    • สามารถกำหนดอาร์กิวเมนต์ที่ 3 และ 4 ของฟังก์ชันเป็น NULL ได้
  • ตรวจสอบและรันโค้ดตัวอย่างเพื่อรับค่าพยากรณ์จาก cross-validation แบบ 3-fold ของโมเดล price ~ size แล้วเพิ่มลงในคอลัมน์ pred_lin
  • รับค่าพยากรณ์จาก cross-validation สำหรับ price ในฐานะฟังก์ชันของ size ที่ยกกำลังสอง แล้วกำหนดค่าลงในคอลัมน์ pred_sqr
    • โค้ดตัวอย่างแสดงขั้นตอนไว้แล้ว
    • ใช้แผนการแบ่งข้อมูลที่สร้างไว้แล้วได้เลย
  • เติมส่วนที่ว่างเพื่อ pivot ค่าพยากรณ์และคำนวณค่า residuals
  • เติมส่วนที่ว่างเพื่อเปรียบเทียบค่า 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 = ___)
แก้ไขและรันโค้ด