`คาดการณ์สุ่มป่าเถื่อน 'ประเมินความน่าจะเป็นของคลาสได้อย่างไร


16

วิธีการที่ไม่randomForestน่าจะเป็นระดับประมาณการแพคเกจเมื่อฉันใช้predict(model, data, type = "prob")?

ฉันใช้rangerสำหรับฝึกป่าสุ่มโดยใช้probability = Tอาร์กิวเมนต์เพื่อทำนายความน่าจะเป็น rangerพูดในเอกสารว่า:

ปลูกป่าน่าจะเป็นเหมือนใน Malley และคณะ (2012)

ฉันจำลองข้อมูลและลองทั้งแพ็คเกจและได้ผลลัพธ์ที่แตกต่างกันมาก (ดูรหัสด้านล่าง)

ป้อนคำอธิบายรูปภาพที่นี่

ดังนั้นฉันรู้ว่ามันใช้เทคนิคต่าง ๆ (จากนั้นแรนเจอร์) เพื่อประเมินความน่าจะเป็น แต่อันไหน

simulate_data <- function(n){
  X <- data.frame(matrix(runif(n*10), ncol = 10))
  Y <- data.frame(Y = rbinom(n, size = 1, prob = apply(X, 1, sum) %>%
                               pnorm(mean = 5)
                             ) %>% 
                    as.factor()

  ) 
  dplyr::bind_cols(X, Y)
}

treino <- simulate_data(10000)
teste <- simulate_data(10000)

library(ranger)
modelo_ranger <- ranger(Y ~., data = treino, 
                                num.trees = 100, 
                                mtry = floor(sqrt(10)), 
                                write.forest = T, 
                                min.node.size = 100, 
                                probability = T
                                )

modelo_randomForest <- randomForest(Y ~., data = treino,
                                    ntree = 100, 
                                    mtry = floor(sqrt(10)),
                                    nodesize = 100
                                    )

pred_ranger <- predict(modelo_ranger, teste)$predictions[,1]
pred_randomForest <- predict(modelo_randomForest, teste, type = "prob")[,2]
prob_real <- apply(teste[,1:10], 1, sum) %>% pnorm(mean = 5)

data.frame(prob_real, pred_ranger, pred_randomForest) %>%
  tidyr::gather(pacote, prob, -prob_real) %>%
  ggplot(aes(x = prob, y = prob_real)) + geom_point(size = 0.1) + facet_wrap(~pacote)

1
แค่อยากรู้อยากเห็นอะไรจะเกิดขึ้นprob_real?
Firebug

1
ความน่าจะเป็นในการตอบสนองที่แท้จริง เช่นนี้เป็นแบบจำลองฉันมีสิ่งนี้สำหรับการสังเกตแต่ละครั้ง
Daniel Falbel

คำตอบ:


17

มันเป็นเพียงสัดส่วนของคะแนนโหวตของต้นไม้ในชุด

library(randomForest)

rf = randomForest(Species~., data = iris, norm.votes = TRUE, proximity = TRUE)
p1 = predict(rf, iris, type = "prob")
p2 = predict(rf, iris, type = "vote", norm.votes = TRUE)

identical(p1,p2)
#[1] TRUE

หรือถ้าคุณคูณความน่าจะเป็นของคุณคุณจะntreeได้ผลลัพธ์เหมือนกัน แต่นับเป็นสัดส่วนแทน

p1 = predict(rf, iris, type = "prob")
p2 = predict(rf, iris, type = "vote", norm.votes = FALSE)

identical(500*p1,p2)
#[1] TRUE

2
ขอบคุณ! คุณมีความคิดใด ๆ หรือไม่ว่าทำไมสัดส่วนของคะแนนโหวตจึงดีกว่าป่าที่น่าจะเป็น หรือคุณคิดว่าสิ่งนี้จะเกิดขึ้นเฉพาะกับปัญหานี้หรือไม่? ดูลิงค์นี้ (ในภาษาโปรตุเกส)
Daniel Falbel

2
@DanielFalbel ในขณะที่ฉันค่อนข้างคุ้นเคยกับrandomForestฉันไม่ค่อยมีความรู้เกี่ยวกับranger(ในความเป็นจริงฉันไม่เคยใช้มัน) ดังนั้นฉันจึงไม่สามารถตอบได้ฉันขอโทษ แต่มันเป็นคำถามที่น่าสนใจบางทีคุณอาจถามคำถามอีกข้อว่ากลยุทธ์ทั้งสองแตกต่างกันอย่างไร
Firebug

6

Malley (2012) สามารถใช้ได้ที่นี่: http://dx.doi.org/10.3414%2FME00-01-0052 การอ้างอิงแบบเต็มอยู่ในส่วนของการอ้างอิงในเอกสารของเรนเจอร์

ในระยะสั้นต้นไม้แต่ละต้นคาดการณ์ความน่าจะเป็นของชั้นเรียนและความน่าจะเป็นเหล่านี้จะถูกนำมาเฉลี่ยสำหรับการทำนายป่า สำหรับสองคลาสนี้เทียบเท่ากับฟอเรสต์ถดถอยในการตอบกลับที่เข้ารหัส 0-1

ในทางตรงกันข้ามในrandomForestกับtype="prob"ต้นไม้แต่ละต้นคาดการณ์ระดับและน่าจะมีการคำนวณจากชั้นเรียนเหล่านี้

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

อย่างไรก็ตามผลลัพธ์เดียวกันกับrandomForestตัวอย่างข้างต้นสามารถทำได้โดยใช้แรนเจอร์โดยใช้การจัดหมวดหมู่และการคำนวณความน่าจะเป็นด้วยตนเอง (ใช้predict.all=TRUEในการทำนาย)


คุณสามารถเห็นได้ว่าสิ่งเหล่านั้นเป็นความน่าจะเป็นของการตอบสนองในรหัสการจำลอง Y = rbinom(n, size = 1, prob = apply(X, 1, sum) %>% pnorm(mean = 5))ดูได้ที่: นั่นคือวิธีที่ Y ถูกสร้างขึ้นรวมกับ X1, X2, ... , X10 จากนั้นรับควอนไทล์ของการแจกแจงแบบปกติด้วยค่าเฉลี่ย = 5 ผลรวมแทน คุณคิดว่ามันสมเหตุสมผลไหม?
Daniel Falbel

-1

หากคุณต้องการการประมาณความน่าจะเป็นแบบ Out-Of-Bag คุณสามารถทำได้ในแพ็คเกจแบบสุ่มป่าไม้ใน R โดยใช้แบบจำลองการลงคะแนน $ การประมาณความน่าจะเป็นอื่น ๆ ไม่ใช่ OOB


การประมาณความน่าจะเป็น OOB คืออะไร
user158565

มันอยู่นอกการประมาณความน่าจะเป็นถุง ในฟอเรสต์แบบสุ่มวิธีหนึ่งที่พวกเขาประเมินความน่าจะเป็นที่เกี่ยวข้องกับแต่ละชั้นเรียนคือพวกเขาคำนวณสัดส่วนของต้นไม้ที่โหวตให้แต่ละชั้น ประมาณการ OOB จะทำเหมือนกัน แต่นับเฉพาะคะแนนโหวตต้นไม้เหล่านั้นว่าอินสแตนซ์ที่ไม่ได้นำมาใช้ในการฝึกอบรมของพวกเขา (หรือที่รู้จักเช่นไม่ได้อยู่ในถุง)
แม็กซ์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.