Regressão aleatória da floresta não prevê mais do que dados de treinamento


12

Percebi que, ao criar modelos aleatórios de regressão florestal, pelo menos em R, o valor previsto nunca excede o valor máximo da variável de destino vista nos dados de treinamento. Como um exemplo, veja o código abaixo. Estou construindo um modelo de regressão para prever com mpgbase nos mtcarsdados. Eu construo modelos florestais aleatórios e OLS e os uso para prever mpgum carro hipotético que deve ter uma economia de combustível muito boa. O OLS prevê uma mpgfloresta alta , como esperado, mas não aleatória. Também notei isso em modelos mais complexos. Por que é isso?

> 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 

É comum que as pessoas se refiram às regressões lineares como OLS? Eu sempre pensei no OLS como um método.
Hao Ye

11
Acredito OLS é o método padrão de regressão linear, pelo menos em R.
Gaurav Bansal

Para árvores / florestas aleatórias, as previsões são a média dos dados de treinamento no nó correspondente. Portanto, não pode ser maior que os valores nos dados de treinamento.
Jason

11
Concordo, mas foi respondido por pelo menos três outros usuários.
HelloWorld

Respostas:


12

Como já foi mencionado nas respostas anteriores, a floresta aleatória para árvores de regressão / regressão não produz previsões esperadas para pontos de dados além do escopo do intervalo de dados de treinamento porque eles não podem extrapolar (bem). Uma árvore de regressão consiste em uma hierarquia de nós, em que cada nó especifica um teste a ser executado em um valor de atributo e cada nó folha (terminal) especifica uma regra para calcular uma saída prevista. No seu caso, a observação de teste flui através das árvores para os nós das folhas indicando, por exemplo, "se x> 335, então y = 15", que são então calculados pela floresta aleatória.

Aqui está um script R que visualiza a situação com floresta aleatória e regressão linear. No caso de floresta aleatória, as previsões são constantes para testar pontos de dados que estão abaixo do valor x mais baixo dos dados de treinamento ou acima do valor x mais alto dos dados de treinamento.

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

Extrapolando com floresta aleatória e regressão linear


16

Não há como uma Floresta Aleatória extrapolar como um OLS. O motivo é simples: as previsões de uma Floresta Aleatória são feitas através da média dos resultados obtidos em várias árvores. As próprias árvores produzem o valor médio das amostras em cada nó terminal, as folhas. É impossível que o resultado esteja fora do intervalo dos dados de treinamento, porque a média está sempre dentro do intervalo de seus constituintes.

Em outras palavras, é impossível que uma média seja maior (ou menor) que todas as amostras, e as regressões de Florestas Aleatórias são baseadas na média.


11

Árvores de decisão / Forrest aleatório não podem extrapolar fora dos dados de treinamento. E embora o OLS possa fazer isso, essas previsões devem ser analisadas com cautela; pois o padrão identificado pode não continuar fora da faixa observada.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.