Zufällige Waldregression, die nicht höher als die Trainingsdaten ist

12

Ich habe festgestellt, dass beim Erstellen zufälliger Waldregressionsmodelle, zumindest in R, der vorhergesagte Wert niemals den in den Trainingsdaten angezeigten Maximalwert der Zielvariablen überschreitet. Ein Beispiel finden Sie im folgenden Code. Ich erstelle ein Regressionsmodell, um mpgbasierend auf den mtcarsDaten Vorhersagen zu treffen . Ich baue OLS- und zufällige Waldmodelle und verwende sie, um mpgein hypothetisches Auto vorherzusagen , das einen sehr guten Kraftstoffverbrauch haben sollte. Das OLS sagt mpgerwartungsgemäß ein Hoch voraus, ein zufälliger Wald jedoch nicht. Ich habe dies auch bei komplexeren Modellen bemerkt. Warum ist das?

> 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 
Gaurav Bansal
quelle
Ist es üblich, dass Menschen lineare Regressionen als OLS bezeichnen? Ich habe OLS immer als Methode angesehen.
Hao Ye
1
Ich glaube, OLS ist die Standardmethode der linearen Regression, zumindest in R.
Gaurav Bansal
Für zufällige Bäume / Wälder sind die Vorhersagen der Durchschnitt der Trainingsdaten im entsprechenden Knoten. Es kann also nicht größer sein als die Werte in den Trainingsdaten.
Jason
1
Ich stimme zu, aber es wurde von mindestens drei anderen Benutzern beantwortet.
HelloWorld

Antworten:

12

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()

Extrapolation mit zufälliger Gesamtstruktur und linearer Regression

Tuomastik
quelle
16

Es gibt keine Möglichkeit für einen zufälligen Wald, wie bei einem OLS zu extrapolieren. Der Grund ist einfach: Die Vorhersagen aus einem zufälligen Wald werden durch Mittelung der in mehreren Bäumen erzielten Ergebnisse erstellt. Die Bäume selbst geben den Mittelwert der Abtastwerte in jedem Endknoten, den Blättern, aus. Es ist unmöglich, dass das Ergebnis außerhalb des Bereichs der Trainingsdaten liegt, da der Durchschnitt immer innerhalb des Bereichs seiner Bestandteile liegt.

Mit anderen Worten, es ist unmöglich, dass ein Durchschnitt größer (oder niedriger) als jede Stichprobe ist, und die Regressionen der zufälligen Wälder basieren auf der Mittelwertbildung.

Firebug
quelle
11

Entscheidungsbäume / Random Forrest können nicht außerhalb der Trainingsdaten extrapoliert werden. Und obwohl OLS dies kann, sollten solche Vorhersagen mit Vorsicht betrachtet werden. da das identifizierte Muster möglicherweise nicht außerhalb des beobachteten Bereichs fortgesetzt wird.

B.Frost
quelle