Випадкова регресія лісу, яка не прогнозує вище, ніж дані про навчання


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 - метод за замовчуванням лінійної регресії, принаймні в Р.
Гаурав Бансал

Для випадкових дерев / лісу прогнози - це середнє значення навчальних даних у відповідному вузлі. Таким чином, він не може бути більшим, ніж значення у навчальних даних.
Джейсон

1
Я згоден, але на нього відповіли щонайменше троє користувачів.
HelloWorld

Відповіді:


12

Як вже було сказано в попередніх відповідях, випадковий ліс для дерев регресії / регресії не дає очікуваних прогнозів для точок даних, що виходять за межі діапазону даних про навчання, оскільки вони не можуть екстраполювати (добре). Дерево регресії складається з ієрархії вузлів, де кожен вузол визначає тест, який слід здійснити на значення атрибута, а кожен вузол листа (терміналу) визначає правило для обчислення прогнозованого виходу. У вашому випадку тестування спостереження протікає через дерева до листяних вузлів, вказуючи, наприклад, "якщо x> 335, то y = 15", які потім усереднюються випадковим лісом.

Ось сценарій R, який візуалізує ситуацію як з випадковим лісом, так і з лінійною регресією. У випадковому випадку лісу прогнози є постійними для тестування точок даних, які або нижче найнижчого значення х навчальних даних, або вище найвищого значення навчальних даних.

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 може це зробити, на такі прогнози слід дивитися з обережністю; оскільки ідентифікована закономірність може не тривати поза спостережуваним діапазоном.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.