Ich habe das Caret-Paket in R verwendet, um Vorhersagemodelle für Klassifizierung und Regression zu erstellen. Caret bietet eine einheitliche Oberfläche, um Modell-Hyperparameter durch Cross-Validierung oder Boot-Strapping zu optimieren. Wenn Sie beispielsweise ein einfaches Modell für die Klassifizierung der nächsten Nachbarn erstellen, wie viele Nachbarn sollten Sie verwenden? 2? 10? 100? Caret hilft Ihnen bei der Beantwortung dieser Frage, indem Sie Ihre Daten erneut abtasten, verschiedene Parameter ausprobieren und dann die Ergebnisse aggregieren, um zu entscheiden, welche die beste Vorhersagegenauigkeit ergeben.
Ich mag diesen Ansatz, weil er eine robuste Methodik für die Auswahl von Modell-Hyperparametern bietet. Wenn Sie die endgültigen Hyperparameter ausgewählt haben, liefert er eine kreuzvalidierte Schätzung, wie gut das Modell ist, wobei die Genauigkeit für Klassifizierungsmodelle verwendet wird und RMSE für Regressionsmodelle.
Ich habe jetzt einige Zeitreihendaten, für die ich ein Regressionsmodell erstellen möchte, wahrscheinlich unter Verwendung einer zufälligen Gesamtstruktur. Was ist angesichts der Art der Daten eine gute Technik, um die Vorhersagegenauigkeit meines Modells zu bewerten? Wenn zufällige Gesamtstrukturen nicht wirklich für Zeitreihendaten gelten, wie lässt sich dann ein genaues Ensemblemodell für die Zeitreihenanalyse erstellen?
Antworten:
Die "klassische" k-fache Kreuzvalidierungstechnik basiert auf der Tatsache, dass jede Stichprobe im verfügbaren Datensatz (k-1) -mal verwendet wird, um ein Modell zu trainieren, und einmal, um es zu testen. Da es sehr wichtig ist, Zeitreihenmodelle für "zukünftige" Daten zu validieren, trägt dieser Ansatz nicht zur Stabilität des Modells bei.
Eine wichtige Eigenschaft vieler (meist?) Zeitreihen ist die Korrelation zwischen den benachbarten Werten. Wie von IrishStat ausgeführt, spielt diese Korrelation (oder mangelnde Unabhängigkeit) eine wichtige Rolle, wenn Sie frühere Messwerte als unabhängige Variablen Ihres Modellkandidaten verwenden. Dies ist ein weiterer Grund, warum die k-fache Kreuzvalidierung keine gute Idee ist.
Eine Möglichkeit, dieses Problem zu lösen, besteht darin, die Daten zu "überbemustern" und zu dekorrelieren. Wenn der Dekorrelationsprozess erfolgreich ist, ist die Verwendung der Kreuzvalidierung für Zeitreihen weniger problematisch. Es wird jedoch das Problem der Validierung des Modells mit zukünftigen Daten nicht lösen
Klarstellungen
Mit der Validierung des Modells für zukünftige Daten meine ich, das Modell zu konstruieren, auf neue Daten zu warten, die während der Modellkonstruktion nicht verfügbar waren, zu testen, zu verfeinern usw. und sie für diese neuen Daten zu validieren .
Mit Überabtastung der Daten meine ich das Sammeln von Zeitreihendaten mit einer Frequenz, die viel höher ist als praktisch erforderlich. Zum Beispiel: Aktienkurse alle 5 Sekunden abtasten, wenn Sie wirklich an stündlichen Änderungen interessiert sind. Wenn ich hier "Sampling" sage, meine ich nicht "Interpolieren", "Schätzen" usw. Wenn die Daten nicht mit höherer Frequenz gemessen werden können, ist diese Technik bedeutungslos
quelle
http://robjhyndman.com/researchtips/crossvalidation/ enthält einen schnellen Tipp zur Kreuzvalidierung von Zeitreihen. Hinsichtlich der Verwendung einer zufälligen Gesamtstruktur für Zeitreihendaten ... ich bin mir nicht sicher, obwohl es eine seltsame Wahl zu sein scheint, da das Modell mit Bootstrap-Beispielen ausgestattet ist. Natürlich gibt es klassische Zeitreihenmethoden (z. B. ARIMA) und ML-Techniken wie Neuronale Netze ( Beispiel pdf ). Vielleicht können einige der Zeitreihenexperten kommentieren, wie gut ML-Techniken im Vergleich zu zeitreihenspezifischen Algorithmen funktionieren.
quelle
Hier ist ein Beispielcode für die Kreuzvalidierung von Zeitreihenmodellen. Ich habe diesen Code in meinem Blog erweitert und das foreach-Paket integriert , um die Dinge zu beschleunigen und einen möglichen xreg-Ausdruck bei der Kreuzvalidierung zu berücksichtigen.
Hier ist eine Kopie des Codes aus Rob Hyndmans Blog:
quelle
Wenn Sie Zeitreihendaten haben, liegt möglicherweise ein Problem mit Freiheitsgraden vor. Wenn Sie beispielsweise 4 Beobachtungen in stündlichen Abständen durchführen und sich dann für die Verwendung von 241 Beobachtungen in Abständen von 1 Minute entscheiden, haben Sie 241 Beobachtungen, die jedoch nicht unbedingt unabhängig voneinander sind. Wenn Sie diese 241 Werte / Messungen an ein Analysepaket senden, kann das Paket davon ausgehen, dass es sich um 241 unabhängige Werte handelt, während es seine besondere Magie ausführt. Wenn Sie Zeitreihendaten haben, müssen Sie möglicherweise Ihre Analysen aktualisieren. Ich kenne das Programm nicht, auf das Sie sich beziehen, aber es ist eine vernünftige Vermutung von meiner Seite (ich könnte mich irren!), Dass es sich wahrscheinlich nicht um Tests (F-Tests / T-Tests ... usw.) handelt, die auf Ihre Problemmenge zutreffen.
quelle
Ich kann Ihnen 2 interessante Artikel empfehlen, die online zu lesen sind. 1. Gestreamtes Lernen: One-Pass-SVMs von Piyush Rai, Hal Daum´e III, Suresh Venkatasubramanian. 2. Streaming k-means approximation von Nir Ailon
Hoffe es klärt dich ein wenig über deine Vorstellungen auf
quelle