ป่าสุ่มและการทำนาย


14

ฉันพยายามเข้าใจว่า Random Forest ทำงานอย่างไร ฉันมีความเข้าใจเกี่ยวกับวิธีการสร้างต้นไม้ แต่ไม่สามารถเข้าใจว่า Random Forest สร้างการคาดการณ์จากตัวอย่างถุงได้อย่างไร มีใครให้คำอธิบายง่ายๆกับฉันได้ไหม :)

คำตอบ:


17

ต้นไม้แต่ละต้นในป่าถูกสร้างขึ้นจากตัวอย่างบูตของการสังเกตในข้อมูลการฝึกอบรมของคุณ ข้อสังเกตเหล่านั้นในตัวอย่าง bootstrap สร้างต้นไม้ในขณะที่สิ่งที่ไม่อยู่ในตัวอย่าง bootstrap จะสร้างตัวอย่าง out-of-bag (หรือ OOB)

ควรชัดเจนว่าตัวแปรเดียวกันพร้อมใช้งานสำหรับเคสในข้อมูลที่ใช้ในการสร้างทรีสำหรับเคสในตัวอย่าง OOB ในการรับการคาดการณ์สำหรับตัวอย่าง OOB แต่ละอันจะถูกส่งผ่านต้นไม้ปัจจุบันและกฎสำหรับต้นไม้ที่ตามมาจนกระทั่งมันมาถึงในโหนดเทอร์มินัล นั่นทำให้การคาดการณ์ของ OOB สำหรับต้นไม้นั้น

กระบวนการนี้ซ้ำหลายครั้งโดยแต่ละต้นได้รับการฝึกฝนเกี่ยวกับตัวอย่างบู๊ตสแตรปใหม่จากข้อมูลการฝึกอบรมและการคาดการณ์สำหรับตัวอย่าง OOB ใหม่ที่ได้รับ

เมื่อต้นไม้โตขึ้นจำนวนหนึ่งตัวอย่างจะอยู่ในกลุ่มตัวอย่างของ OOB มากกว่าหนึ่งครั้งดังนั้น "ค่าเฉลี่ย" ของการคาดการณ์เหนือต้นไม้ N ที่มีกลุ่มตัวอย่างอยู่ใน OOB ใช้เป็นคำทำนายของ OOB สำหรับแต่ละตัวอย่างการฝึกอบรมสำหรับ ต้นไม้ 1, ... , N. โดย "เฉลี่ย" เราใช้ค่าเฉลี่ยของการคาดคะเนสำหรับการตอบสนองอย่างต่อเนื่องหรือการโหวตส่วนใหญ่อาจใช้สำหรับการตอบสนองอย่างเป็นหมวดหมู่ (การโหวตส่วนใหญ่คือชั้นที่มีคะแนนโหวตมากกว่าชุด ต้นไม้ 1, ... , N)

ตัวอย่างเช่นสมมติว่าเรามีการคาดการณ์ OOB ต่อไปนี้สำหรับตัวอย่าง 10 ชุดในการฝึกอบรมบนต้นไม้ 10 ต้น

set.seed(123)
oob.p <- matrix(rpois(100, lambda = 4), ncol = 10)
colnames(oob.p) <- paste0("tree", seq_len(ncol(oob.p)))
rownames(oob.p) <- paste0("samp", seq_len(nrow(oob.p)))
oob.p[sample(length(oob.p), 50)] <- NA
oob.p

> oob.p
       tree1 tree2 tree3 tree4 tree5 tree6 tree7 tree8 tree9 tree10
samp1     NA    NA     7     8     2     1    NA     5     3      2
samp2      6    NA     5     7     3    NA    NA    NA    NA     NA
samp3      3    NA     5    NA    NA    NA     3     5    NA     NA
samp4      6    NA    10     6    NA    NA     3    NA     6     NA
samp5     NA     2    NA    NA     2    NA     6     4    NA     NA
samp6     NA     7    NA     4    NA     2     4     2    NA     NA
samp7     NA    NA    NA     5    NA    NA    NA     3     9      5
samp8      7     1     4    NA    NA     5     6    NA     7     NA
samp9      4    NA    NA     3    NA     7     6     3    NA     NA
samp10     4     8     2     2    NA    NA     4    NA    NA      4

ในกรณีNAที่ตัวอย่างอยู่ในข้อมูลการฝึกอบรมสำหรับต้นไม้นั้น (กล่าวอีกนัยหนึ่งว่าไม่ได้อยู่ในตัวอย่าง OOB)

