การแปลงอินพุต: รูปแบบ "hockey stick"
ในแบบฝึกหัดนี้ เราจะสร้างโมเดลเพื่อพยากรณ์ราคาบ้านจากขนาดพื้นที่ของบ้าน ชุดข้อมูล houseprice ที่โหลดไว้ให้แล้วมีคอลัมน์ดังนี้:
price: ราคาบ้านในหน่วย $1,000size: พื้นที่ผิว
จากกราฟกระจายของข้อมูล จะเห็นว่าความสัมพันธ์ค่อนข้างไม่เป็นเส้นตรง มีลักษณะคล้าย "hockey stick" คือราคาค่อนข้างคงที่สำหรับบ้านขนาดเล็ก แต่จะพุ่งขึ้นสูงเมื่อบ้านมีขนาดใหญ่ขึ้น ฟังก์ชันกำลังสองและกำลังสามมักเป็นรูปแบบที่เหมาะสมในการอธิบายความสัมพันธ์แบบ hockey stick โปรดทราบว่าอาจไม่มีเหตุผลเชิงกายภาพที่ price สัมพันธ์กับกำลังสองของ size แต่ฟังก์ชันกำลังสองเป็นเพียงการประมาณค่าความสัมพันธ์ที่สังเกตได้ในรูปแบบสูตรปิด

จะฝึกโมเดลเพื่อพยากรณ์ราคาในฐานะฟังก์ชันของขนาดยกกำลังสอง แล้วดูว่าโมเดลพอดีกับข้อมูลชุดฝึกได้ดีเพียงใด
เนื่องจาก ^ เป็นสัญลักษณ์ที่ใช้แสดง interaction ด้วย ให้ใช้ฟังก์ชัน I() (docs) เพื่อให้นิพจน์ x^2 ถูกตีความ "ตามตัว" นั่นคือเป็นกำลังสองของ x ไม่ใช่ interaction ของ x กับตัวเอง
exampleFormula = y ~ I(x^2)
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
Supervised Learning ใน R: การถดถอย
คำแนะนำการฝึกหัด
- เขียนสูตร
fmla_sqrเพื่อแสดงความสัมพันธ์ระหว่าง price และ size ยกกำลังสอง จากนั้นพิมพ์ผลออกมา - ฝึกโมเดล
model_sqrบนข้อมูลโดยใช้fmla_sqr - เพื่อเปรียบเทียบ ให้ฝึกโมเดลเชิงเส้น
model_linบนข้อมูลโดยใช้สูตรprice ~ size - เติมช่องว่างเพื่อ
- สร้างการพยากรณ์จากข้อมูลชุดฝึกด้วยโมเดลทั้งสอง
- รวมผลการพยากรณ์ให้อยู่ในคอลัมน์เดียวชื่อ
predโดยใช้pivot_longer() - เปรียบเทียบการพยากรณ์ของโมเดลทั้งสองกับข้อมูลจริงในรูปแบบกราฟ โมเดลใดให้ผลที่ดีกว่ากัน?
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
# houseprice is available
summary(houseprice)
# Create the formula for price as a function of squared size
(fmla_sqr <- ___)
# Fit a model of price as a function of squared size (use fmla_sqr)
model_sqr <- ___
# Fit a model of price as a linear function of size
model_lin <- ___
# Make predictions and compare
houseprice %>%
mutate(pred_lin = ___(___), # predictions from linear model
pred_sqr = ___(___)) %>% # predictions from quadratic model
pivot_longer(cols = c('pred_lin', 'pred_sqr'), names_to = 'modeltype', values_to = 'pred') %>% # pivot the predictions
ggplot(aes(x = size)) +
geom_point(aes(y = ___)) + # actual prices
geom_line(aes(y = ___, color = modeltype)) + # the predictions
scale_color_brewer(palette = "Dark2")