Seperti yang telah disebutkan di jawaban sebelumnya, hutan acak untuk pohon regresi / regresi tidak menghasilkan prediksi yang diharapkan untuk titik data di luar ruang lingkup rentang data pelatihan karena mereka tidak dapat memperkirakan (well). Pohon regresi terdiri dari hierarki node, di mana setiap node menentukan tes yang akan dilakukan pada nilai atribut dan setiap node daun (terminal) menentukan aturan untuk menghitung output yang diprediksi. Dalam kasus Anda, pengamatan pengamatan mengalir melalui pohon ke simpul daun yang menyatakan, misalnya, "jika x> 335, maka y = 15", yang kemudian dirata-ratakan oleh hutan acak.
Berikut ini adalah skrip R yang memvisualisasikan situasi dengan hutan acak dan regresi linier. Dalam kasus hutan acak, prediksi konstan untuk menguji titik data yang baik di bawah nilai x data pelatihan terendah atau di atas nilai x data pelatihan tertinggi.
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()