ค่าเฉลี่ยของNAค่าที่ไม่ใช่สำหรับแต่ละแถวให้การคาดการณ์ของ OOB สำหรับแต่ละตัวอย่างสำหรับทั้งฟอเรสต์

> rowMeans(oob.p, na.rm = TRUE)
 samp1  samp2  samp3  samp4  samp5  samp6  samp7  samp8  samp9 samp10 
  4.00   5.25   4.00   6.20   3.50   3.80   5.50   5.00   4.60   4.00

เนื่องจากต้นไม้แต่ละต้นถูกเพิ่มเข้าไปในป่าเราสามารถคำนวณข้อผิดพลาดของ OOB ได้รวมถึงต้นไม้นั้น ตัวอย่างเช่นด้านล่างเป็นวิธีการคำนวณสำหรับแต่ละตัวอย่าง:

FUN <- function(x) {
  na <- is.na(x)
  cs <- cumsum(x[!na]) / seq_len(sum(!na))
  x[!na] <- cs
  x
}
t(apply(oob.p, 1, FUN))

> print(t(apply(oob.p, 1, FUN)), digits = 3)
       tree1 tree2 tree3 tree4 tree5 tree6 tree7 tree8 tree9 tree10
samp1     NA    NA  7.00  7.50  5.67  4.50    NA   4.6  4.33    4.0
samp2      6    NA  5.50  6.00  5.25    NA    NA    NA    NA     NA
samp3      3    NA  4.00    NA    NA    NA  3.67   4.0    NA     NA
samp4      6    NA  8.00  7.33    NA    NA  6.25    NA  6.20     NA
samp5     NA     2    NA    NA  2.00    NA  3.33   3.5    NA     NA
samp6     NA     7    NA  5.50    NA  4.33  4.25   3.8    NA     NA
samp7     NA    NA    NA  5.00    NA    NA    NA   4.0  5.67    5.5
samp8      7     4  4.00    NA    NA  4.25  4.60    NA  5.00     NA
samp9      4    NA    NA  3.50    NA  4.67  5.00   4.6    NA     NA
samp10     4     6  4.67  4.00    NA    NA  4.00    NA    NA    4.0

ด้วยวิธีนี้เราจะเห็นว่าการทำนายถูกสะสมเหนือต้นไม้ N ในป่าจนถึงการวนซ้ำที่กำหนด หากคุณอ่านข้ามแถวค่าที่ไม่ถูกต้องที่สุดNAคือค่าที่ฉันแสดงด้านบนสำหรับการทำนาย OOB นั่นคือวิธีการติดตามประสิทธิภาพ OOB - สามารถคำนวณ RMSEP สำหรับตัวอย่าง OOB ตามการคาดการณ์ของ OOB ที่สะสมอยู่เหนือต้นไม้ N

โปรดทราบว่ารหัส R ที่แสดงไม่ได้มาจากภายในของรหัส RandomForest ในแพ็คเกจRandomForestสำหรับ R - ฉันเพิ่งเคาะรหัสง่ายๆเพื่อให้คุณสามารถติดตามสิ่งที่เกิดขึ้นเมื่อการคาดการณ์ของแต่ละต้นถูกกำหนด

เป็นเพราะต้นไม้แต่ละต้นสร้างขึ้นจากตัวอย่าง bootstrap และมีต้นไม้จำนวนมากในป่าสุ่มเช่นการสังเกตแต่ละชุดการฝึกอบรมอยู่ในตัวอย่าง OOB สำหรับต้นไม้หนึ่งต้นหรือมากกว่านั้นสามารถคาดการณ์ OOB ได้ทั้งหมด ตัวอย่างในข้อมูลการฝึกอบรม

ฉันได้คัดลอกปัญหาต่าง ๆ เช่นข้อมูลที่ขาดหายไปสำหรับกรณี OOB บางกรณี ฯลฯ แต่ปัญหาเหล่านี้เกี่ยวข้องกับการถดถอยแบบเดี่ยวหรือแผนภูมิการจำแนกประเภท นอกจากนี้โปรดทราบว่าแต่ละต้นในฟอเรสต์จะใช้mtryตัวแปรที่เลือกแบบสุ่มเท่านั้น


