이전 답변에서 이미 언급했듯이 회귀 / 회귀 트리의 임의 포리스트는 외삽 (잘) 할 수 없기 때문에 훈련 데이터 범위 범위를 벗어난 데이터 포인트에 대한 예측을 생성하지 않습니다. 회귀 트리는 노드의 계층 구조로 구성되며, 각 노드는 속성 값에 대해 수행 할 테스트를 지정하고 각 리프 (터미널) 노드는 예측 된 출력을 계산하기위한 규칙을 지정합니다. 귀하의 경우 테스트 관찰은 나무를 통과하여 잎 노드 (예 : "x> 335, y = 15")를 나타내는 임의의 숲에 의해 평균화됩니다.
다음은 임의 포리스트와 선형 회귀 모두를 사용하여 상황을 시각화하는 R 스크립트입니다. 랜덤 포레스트의 경우, 가장 낮은 훈련 데이터 x- 값 이하 또는 가장 높은 훈련 데이터 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()