Wie bereits in früheren Antworten erwähnt, liefert eine zufällige Gesamtstruktur für Regressions- / Regressionsbäume keine erwarteten Vorhersagen für Datenpunkte, die über den Bereich des Trainingsdatenbereichs hinausgehen, da sie nicht (gut) extrapoliert werden können. Ein Regressionsbaum besteht aus einer Hierarchie von Knoten, wobei jeder Knoten einen Test angibt, der für einen Attributwert ausgeführt werden soll, und jeder Blattknoten (Terminalknoten) eine Regel zur Berechnung einer vorhergesagten Ausgabe angibt. In Ihrem Fall fließt die Testbeobachtung durch die Bäume zu Blattknoten, die beispielsweise "wenn x> 335, dann y = 15" angeben und dann durch zufällige Gesamtstruktur gemittelt werden.
Hier ist ein R-Skript, das die Situation sowohl mit zufälliger Gesamtstruktur als auch mit linearer Regression visualisiert. Im Fall einer zufälligen Gesamtstruktur sind die Vorhersagen zum Testen von Datenpunkten konstant, die entweder unter dem x-Wert der niedrigsten Trainingsdaten oder über dem x-Wert der höchsten Trainingsdaten liegen.
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()