คำตอบที่ดีกาวิน! เมื่อคุณเขียน"To get predictions for the OOB sample, each one is passed down the current tree and the rules for the tree followed until it arrives in a terminal node"คุณมีคำอธิบายง่ายๆว่าอะไรrules for the treeคืออะไร และฉันเข้าใจsampleว่าเป็นแถวอย่างถูกต้องหรือไม่ถ้าฉันเข้าใจว่ากลุ่มตัวอย่างเป็นgroupsข้อสังเกตที่ต้นไม้แบ่งข้อมูลออกมา
user1665355

@ user1665355 ฉันคิดว่าคุณเข้าใจว่าต้นไม้การถดถอยหรือการจำแนกถูกสร้างขึ้นอย่างไร ต้นไม้ใน RF ไม่แตกต่างกัน (ยกเว้นในกฎการหยุด) ต้นไม้แต่ละต้นจะแยกข้อมูลการฝึกออกเป็นกลุ่มตัวอย่างที่มี "ค่า" ที่คล้ายกันสำหรับการตอบสนอง ตัวแปรและตำแหน่งแยก (เช่นค่า pH> 4.5) ที่ทำนายได้ดีที่สุด (เช่นย่อขนาด "ข้อผิดพลาด") ในรูปแบบการแยกหรือกฎแรกในต้นไม้ แต่ละสาขาของการแยกนี้จะถูกพิจารณาในทางกลับกันและการแยก / กฎใหม่จะถูกระบุว่าลด "ข้อผิดพลาด" ของต้นไม้ นี่เป็นอัลกอริทึมการแบ่งพาร์ติชันแบบเรียกซ้ำแบบไบนารี แยกเป็นกฎ
Reinstate Monica - G. Simpson

@ user1665355 ใช่ขอโทษฉันมาจากเขตข้อมูลที่มีตัวอย่างคือการสังเกตแถวในชุดข้อมูล แต่เมื่อคุณเริ่มพูดถึงตัวอย่างบู๊ตสแตรปนั่นคือชุดการสังเกตแบบ N ซึ่งวาดด้วยการแทนที่จากข้อมูลการฝึกอบรมและด้วยเหตุนี้จึงมีแถว N หรือการสังเกต ฉันจะพยายามล้างคำศัพท์ของฉันในภายหลัง
Reinstate Monica - G. Simpson

ขอบคุณ! ฉันยังใหม่ต่อ RF มากขอโทษสำหรับคำถามที่อาจจะโง่ :) ฉันคิดว่าฉันเข้าใจเกือบทุกอย่างที่คุณเขียนคำอธิบายที่ดีมาก! ฉันแค่สงสัยเกี่ยวกับตัวแปรและตำแหน่งแยก (เช่นค่า pH> 4.5) ที่คาดการณ์ได้ดีที่สุด (เช่นย่อ "ข้อผิดพลาด") ในรูปแบบการแยกหรือกฎแรกในต้นไม้ ... ฉันไม่เข้าใจว่าข้อผิดพลาดคืออะไร : / http://www.ime.unicamp.br/~ra109078/PED/Data%20Minig%20with%20R/Data%20Mining%20with%20R.pdfฉันอ่านและพยายามที่จะเข้าใจ บนหน้า 115-116 ผู้เขียนใช้ RF เพื่อเลือกvariable importanceตัวบ่งชี้ทางเทคนิค
user1665355

"ข้อผิดพลาด" ขึ้นอยู่กับประเภทของต้นไม้ที่ถูกติดตั้ง Deviance เป็นตัววัดปกติสำหรับการตอบสนองต่อเนื่อง (เกาส์เซียน) ในแพ็คเกจ rpart ค่าสัมประสิทธิ์ Gini เป็นค่าเริ่มต้นสำหรับการตอบกลับอย่างเป็นหมวดหมู่ แต่มีรุ่นอื่นสำหรับรุ่นอื่น ๆ คุณควรใช้หนังสือดี ๆ ใน Trees และ RF หากคุณต้องการปรับใช้ให้สำเร็จ การวัดความแปรปรวนแปรปรวนเป็นสิ่งที่แตกต่างกัน - พวกเขาวัด "ความสำคัญ" ของตัวแปรแต่ละตัวในชุดข้อมูลโดยเห็นว่ามีการเปลี่ยนแปลงอะไรบ้างเมื่อตัวแปรนั้นถูกนำมาใช้เพื่อให้พอดีกับต้นไม้และเมื่อไม่ได้ใช้ตัวแปรนั้น
Reinstate Monica - G. Simpson
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.