Zufälliger Wald ist überpassend


15

Ich versuche, Random Forest Regression zum Erlernen von Scikits zu verwenden. Das Problem ist, dass ich einen sehr hohen Testfehler erhalte:

train MSE, 4.64, test MSE: 252.25.

So sehen meine Daten aus: (blau: echte Daten, grün: vorhergesagt):

Waldrückgang gesäubert

Ich benutze 90% für das Training und 10% für den Test. Dies ist der Code, den ich verwende, nachdem ich mehrere Parameterkombinationen ausprobiert habe:

rf = rf = RandomForestRegressor(n_estimators=10, max_features=2, max_depth=1000, min_samples_leaf=1, min_samples_split=2, n_jobs=-1) 
test_mse = mean_squared_error(y_test, rf.predict(X_test))
train_mse = mean_squared_error(y_train, rf.predict(X_train))

print("train MSE, %.4f, test MSE: %.4f" % (train_mse, test_mse))
plot(rf.predict(X))
plot(y)

Welche Strategien sind möglich, um meine Anpassung zu verbessern? Kann ich noch etwas tun, um das zugrunde liegende Modell zu extrahieren? Es scheint mir unglaublich, dass sich das Modell nach so vielen Wiederholungen desselben Musters mit neuen Daten so schlecht verhält. Habe ich überhaupt Hoffnung, diese Daten anzupassen?


Trainieren Sie diese periodische Funktion mit der x-Achse als Eingabe und der y-Achse als Beschriftung für x <= 245 und testen Sie dann für x> 245? Oder interpretiere ich Ihre Handlung falsch?
Rrenaud

Art, eigentlich ist die x-Achse der Beobachtungsindex, insgesamt gibt es 300 Beobachtungen, also ab 245, dh Testdaten, die nicht zum Trainieren des Modells verwendet werden, der Eingabe-Merkmalsvektor besteht aus ganzen Zahlen, hat Form (300,2) und ähneln stark einer linearen Funktion des Beobachtungsindex, daher habe ich keine Informationen hinzugefügt, um die Frage nicht zu komplizieren.
elyase

1
Möglicherweise möchten Sie den Zyklus (den saisonalen Teil) zuerst aus Ihren Daten (und dem Trend) entfernen.
R. Prost

Haben Sie sich mit Zeitreihenanalyse befasst? Mir ist nicht klar, was sich auf Ihrer X-Achse befindet, aber es scheint mir regelmäßig zu sein. Überprüfen Sie hier und lassen Sie mich wissen, ob dies hilft: otexts.org/fpp/7/5
Bram Van Camp

Antworten:


21

Ich glaube, Sie verwenden ein falsches Werkzeug. Wenn Ihr gesamtes X dem Index entspricht, haben Sie im Grunde genommen eine abgetastete Funktion und versuchen, sie zu extrapolieren. Beim maschinellen Lernen dreht sich alles um die Interpolation der Geschichte. Es ist daher nicht verwunderlich, dass in diesem Fall ein spektakulärer Fehler auftritt.f:RR

Was Sie brauchen, ist eine Zeitreihenanalyse (dh Extrahieren des Trends, Analysieren des Spektrums und Autoregressieren oder HMMing des Rests) oder Physik (dh Überlegen, ob es eine ODE gibt, die eine solche Ausgabe erzeugt, und versuchen, ihre Parameter über konservierte Größen anzupassen).


ist es nicht maschinelles Lernen, verallgemeinerbare Modelle aus den Daten zu extrahieren? Sobald ein bestimmter Satz vorliegt, von dem die Daten gut interpoliert werden, können wir diejenigen mit besseren Extrapolations- / Generalisierungseigenschaften auswählen, die beispielsweise eine Kreuzvalidierung verwenden. Ist etwas falsch in meinem Verständnis?
Elyase

Die Extrapolation unterscheidet sich von der Verallgemeinerung. Stellen Sie sich vor, Sie sind Gegenstand eines folgenden Experiments: Sie sehen einen Bildschirm und haben eine rote und eine grüne Schaltfläche. Zuerst zeigt der Bildschirm ein Video des Raums, in dem sich eine andere Person befindet, die auf einem Bildschirm den grünen Knopf für Katze, Löwe und Tiger gedrückt und dann für Wolf und Hund den roten Knopf gedrückt hat. Auf diese Weise wurden 5 köstliche Kekse gesammelt.

