วิธีการบรรจุถุงใน 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 ')

กราฟความสำคัญของตัวแปรใน R

เราจะเห็นได้ว่า 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 แบบเต็มที่ใช้ในตัวอย่างนี้ ได้ ที่นี่

เพิ่มความคิดเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *