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