Daha önceki cevaplarda da belirtildiği gibi, regresyon / regresyon ağaçları için rastgele orman, veri veri alanının kapsamı dışında veri noktaları için beklenen tahminler üretmez, çünkü tahmin edemezler (iyi). Bir regresyon ağacı, bir düğüm hiyerarşisinden oluşur; burada her düğüm, bir öznitelik değeri üzerinde gerçekleştirilecek bir testi belirtir ve her bir yaprak (terminal) düğümü, tahmini bir çıktıyı hesaplamak için bir kural belirler. Sizin durumunuzda, test gözlemi ağaçların arasından, örneğin "x> 335 ise, o zaman y = 15" şeklinde belirtilen yaprak düğümlerine akar ve bunlar daha sonra rastgele orman tarafından ortalaması alınır.
Burada durumu hem rastgele orman hem de doğrusal regresyon ile görselleştiren bir R betiği var. Rastgele orman durumunda, en düşük egzersiz verisi x değerinin altında veya en yüksek egzersiz verisi x değerinin üzerinde olan veri noktalarını test etmek için sabittir.
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()