1
Jetzt zeigt der Bildschirm einen Bobcat; Sie führen eine ordnungsgemäße, verallgemeinerbare Interpolation des Verlaufs durch, drücken die grüne Taste und erhalten einen Stromschlag anstelle eines Cookies. Warum ist das passiert? Denn die Lösung ist ein Kreislauf (gggrrr) und Tierbilder sind nur eine Täuschung. Sie haben dasselbe mit Ihrem Wald gemacht - haben es in eine blöde Reproduktion Ihres Trainingssets verwandelt, während Sie die wahren Informationen versteckt haben.

Gutes Beispiel, aber sehen Sie es nicht so, wie Sie es tun. In Ihrem Beispiel haben wir die folgenden Daten: ein Ziel ( goder r) und 2 Features ( index(zeitlich) und animal). Aus diesen Daten könnte ich mehrere Modelle zusammenstellen, die Merkmal 1 oder 2 (oder beiden gleich) mehr oder weniger Gewicht verleihen können. Die Kreuzvalidierung (unter der Annahme, dass genügend Daten vorliegen) sollte zu einem Modell führen, bei dem Merkmal 2 (Tier) eine geringere Bedeutung hat. Ich kann sehen, dass mein Modell die Daten überfüllt, aber ich denke immer noch, dass ich in der Lage sein sollte, ein Modell zu extrahieren, das diesem Muster folgt (weil sich das Verhalten nicht geändert hat), mit einem ausreichend großen Modellraum.
Elyase

1
Nee; Selbst wenn Sie nach mehr Daten fragen, kann der Experimentator die Täuschung der Tiere noch ausweiten und das Muster weiter verschleiern, um es nicht offensichtlich zu halten. Das heißt, eine Extrapolation ist mit dem Lernen einfach nicht möglich, da per Definition Informationen erforderlich sind, die im Training nicht vorhanden sind. Auf diese Weise müssen Sie entweder einige Annahmen anwenden oder zusätzliche Daten erfassen, damit das Problem zur Interpolation wird.

9

Das größte Problem besteht darin, dass Regressionsbäume (und darauf basierende Algorithmen wie zufällige Wälder) stückweise konstante Funktionen vorhersagen und einen konstanten Wert für Eingaben liefern, die unter jedes Blatt fallen. Dies bedeutet, dass sie bei der Extrapolation außerhalb ihres Trainingsbereichs nur denselben Wert vorhersagen, den sie für den nächstgelegenen Punkt hätten, an dem sie Trainingsdaten hatten. @mbq ist richtig, dass es spezielle Tools zum Lernen von Zeitreihen gibt, die wahrscheinlich besser wären als allgemeine Techniken des maschinellen Lernens. Zufällige Wälder sind für dieses Beispiel jedoch besonders schlecht, und andere allgemeine ML-Techniken sind wahrscheinlich viel leistungsfähiger als das, was Sie sehen. SVMs mit nichtlinearen Kerneln sind eine Option, die in den Sinn kommt. Da Ihre Funktion periodisch aufgebaut ist, empfiehlt dies auch, den Frequenzbereich zu bearbeiten.


AFAIK SVM haben das gleiche Problem der zufälligen Gesamtstruktur. Sie lassen sich außerhalb des Raums, in dem sie trainiert wurden, nicht gut vorhersagen. Wahrscheinlich neuronales Netzwerk wäre eine bessere Lösung
Donbeo

Wenn die Daten auf einer Kurve liegen und der Kern für diese Kurve geeignet ist, kann eine SVM entlang dieser Kurve extrapolieren. Wenn die Daten einen linearen Trend aufweisen, wird eine lineare SVM an die Linie angepasst und entlang dieser Linie extrapoliert. Komplexere Kernel können komplexere Verhaltensweisen anpassen und extrapolieren. Es kommt darauf an, die richtige Art von Kernel zu haben. Das macht SVMs nicht zum richtigen Werkzeug für Extrapolation und TS-Vorhersage, aber es macht sie besser als zufällige Wälder.
Daniel Mahler

3

Dies ist ein Lehrbuchbeispiel für Datenüberanpassung. Das Modell eignet sich sehr gut für trainierte Daten, kollabiert jedoch bei allen neuen Testdaten. Dies ist eine der Strategien, um dies zu beheben: Führen Sie eine zehnfache Kreuzvalidierung der Trainingsdaten durch, um die Parameter zu optimieren.

Schritt 1. Erstellen Sie mithilfe der NM-Optimierung eine MSE-Minimierungsfunktion. Ein Beispiel könnte hier zu sehen sein: http://glowingpython.blogspot.de/2011/05/curve-fitting-using-fmin.html

