วิธีการบรรจุถุงใน r (ทีละขั้นตอน)
เมื่อเราสร้าง แผนผังการตัดสินใจ สำหรับชุดข้อมูลที่กำหนด เราจะใช้ชุดข้อมูลการฝึกอบรมเพียงชุดเดียวเพื่อสร้างแบบจำลอง
อย่างไรก็ตาม ข้อเสียของการใช้แผนผังการตัดสินใจเดี่ยวคือมีแนวโน้มที่จะได้รับผลกระทบจาก ความแปรปรวนสูง นั่นคือ ถ้าเราแบ่งชุดข้อมูลออกเป็นสองซีกและใช้แผนผังการตัดสินใจกับทั้งสองซีก ผลลัพธ์ที่ได้อาจแตกต่างกันมาก
วิธีหนึ่งที่เราสามารถใช้เพื่อลดความแปรปรวนของแผนผังการตัดสินใจเดี่ยวๆ เรียกว่า การบรรจุถุง บางครั้งเรียกว่า การรวมบูทสแตรป
การบรรจุถุงทำงานดังนี้:
1. นำตัวอย่างที่บูตสแตรป b จากชุดข้อมูลต้นฉบับ
2. สร้างแผนผังการตัดสินใจสำหรับตัวอย่างบูตสแตรปแต่ละรายการ
3. เฉลี่ยการคาดการณ์จากต้นไม้แต่ละต้นเพื่อให้ได้แบบจำลองขั้นสุดท้าย
ด้วยการสร้างแผนผังการตัดสินใจแยกกันนับร้อยหรือหลายพันรายการ และทำการคาดการณ์โดยเฉลี่ยของแผนผังทั้งหมด เรามักจะได้แบบจำลองถุงพอดีที่สร้างอัตราข้อผิดพลาดในการทดสอบที่ต่ำกว่ามากเมื่อเทียบกับแผนผังการตัดสินใจเดี่ยว
บทช่วยสอนนี้ให้ตัวอย่างทีละขั้นตอนของวิธีสร้างแบบจำลองแบบถุงใน R
ขั้นตอนที่ 1: โหลดแพ็คเกจที่จำเป็น
ขั้นแรก เราจะโหลดแพ็คเกจที่จำเป็นสำหรับตัวอย่างนี้:
library (dplyr) #for data wrangling library (e1071) #for calculating variable importance library (caret) #for general model fitting library (rpart) #for fitting decision trees library (ipred) #for fitting bagged decision trees
ขั้นตอนที่ 2: ติดตั้งโมเดลที่บรรจุถุง
สำหรับตัวอย่างนี้ เราจะใช้ชุดข้อมูล R ในตัวที่เรียกว่า คุณภาพอากาศ ซึ่งมีการตรวจวัดคุณภาพอากาศในนิวยอร์กซิตี้มากกว่า 153 วันในแต่ละวัน
#view structure of air quality dataset
str(airquality)
'data.frame': 153 obs. of 6 variables:
$ Ozone: int 41 36 12 18 NA 28 23 19 8 NA ...
$Solar.R: int 190 118 149 313 NA NA 299 99 19 194 ...
$ Wind: num 7.4 8 12.6 11.5 14.3 14.9 8.6 13.8 20.1 8.6 ...
$ Temp: int 67 72 74 62 56 66 65 59 61 69 ...
$Month: int 5 5 5 5 5 5 5 5 5 5 ...
$Day: int 1 2 3 4 5 6 7 8 9 10 ...
โค้ดต่อไปนี้แสดงวิธีใส่โมเดลแบบถุงใน R โดยใช้ฟังก์ชัน bagging() จากไลบรารี ipred
#make this example reproducible set.seed(1) #fit the bagged model bag <- bagging( formula = Ozone ~ ., data = airquality, nbagg = 150 , coob = TRUE , control = rpart. control (minsplit = 2 , cp = 0 ) ) #display fitted bagged model bag Bagging regression trees with 150 bootstrap replications Call: bagging.data.frame(formula = Ozone ~ ., data = airquality, nbagg = 150, coob = TRUE, control = rpart.control(minsplit = 2, cp = 0)) Out-of-bag estimate of root mean squared error: 17.4973
โปรดทราบว่าเราเลือกใช้ตัวอย่างบูตสแตรป 150 ตัวอย่างเพื่อสร้างแบบจำลองแบบบรรจุถุง และเราระบุว่า coob เป็น TRUE เพื่อให้ได้ข้อผิดพลาดเมื่อไม่มีถุงโดยประมาณ
นอกจากนี้เรายังใช้ข้อกำหนดต่อไปนี้ในฟังก์ชัน rpart.control() :
- minsplit = 2: สิ่งนี้จะบอกโมเดลว่าต้องการการสังเกตเพียง 2 ครั้งในโหนดที่จะแยก
- ซีพี = 0 . นี่คือพารามิเตอร์ความซับซ้อน เมื่อตั้งค่าเป็น 0 เราไม่ต้องการให้โมเดลสามารถปรับปรุงความพอดีโดยรวมในทางใดทางหนึ่งเพื่อที่จะทำการแยก
โดยพื้นฐานแล้ว ข้อโต้แย้งทั้งสองนี้ทำให้ต้นไม้แต่ละต้นเติบโตได้ลึกมาก นำไปสู่ต้นไม้ที่มีความแปรปรวนสูงแต่มีอคติต่ำ จากนั้น เมื่อเราใช้การบรรจุถุง เราจะสามารถลดความแปรปรวนของแบบจำลองขั้นสุดท้ายในขณะที่รักษาความลำเอียงให้ต่ำได้
จากผลลัพธ์ของแบบจำลอง เราจะเห็นว่า RMSE ที่หมดถุงโดยประมาณคือ 17.4973 นี่คือความแตกต่างโดยเฉลี่ยระหว่างค่าที่คาดการณ์ไว้สำหรับโอโซนกับค่าที่สังเกตได้จริง
ขั้นตอนที่ 3: เห็นภาพความสำคัญของตัวทำนาย
แม้ว่าโมเดลแบบถุงมีแนวโน้มที่จะให้การคาดการณ์ที่แม่นยำมากกว่าแผนผังการตัดสินใจแต่ละแบบ แต่ก็เป็นเรื่องยากที่จะตีความและแสดงภาพผลลัพธ์ของโมเดลแบบบรรจุถุงที่ติดตั้งไว้
อย่างไรก็ตาม เราสามารถมองเห็นความสำคัญของตัวแปรตัวทำนายได้โดยการคำนวณการลดลงทั้งหมดใน RSS (ผลรวมที่เหลือของกำลังสอง) เนื่องจากการกระจายตัวของตัวทำนายที่กำหนด ซึ่งเป็นค่าเฉลี่ยของต้นไม้ทั้งหมด ยิ่งค่ามากขึ้น ตัวทำนายก็จะยิ่งมีความสำคัญมากขึ้นเท่านั้น
รหัสต่อไปนี้แสดงวิธีสร้างพล็อตความสำคัญของตัวแปรสำหรับโมเดลกระเป๋าที่ติดตั้งไว้ โดยใช้ฟังก์ชัน varImp() จาก ไลบรารี คาเร็ต:
#calculate variable importance VI <- data.frame(var= names (airquality[,-1]), imp= varImp (bag)) #sort variable importance descending VI_plot <- VI[ order (VI$Overall, decreasing= TRUE ),] #visualize variable importance with horizontal bar plot barplot(VI_plot$Overall, names.arg= rownames (VI_plot), horiz= TRUE , col=' steelblue ', xlab=' Variable Importance ')
เราจะเห็นได้ว่า Solar.R เป็นตัวแปรทำนายที่สำคัญที่สุดในแบบจำลอง ในขณะที่ เดือน มีความสำคัญน้อยที่สุด
ขั้นตอนที่ 4: ใช้แบบจำลองเพื่อคาดการณ์
สุดท้ายนี้ เราสามารถใช้โมเดลกระเป๋าที่ติดตั้งไว้เพื่อคาดการณ์เกี่ยวกับการสังเกตการณ์ใหม่ๆ
#define new observation new <- data.frame(Solar.R=150, Wind=8, Temp=70, Month=5, Day=5) #use fitted bagged model to predict Ozone value of new observation predict(bag, newdata=new) 24.4866666666667
จากค่าของตัวแปรทำนาย โมเดลถุงพอดี ทำนายว่าค่าโอโซนจะเป็น 24,487 ในวันนี้
สามารถดูโค้ด R แบบเต็มที่ใช้ในตัวอย่างนี้ ได้ ที่นี่