ฉันสังเกตเห็นว่านี่เป็นคำถามเก่า แต่ฉันคิดว่าควรจะเพิ่มอีก ในฐานะที่เป็น @Manoel Galdino กล่าวในความคิดเห็นที่มักจะมีความสนใจในการทำนายข้อมูลที่มองไม่เห็น แต่คำถามนี้เป็นเรื่องเกี่ยวกับประสิทธิภาพการทำงานบนข้อมูลการฝึกอบรมและคำถามคือทำไมป่าสุ่มดำเนินการไม่ดีเกี่ยวกับข้อมูลการฝึกอบรม ? คำตอบนั้นเน้นปัญหาที่น่าสนใจด้วยตัวแยกประเภทแบบถุงซึ่งมักทำให้ฉันเดือดร้อน: การถดถอยของค่าเฉลี่ย
ปัญหาคือตัวแยกประเภทที่เป็นถุงเช่นฟอเรสต์แบบสุ่มซึ่งทำโดยการเก็บตัวอย่างบูตสแตรปจากชุดข้อมูลของคุณมีแนวโน้มที่จะทำงานได้ไม่ดีในสุดขั้ว เนื่องจากมีข้อมูลไม่มากในสุดขั้วพวกเขาจึงมีแนวโน้มที่จะเรียบ
ในรายละเอียดเพิ่มเติมโปรดจำไว้ว่าฟอเรสต์แบบสุ่มสำหรับการถดถอยเฉลี่ยการคาดการณ์ของตัวจําแนกจำนวนมาก หากคุณมีจุดเดียวซึ่งอยู่ไกลจากคนอื่น ๆ ตัวแยกประเภทจำนวนมากจะไม่เห็นมันและสิ่งเหล่านี้จะทำให้การคาดการณ์ที่ไม่อยู่ในกลุ่มตัวอย่างซึ่งอาจไม่ดีนัก ในความเป็นจริงการคาดการณ์ที่ไม่อยู่ในกลุ่มตัวอย่างเหล่านี้มีแนวโน้มที่จะดึงการทำนายสำหรับจุดข้อมูลไปสู่ค่าเฉลี่ยโดยรวม
ถ้าคุณใช้แผนภูมิการตัดสินใจเดียวคุณจะไม่มีปัญหาเดียวกันกับค่ามาก แต่การถดถอยที่เหมาะสมจะไม่เป็นเชิงเส้นอย่างใดอย่างหนึ่ง
นี่คือภาพประกอบในอาร์ข้อมูลบางอย่างถูกสร้างขึ้นซึ่งy
เป็นการผสมผสานที่ลงตัวของx
ตัวแปรห้าตัว จากนั้นทำการทำนายด้วยแบบจำลองเชิงเส้นและฟอเรสต์แบบสุ่ม จากนั้นค่าของy
ข้อมูลการฝึกอบรมจะถูกพล็อตกับการทำนาย คุณสามารถเห็นได้อย่างชัดเจนว่าฟอเรสต์แบบสุ่มกำลังทำสิ่งที่ไม่ดีในช่วงสุดขั้วเนื่องจากจุดข้อมูลที่มีค่ามากหรือน้อยมากนั้นy
หายาก
คุณจะเห็นรูปแบบเดียวกันสำหรับการคาดการณ์ข้อมูลที่มองไม่เห็นเมื่อมีการใช้ฟอเรสต์แบบสุ่มสำหรับการถดถอย ฉันไม่แน่ใจว่าจะหลีกเลี่ยงได้อย่างไร randomForest
ฟังก์ชั่นในการวิจัยมีตัวเลือกการแก้ไขอคติน้ำมันดิบcorr.bias
ที่ใช้ในการถดถอยเชิงเส้นอคติ แต่มันไม่ได้ทำงานจริงๆ
ข้อเสนอแนะยินดีต้อนรับ!
beta <- runif(5)
x <- matrix(rnorm(500), nc=5)
y <- drop(x %*% beta)
dat <- data.frame(y=y, x1=x[,1], x2=x[,2], x3=x[,3], x4=x[,4], x5=x[,5])
model1 <- lm(y~., data=dat)
model2 <- randomForest(y ~., data=dat)
pred1 <- predict(model1 ,dat)
pred2 <- predict(model2 ,dat)
plot(y, pred1)
points(y, pred2, col="blue")