훈련 데이터보다 높지 않은 임의의 포리스트 회귀 분석


12

적어도에서에서 임의의 포리스트 회귀 모델을 작성할 때 R예측 값이 훈련 데이터에 표시된 대상 변수의 최대 값을 절대 초과하지 않는 것으로 나타났습니다. 예를 들어 아래 코드를 참조하십시오. 데이터를 mpg기반으로 예측하는 회귀 모델을 작성 중입니다 mtcars. 나는 OLS와 랜덤 포레스트 모델을 만들고 그것들을 사용하여 mpg연비가 좋은 가상 자동차 를 예측 합니다. OLS는 mpg예상대로 높은 값을 예측 하지만 임의 포리스트는 그렇지 않습니다. 나는 더 복잡한 모델에서도 이것을 발견했습니다. 왜 이런거야?

> library(datasets)
> library(randomForest)
> 
> data(mtcars)
> max(mtcars$mpg)
[1] 33.9
> 
> set.seed(2)
> fit1 <- lm(mpg~., data=mtcars) #OLS fit
> fit2 <- randomForest(mpg~., data=mtcars) #random forest fit
> 
> #Hypothetical car that should have very high mpg
> hypCar <- data.frame(cyl=4, disp=50, hp=40, drat=5.5, wt=1, qsec=24, vs=1, am=1, gear=4, carb=1)
> 
> predict(fit1, hypCar) #OLS predicts higher mpg than max(mtcars$mpg)
      1 
37.2441 
> predict(fit2, hypCar) #RF does not predict higher mpg than max(mtcars$mpg)
       1 
30.78899 

사람들이 선형 회귀를 OLS로 언급하는 것이 일반적입니까? 저는 항상 OLS를 방법으로 생각했습니다.
Hao Ye

1
나는 OLS 적어도 R.에서, 선형 회귀의 기본 방법입니다 생각
Gaurav 반살

랜덤 트리 / 포리스트의 경우 예측은 해당 노드의 트레이닝 데이터 평균입니다. 따라서 훈련 데이터의 값보다 클 수 없습니다.
Jason

1
동의하지만 적어도 세 명의 다른 사용자가 답변했습니다.
HelloWorld

답변:


12

이전 답변에서 이미 언급했듯이 회귀 / 회귀 트리의 임의 포리스트는 외삽 (잘) 할 수 없기 때문에 훈련 데이터 범위 범위를 벗어난 데이터 포인트에 대한 예측을 생성하지 않습니다. 회귀 트리는 노드의 계층 구조로 구성되며, 각 노드는 속성 값에 대해 수행 할 테스트를 지정하고 각 리프 (터미널) 노드는 예측 된 출력을 계산하기위한 규칙을 지정합니다. 귀하의 경우 테스트 관찰은 나무를 통과하여 잎 노드 (예 : "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()

랜덤 포레스트 및 선형 회귀로 외삽


16

랜덤 포레스트로 OLS처럼 외삽 할 방법은 없습니다. 그 이유는 간단합니다. 랜덤 포리스트의 예측은 여러 트리에서 얻은 결과를 평균화하여 수행됩니다. 나무 자체는 각 터미널 노드에서 샘플의 평균 값인 잎을 출력합니다. 평균이 항상 구성 요소 범위 내에 있기 때문에 결과가 교육 데이터 범위를 벗어나는 것은 불가능합니다.

다시 말해, 평균이 모든 표본보다 더 크거나 더 낮은 것은 불가능하며 랜덤 포레스트 회귀 분석은 평균화를 기반으로합니다.


11

의사 결정 트리 / 임의의 포레스트는 훈련 데이터 외부에서 추정 할 수 없습니다. OLS가이를 수행 할 수 있지만 이러한 예측은주의해서 살펴 봐야합니다. 식별 된 패턴이 관찰 된 범위를 벗어나지 않을 수 있기 때문입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.