การถดถอยป่าแบบสุ่มไม่คาดการณ์สูงกว่าข้อมูลการฝึกอบรม


12

ฉันสังเกตเห็นว่าเมื่อสร้างแบบจำลองการถดถอยป่าแบบสุ่มอย่างน้อยRค่าที่ทำนายจะไม่เกินค่าสูงสุดของตัวแปรเป้าหมายที่เห็นในข้อมูลการฝึกอบรม ตัวอย่างเช่นดูรหัสด้านล่าง ฉันกำลังสร้างแบบจำลองการถดถอยเพื่อทำนายmpgตามmtcarsข้อมูล ฉันสร้าง OLS และโมเดลป่าไม้แบบสุ่มและใช้มันในการทำนายmpgสำหรับรถยนต์สมมุติที่ควรมีการประหยัดเชื้อเพลิงที่ดีมาก OLS ทำนายป่าสูงmpgตามที่คาดไว้ แต่ป่าสุ่มไม่ได้ ฉันสังเกตเห็นสิ่งนี้ในรูปแบบที่ซับซ้อนมากขึ้นเช่นกัน ทำไมนี้

> library(datasets)
> library(randomForest)
> 
> data(mtcars)
> max(mtcars$mpg)
[1] 33.9
> 
> set.seed(2)
> fit1 <- lm(mpg~., data=mtcars) #OLS fit
> fit2 <- randomForest(mpg~., data=mtcars) #random forest fit
> 
> #Hypothetical car that should have very high mpg
> hypCar <- data.frame(cyl=4, disp=50, hp=40, drat=5.5, wt=1, qsec=24, vs=1, am=1, gear=4, carb=1)
> 
> predict(fit1, hypCar) #OLS predicts higher mpg than max(mtcars$mpg)
      1 
37.2441 
> predict(fit2, hypCar) #RF does not predict higher mpg than max(mtcars$mpg)
       1 
30.78899 

เป็นเรื่องปกติที่คนจะอ้างถึงการถดถอยเชิงเส้นในฐานะ OLS หรือไม่? ฉันคิดว่า OLS เป็นวิธีการเสมอ
Hao Ye

1
ฉันเชื่อว่า OLS เป็นวิธีการเริ่มต้นของการถดถอยเชิงเส้นอย่างน้อยใน R.
Gaurav Bansal

สำหรับต้นไม้ / ป่าสุ่มการคาดการณ์คือค่าเฉลี่ยของข้อมูลการฝึกอบรมในโหนดที่เกี่ยวข้อง ดังนั้นมันจึงไม่สามารถใหญ่กว่าค่าในข้อมูลการฝึกอบรม
เจสัน

1
ฉันเห็นด้วย แต่ได้รับคำตอบจากผู้ใช้อย่างน้อยสามคน
HelloWorld

คำตอบ:


12

เนื่องจากมีการกล่าวถึงแล้วในคำตอบก่อนหน้านี้ฟอเรสต์แบบสุ่มสำหรับต้นไม้การถดถอย / การถดถอยไม่ได้คาดการณ์จุดข้อมูลที่อยู่นอกเหนือขอบเขตของช่วงข้อมูลการฝึกอบรมเนื่องจากไม่สามารถคาดการณ์ได้ แผนผังการถดถอยประกอบด้วยลำดับชั้นของโหนดที่แต่ละโหนดระบุการทดสอบที่จะดำเนินการกับค่าคุณลักษณะและแต่ละโหนด leaf (เทอร์มินัล) ระบุกฎเพื่อคำนวณเอาต์พุตที่คาดการณ์ไว้ ในกรณีของคุณการสังเกตการทดสอบจะไหลผ่านต้นไม้ไปยังโหนดใบที่ระบุเช่น "ถ้า x> 335 จากนั้น y = 15" ซึ่งจะถูกเฉลี่ยโดยฟอเรสต์แบบสุ่ม

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

library(datasets)
library(randomForest)
library(ggplot2)
library(ggthemes)

# Import mtcars (Motor Trend Car Road Tests) dataset
data(mtcars)

# Define training data
train_data = data.frame(
    x = mtcars$hp,  # Gross horsepower
    y = mtcars$qsec)  # 1/4 mile time

# Train random forest model for regression
random_forest <- randomForest(x = matrix(train_data$x),
                              y = matrix(train_data$y), ntree = 20)
# Train linear regression model using ordinary least squares (OLS) estimator
linear_regr <- lm(y ~ x, train_data)

# Create testing data
test_data = data.frame(x = seq(0, 400))

# Predict targets for testing data points
test_data$y_predicted_rf <- predict(random_forest, matrix(test_data$x)) 
test_data$y_predicted_linreg <- predict(linear_regr, test_data)

# Visualize
ggplot2::ggplot() + 
    # Training data points
    ggplot2::geom_point(data = train_data, size = 2,
                        ggplot2::aes(x = x, y = y, color = "Training data")) +
    # Random forest predictions
    ggplot2::geom_line(data = test_data, size = 2, alpha = 0.7,
                       ggplot2::aes(x = x, y = y_predicted_rf,
                                    color = "Predicted with random forest")) +
    # Linear regression predictions
    ggplot2::geom_line(data = test_data, size = 2, alpha = 0.7,
                       ggplot2::aes(x = x, y = y_predicted_linreg,
                                    color = "Predicted with linear regression")) +
    # Hide legend title, change legend location and add axis labels
    ggplot2::theme(legend.title = element_blank(),
                   legend.position = "bottom") + labs(y = "1/4 mile time",
                                                      x = "Gross horsepower") +
    ggthemes::scale_colour_colorblind()

การประมาณด้วยป่าสุ่มและการถดถอยเชิงเส้น


16

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

กล่าวอีกนัยหนึ่งมันเป็นไปไม่ได้ที่ค่าเฉลี่ยจะใหญ่กว่า (หรือต่ำกว่า) ทุกตัวอย่างและการถดถอยแบบป่าสุ่มขึ้นอยู่กับค่าเฉลี่ย


11

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.