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

การสร้างโมเดลที่มี interaction (2)

ในแบบฝึกหัดนี้ จะเปรียบเทียบประสิทธิภาพของโมเดล interaction ที่สร้างไว้ในแบบฝึกหัดก่อนหน้ากับโมเดลที่มีเฉพาะ main effects เนื่องจากชุดข้อมูลนี้มีขนาดเล็ก จึงใช้ cross-validation เพื่อจำลองการทำนายบนข้อมูลที่โมเดลไม่เคยเห็น

เราจะเริ่มใช้แพ็กเกจ dplyr สำหรับการคำนวณ

  • mutate() (docs) เพิ่มคอลัมน์ใหม่ให้กับ tbl (ซึ่งเป็น data frame ประเภทหนึ่ง)
  • group_by() (docs) กำหนดวิธีการจัดกลุ่มแถวใน tbl
  • summarize() (docs) คำนวณสถิติสรุปของคอลัมน์

นอกจากนี้ยังใช้ pivot_longer() (docs) จาก tidyr ซึ่งนำหลายคอลัมน์มารวมให้อยู่ในรูปคู่ key-value ทั้ง data frame alcohol และสูตร fmla_add กับ fmla_interaction ได้โหลดไว้ให้แล้ว

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

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

ดูคอร์ส

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

  • ใช้ kWayCrossValidation() (docs) เพื่อสร้างแผนการแบ่งข้อมูลสำหรับ cross-validation แบบ 3-fold
    • อาร์กิวเมนต์แรกคือจำนวนแถวที่จะแบ่ง
    • อาร์กิวเมนต์ที่สองคือจำนวน fold สำหรับ cross-validation
    • กำหนดอาร์กิวเมนต์ที่ 3 และ 4 เป็น NULL
  • ตรวจสอบและรันโค้ดตัวอย่างเพื่อดูผลการทำนายจาก cross-validation แบบ 3-fold ของโมเดลที่ไม่มี interaction แล้วกำหนดค่าให้กับคอลัมน์ pred_add
  • รับผลการทำนายจาก cross-validation แบบ 3-fold ของโมเดลที่มี interaction แล้วกำหนดค่าให้กับคอลัมน์ pred_interaction
    • ดูขั้นตอนได้จากโค้ดตัวอย่าง
    • ใช้ splitPlan เดิมที่สร้างไว้แล้ว
  • เติมช่องว่างเพื่อ
    • ใช้ pivot_longer รวมผลการทำนายไว้ในคอลัมน์เดียวชื่อ pred
    • เพิ่มคอลัมน์ค่าคลาดเคลื่อน (ผลลัพธ์จริง - ผลลัพธ์ที่ทำนาย)
    • คำนวณ RMSE ของผลการทำนายจาก cross-validation สำหรับแต่ละประเภทโมเดล
  • เปรียบเทียบค่า 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 = ___(___(___)))
แก้ไขและรันโค้ด