Hat jemand ein kurzes Beispiel, wie man neuronale Netze ( nnet
zum Beispiel in R) zum Zwecke der Vorhersage verwendet?
Hier ist ein Beispiel in R einer Zeitreihe
T <- seq(0,20,length=200)
Y <- 1 + 3*cos(4*T+2) +.2*T^2 + rnorm(200)
plot(T,Y,type="l")
Dies ist nur ein Beispiel, aber ich habe nervös-saisonale Daten.
War auf der Suche nach dem gleichen und bin auf diese Frage gestoßen. Da ich kein Beispiel gefunden habe, habe ich beschlossen, mein eigenes zu machen. Seien Sie sich bewusst, ich bin kein Experte für neuronale Netze oder Prognosen :)
Um Zeitreihen effektiv mit neuronalen Netzen (Netzen) zu modellieren, glaube ich, dass eine wichtige Eigenschaft, die Netze haben sollten, eine Art Speicher ist (um zu verfolgen, was in der Vergangenheit passiert ist). Daher sind einfache Feed-Forward-Netze wahrscheinlich eine schlechte Idee. Eine der Familien in Netzen, die das Gedächtnis effektiv simulieren können, ist die Familie der wiederkehrenden neuronalen Netze, und eine der bekanntesten Arten von wiederkehrenden neuronalen Netzen sind wahrscheinlich Elman-Netze (zusammen mit LSTM-Netzen (Long Short Term Memory), würde ich sagen). Um mehr über Elman-Netzwerke zu erfahren, können Sie das Originalpapier, in dem das Konzept vorgestellt wird, oder Wikipedia lesen . Kurz gesagt, sie haben eine zusätzliche Ebene namens Kontext, die als Speichertyp verwendet wird. Die folgende Abbildung ( Quelle ) veranschaulicht die Idee
Zum Glück gibt es das RSNNS-Paket in R, das Elman-Netze aufnehmen kann. Das Paket wird in Einzelheiten beschrieben hier .
Nachdem wir die Grundlagen durchgearbeitet haben, können wir sehen, wie wir ein Beispiel in R mit dem RSNNS-Paket implementieren können.
Dieser Code sollte zu der folgenden Abbildung führen
Was wir also mit dem Code gemacht haben, ist wie folgt. Zunächst haben wir ein Zeitreihenbeispiel erstellt (aus dem ARIMA-Modell). Danach haben wir das Zeitreihenbeispiel für alle Paare außer dem letzten (mit dem nächsten Punkt als letztem Punkt des Zeitreihenbeispiels) in Eingaben der Form (sw vorherige Punkte, nächster Punkt) entkoppelt / geschnitten. Mit dem Parameter sw wird das "Schiebefenster" definiert. Ich werde hier nicht darüber diskutieren, welche Größe für das Schiebefenster geeignet ist, sondern nur darauf hinweisen, dass das Schiebefenster der Größe 1 aufgrund des Elman-Netzwerks mit Speicher mehr als ein vernünftiger Ansatz ist (siehe auch diesen Beitrag ).
Nachdem die Vorbereitungen abgeschlossen sind, können wir einfach ein Elman-Netzwerk mit der elman-Funktion aufbauen. Es gibt zwei Parameter, bei denen Sie vorsichtig sein sollten. die Größe und die learnFuncParams. Mit dem Größenparameter können Sie die Größe des Netzwerks (verborgene Ebene) definieren. Die Art und Weise, wie Sie diesen Parameter auswählen, ist eher eine Kunst als eine Wissenschaft. Als Faustregel für learnFuncParams gilt, dass es klein gehalten wird, wenn dies möglich ist (Ihre Verarbeitungsleistung ermöglicht es Ihnen, es klein zu halten / Sie haben genügend Zeit zum Warten: D).
Und voila, Sie haben Ihr neuronales Netzwerk in der Lage, einen / den zukünftigen Punkt / Wert vorherzusagen. Die Vorhersagekraft dieses Ansatzes für unser Beispiel ist in der vorherigen Abbildung dargestellt. Die rote Kurve zeigt unsere simulierten Zeitreihen (ohne den letzten Punkt) und die grüne Kurve, was mit dem angepassten Elman-Netzwerk erhalten wurde. Der rote Punkt kennzeichnet den letzten Punkt (den Punkt, der während des Anpassungsprozesses nicht verwendet wurde) und den grünen Punkt, der vom angepassten Netzwerk vorhergesagt wurde. Gar nicht so schlecht :)
Dies war ein Beispiel für die Verwendung von RNNs (Elman-Netzwerken) mit R, um Vorhersagen / Prognosen zu treffen. Einige könnten argumentieren, dass RNNs nicht die besten für das Problem sind und dass es bessere nnet-Modelle für Prognosen gibt. Da ich kein Experte in dem Bereich bin, werde ich es vermeiden, diese Themen zu diskutieren.
Eine interessante Lektüre, wenn Sie mehr über RNNs erfahren möchten, ist eine kritische Überprüfung der RNNs im Sequenzlernpapier .
quelle