Schritt 2. Innerhalb dieser Minimierungsfunktion besteht das Ziel darin, die MSE zu reduzieren. Erstellen Sie dazu eine zehnfache Aufteilung der Daten, wobei ein neues Modell in neunfachen Schritten gelernt und in der zehnten Stufe getestet wird. Dieser Vorgang wird zehnmal wiederholt, um die MSE bei jeder Faltung zu erhalten. Die aggregierte MSE wird als Ergebnis des Ziels zurückgegeben.

Schritt 3. Das Fmin in Python erledigt die Iterationen für Sie. Überprüfen Sie, welche Hyperparameter für die Feinabstimmung erforderlich sind (n_estimators, max_features usw.) und übergeben Sie sie an fmin.

Das Ergebnis sind die besten Hyperparameter, die die Möglichkeit einer Überanpassung verringern.


Ja, es scheint überpassend zu sein (was Random Forest Regression normalerweise nicht tut, daher die Frage). Jetzt habe ich festgestellt, dass das Ändern der Parameter bei RF-Regressoren nur geringe Auswirkungen hat. Jetzt erfordert die Kreuzvalidierung ein zugrunde liegendes Modell, das flexibel genug ist, um optimiert zu werden. Welche Art von ML-Modellen / Algorithmen empfehlen Sie für diese Art von Daten?
Elyase

3

Einige Vorschläge:

  1. Optimieren Sie Ihre Parameter mithilfe eines Rolling-Window-Ansatzes (Ihr Modell muss optimiert werden, um die nächsten Werte in der Zeitreihe und nicht die Werte unter den gelieferten vorherzusagen.)
  2. Probieren Sie andere Modelle aus (noch einfachere Modelle mit der richtigen Featureauswahl und den richtigen Strategien für das Feature-Engineering sind möglicherweise besser für Ihr Problem geeignet).
  3. Versuchen Sie, optimale Transformationen der Zielvariablen zu lernen (stimmen Sie dies ebenfalls ab, es gibt eine negative lineare / exponentielle Tendenz, Sie können diese möglicherweise abschätzen).
  4. Spektralanalyse vielleicht
  5. Die Maxima / Minima scheinen gleich weit auseinander zu liegen. Erfahren Sie, wo sie Ihre Funktionen erhalten (keine Bedienereingaben, lassen Sie einen Algorithmus erkennen, um Verzerrungen zu beseitigen), und fügen Sie diese als Funktion hinzu. Entwickeln Sie auch eine Funktion nearest maximum. Keine Ahnung, es könnte funktionieren oder auch nicht, du kannst es nur wissen, wenn du es testest :)

Wie Daniel in seiner Antwort ausführte, wird Random Forest jedoch nicht für diese Art von Problemen geeignet sein, da es nicht in der Lage ist, Werte außerhalb des in der Zugstichprobe beobachteten Bereichs vorherzusagen. Tuning-Parameter etc. würden nirgendwo hinführen.
Tim

1
Vorschlag Nr. 2 @Tim. Und Random Forests wird mit diesen Daten nicht naiv umgehen können, aber eine clevere Feature-Extraktion könnte dafür sorgen, dass es funktioniert.
Firebug


0

Nachdem ich den obigen Beitrag gelesen habe, möchte ich eine andere Antwort geben.

Bei baumbasierten Modellen, z. B. zufälligen Gesamtstrukturen, können sie den Wert nicht über den Trainingssatz hinaus extrapolieren. Ich denke also nicht, dass es sich um ein Überanpassungsproblem handelt, sondern um eine falsche Modellierungsstrategie.

Was können wir also für die Vorhersage von Zeitreihen mit dem Baummodell tun?

Die Möglichkeit besteht darin, sie mit der linearen Regression zu kombinieren: zuerst die Zeitreihe abschneiden (oder den Trend mit der linearen Regression modellieren), dann das Residuum mit Bäumen modellieren (Residuen sind begrenzt, damit Baummodelle damit umgehen können).

Außerdem gibt es ein Baummodell, das mit einer linearen Regression kombiniert werden kann, die man als kubistisch bezeichnet. Es führt eine lineare Regression auf dem Blatt durch.


0

Wenn Sie nur innerhalb der Grenzen des Diagramms vorhersagen möchten, sollten Sie das Problem lösen, indem Sie die Beobachtungen vor dem Aufteilen des Datensatzes einfach nach dem Zufallsprinzip sortieren. Aus der dargestellten Extrapolation wird dann ein Interpolationsproblem.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.