15 votos

Regresión del bosque al azar no predicción superior a los datos de entrenamiento

Me he dado cuenta de que cuando la construcción de bosque aleatorio de los modelos de regresión, al menos en R, el valor de la predicción nunca supera el valor máximo de la variable objetivo se ve en los datos de entrenamiento. Como ejemplo, véase el código de abajo. Estoy construyendo un modelo de regresión para predecir mpg basado en el mtcars de datos. Voy a construir OLS y bosque aleatorio modelos, y los utilizan para predecir mpg de un hipotético coche que debe tener una muy buena economía de combustible. El OLS predice un alto mpg, como se esperaba, pero al azar bosque no. Me he dado cuenta de que esto es más complejo de los modelos. ¿Por qué es esto?

> 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 

17voto

ssn Puntos 472

No hay ninguna manera de un Bosque Aleatorio para extrapolar como una OLS hacer. La razón es simple: las predicciones de un Bosque Aleatorio se realiza a través de un promedio de los resultados obtenidos en varios árboles. Los árboles de salida el valor de la media de las muestras en cada nodo terminal, las hojas. Es imposible que el resultado fuera del rango de los datos de entrenamiento, porque la media es siempre dentro de la gama de constituyentes.

En otras palabras, es imposible para un promedio a ser mayor (o menor) que cada una de las muestras, y Bosques Aleatorios regresiones se basan en promedio.

15voto

Kirill Trofimov Puntos 496

Como se ha mencionado ya en respuestas anteriores, bosque aleatorio para la regresión / árboles de regresión no produce el esperado predicciones para los puntos de datos más allá del alcance de la formación del rango de datos debido a que no se puede extrapolar (bien). Un árbol de regresión consiste en una jerarquía de nodos, donde cada nodo especifica una prueba que se lleve a cabo en un valor de atributo y cada hoja (terminal) nodo especifica una regla para calcular una predicción de la salida. En su caso la prueba de la observación del flujo a través de los árboles a los nodos hoja, indicando, por ejemplo, "si x > 335, entonces y = 15", que son promediados por el bosque aleatorio.

Aquí está una R de secuencia de comandos de visualización de la situación con tanto bosque aleatorio y la regresión lineal. En el azar de bosque del caso, las predicciones son constantes para las pruebas de puntos de datos que se encuentran por debajo de los más bajos de los datos de formación de valor de x o más allá de la capacitación de los datos de valor de 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()

Extrapolating with random forest and linear regression

13voto

B.Frost Puntos 21

Árboles de decisión / Forrest al azar no se puede extrapolar fuera de los datos del entrenamiento. Y aunque OLS puede hacer esto, tales predicciones deben mirar con precaución; como no puede seguir el patrón identificado fuera del rango observado.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X