Eğitim verilerinden daha yüksek tahmin edilmeyen rastgele orman regresyonu


12

Rastgele orman regresyon modelleri oluştururken, en azından Rtahmin edilen değerin, eğitim verilerinde görülen hedef değişkenin maksimum değerini asla aşmadığını fark ettim . Örnek olarak, aşağıdaki koda bakın. Verilere mpgdayanarak tahmin etmek için bir regresyon modeli oluşturuyorum mtcars. OLS ve rastgele orman modelleri üretiyorum ve onları mpgçok iyi yakıt ekonomisine sahip olması gereken varsayımsal bir araba tahmin etmek için kullanıyorum . OLS mpgbeklendiği gibi yüksek bir tahmin ediyor, ancak rastgele bir orman tahmin etmiyor. Bunu daha karmaşık modellerde de fark ettim. Bu neden?

> 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 

İnsanların lineer regresyonlara OLS olarak başvurmaları yaygın mıdır? Her zaman OLS'u bir yöntem olarak düşündüm.
Hao Ye

1
OLS'un en azından R'de varsayılan doğrusal regresyon yöntemi olduğuna inanıyorum
Gaurav Bansal

Rasgele ağaçlar / ormanlar için tahminler, ilgili düğümdeki egzersiz verilerinin ortalamasıdır. Bu yüzden egzersiz verilerindeki değerlerden daha büyük olamaz.
Jason

1
Kabul ediyorum, ancak en az üç diğer kullanıcı tarafından cevaplandı.
HelloWorld

Yanıtlar:


12

Daha önceki cevaplarda da belirtildiği gibi, regresyon / regresyon ağaçları için rastgele orman, veri veri alanının kapsamı dışında veri noktaları için beklenen tahminler üretmez, çünkü tahmin edemezler (iyi). Bir regresyon ağacı, bir düğüm hiyerarşisinden oluşur; burada her düğüm, bir öznitelik değeri üzerinde gerçekleştirilecek bir testi belirtir ve her bir yaprak (terminal) düğümü, tahmini bir çıktıyı hesaplamak için bir kural belirler. Sizin durumunuzda, test gözlemi ağaçların arasından, örneğin "x> 335 ise, o zaman y = 15" şeklinde belirtilen yaprak düğümlerine akar ve bunlar daha sonra rastgele orman tarafından ortalaması alınır.

Burada durumu hem rastgele orman hem de doğrusal regresyon ile görselleştiren bir R betiği var. Rastgele orman durumunda, en düşük egzersiz verisi x değerinin altında veya en yüksek egzersiz verisi x değerinin üzerinde olan veri noktalarını test etmek için sabittir.

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()

Rasgele orman ve doğrusal regresyon ile ekstrapolasyon


16

Rastgele Bir Orman'ın bir OLS gibi tahmin edebileceği bir yol yoktur. Nedeni basit: Rastgele Bir Orman'dan tahminler, birkaç ağaçta elde edilen sonuçların ortalaması alınarak yapılır. Ağaçların kendileri, her bir terminal düğümündeki, yapraklardaki örneklerin ortalama değerini verir. Sonucun eğitim verisi aralığının dışında olması imkansızdır, çünkü ortalama her zaman bileşenlerinin aralığı içindedir.

Başka bir deyişle, bir ortalamanın her örnekten daha büyük (veya daha düşük) olması imkansızdır ve Rastgele Orman regresyonları ortalamayı temel alır.


11

Karar Ağaçları / Rastgele Forrest eğitim verilerinin dışında tahmin edilemez. OLS bunu yapabilmesine rağmen, bu tür tahminlere dikkatle bakılmalıdır; tespit edilen örüntü gözlemlenen aralığın dışında devam edemeyebilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.