Wednesday 18 October 2017

Weighted Moving Average Java


Net. sourceforge. openforecast. models Klasse WeightedMovingAverageModel Ein gewichtetes gleitendes Durchschnittsprognosemodell basiert auf einer künstlich konstruierten Zeitreihe, in der der Wert für einen gegebenen Zeitraum durch den gewichteten Mittelwert dieses Werts und die Werte für eine gewisse Anzahl vorhergehender Zeit ersetzt wird Zeiträume. Wie Sie vielleicht aus der Beschreibung erraten haben, ist dieses Modell am besten für Zeitreihendaten, d. H. Daten, die sich über die Zeit ändern, geeignet. Da der Prognosewert für einen gegebenen Zeitraum ein gewichteter Durchschnitt der vorangegangenen Perioden ist, wird die Prognose immer scheinbar zurückbleiben, entweder bei der Erhöhung oder Verminderung der beobachteten (abhängigen) Werte. Wenn beispielsweise eine Datenreihe einen merkbaren Aufwärtstrend aufweist, wird eine gewichtete gleitende Durchschnittsprognose generell eine Unterbewertung der Werte der abhängigen Variablen ergeben. Das gewichtete gleitende Durchschnittmodell, wie das gleitende Durchschnittsmodell, hat gegenüber anderen Prognosemodellen einen Vorteil, dass es in einer Reihe von Beobachtungen Gipfel und Mulden (oder Täler) glättet. Jedoch, wie das gleitende Durchschnittmodell, hat es auch einige Nachteile. Insbesondere erzeugt dieses Modell keine tatsächliche Gleichung. Daher ist es nicht alles, was nützlich als ein Mittel-Langstrecken-Prognose-Tool. Es kann nur zuverlässig genutzt werden, um ein paar Perioden in die Zukunft zu prognostizieren. Seit: 0.4 Autor: Steven R. Gould Felder geerbt aus der Klasse net. sourceforge. openforecast. models. AbstractForecastingModel WeightedMovingAverageModel () Erstellt ein neues gewichtetes gleitendes Durchschnittsprognosemodell. WeightedMovingAverageModel (Doppelgewichte) Erstellt ein neues gewichtetes gleitendes Durchschnittsprognosemodell unter Verwendung der angegebenen Gewichte. Prognose (double timeValue) Gibt den Prognosewert der abhängigen Variablen für den gegebenen Wert der unabhängigen Zeitvariablen zurück. GetForecastType () Gibt einen oder zwei Wortnamen dieser Art von Prognosemodell zurück. GetNumberOfPeriods () Gibt die aktuelle Anzahl von Perioden zurück, die in diesem Modell verwendet werden. GetNumberOfPredictors () Gibt die Anzahl der Prädiktoren zurück, die vom zugrunde liegenden Modell verwendet werden. SetWeights (Doppelgewichte) Setzt die Gewichte dieses gewichteten gleitenden Durchschnittsprognosemodells auf die angegebenen Gewichte. ToString () Dies sollte überschrieben werden, um eine textuelle Beschreibung des aktuellen Prognosemodells zu liefern, einschließlich, wenn möglich, alle abgeleiteten Parameter. Von der Klasse geerbte Methoden network. sourceforge. openforecast. models. AbstractTimeBasedModel WeightedMovingAverageModel Erstellt ein neues gewichtetes gleitendes Durchschnittsprognosemodell unter Verwendung der angegebenen Gewichte. Für ein gültiges zu konstruierendes Modell sollten Sie init aufrufen und einen Datensatz mit einer Reihe von Datenpunkten übergeben, wobei die Zeitvariable initialisiert wird, um die unabhängige Variable zu identifizieren. Die Größe des Gewichts-Arrays wird verwendet, um die Anzahl der Beobachtungen zu bestimmen, die verwendet werden, um den gewichteten gleitenden Durchschnitt zu berechnen. Zusätzlich wird der letzten Periode das Gewicht gegeben, das durch das erste Element des Arrays, d. H. Gewichte, definiert ist. Die Größe des Gewichts-Arrays wird auch verwendet, um die Menge zukünftiger Perioden zu bestimmen, die effektiv prognostiziert werden können. Mit einem 50-Tage-gewichteten gleitenden Durchschnitt können wir mit einer Genauigkeit nicht mehr als 50 Tage über den letzten Zeitraum, für den Daten verfügbar sind, prognostizieren. Selbst Prognosen in der Nähe des Endes dieses Bereichs sind wahrscheinlich unzuverlässig. Hinweis zu Gewichten Im Allgemeinen sollten die Gewichte, die an diesen Konstruktor übergeben werden, bis zu 1,0 addieren. Wenn jedoch die Summe der Gewichte nicht bis zu 1,0 addiert, skaliert diese Implementierung alle Gewichte proportional, so dass sie auf 1,0 addieren. Parameter: Gewichte - ein Array von Gewichten, um den historischen Beobachtungen bei der Berechnung des gewichteten gleitenden Durchschnitts zuzuordnen. WeightedMovingAverageModel Konstruiert ein neues gewichtetes gleitendes Durchschnittsprognosemodell, wobei die benannte Variable als unabhängige Variable und die angegebenen Gewichte verwendet wird. Parameter: independentVariable - der Name der unabhängigen Variablen, die in diesem Modell verwendet werden soll. Gewichte - ein Array von Gewichten, um den historischen Beobachtungen bei der Berechnung des gewichteten gleitenden Durchschnitts zuzuordnen. WeightedMovingAverageModel Erstellt ein neues gewichtetes gleitendes Durchschnittsprognosemodell. Dieser Konstruktor soll nur von Unterklassen (also geschützt) verwendet werden. Jede Unterklasse, die diesen Konstruktor verwendet, muss anschließend die (geschützte) setWeights-Methode aufrufen, um die von diesem Modell zu verwendenden Gewichte zu initialisieren. WeightedMovingAverageModel Konstruiert ein neues gewichtetes gleitendes Durchschnittsprognosemodell unter Verwendung der angegebenen unabhängigen Variablen. Parameter: independentVariable - der Name der unabhängigen Variablen, die in diesem Modell verwendet werden soll. SetWeights Setzt die Gewichte dieses gewichteten gleitenden Durchschnittsprognosemodells auf die angegebenen Gewichte. Dieses Verfahren soll nur von Unterklassen (also geschützt) und nur in Verbindung mit dem (geschützten) Ein-Argument-Konstruktor verwendet werden. Jede Unterklasse, die den Ein-Argument-Konstruktor verwendet, muss anschließend setWeights aufrufen, bevor die Methode AbstractTimeBasedModel. init (net. sourceforge. openforecast. DataSet) aufgerufen wird, um das Modell zu initialisieren. Anmerkung zu Gewichten Im allgemeinen sollten die an diese Methode übergebenen Gewichte bis zu 1,0 addieren. Wenn jedoch die Summe der Gewichte nicht bis zu 1,0 addiert, skaliert diese Implementierung alle Gewichte proportional, so dass sie auf 1,0 addieren. Parameter: Gewichte - ein Array von Gewichten, um den historischen Beobachtungen bei der Berechnung des gewichteten gleitenden Durchschnitts zuzuordnen. Gibt den Prognosewert der abhängigen Variablen für den gegebenen Wert der unabhängigen Zeitvariablen zurück. Unterklassen müssen diese Methode in einer Weise implementieren, die mit dem von ihnen implementierten Prognosemodell übereinstimmt. Unterklassen können die Methoden getForecastValue und getObservedValue verwenden, um frühere Prognosen und Beobachtungen zu erhalten. Gegeben durch: Prognose in Klasse AbstractTimeBasedModel Parameter: timeValue - der Wert der Zeitvariablen, für die ein Prognosewert erforderlich ist. Gibt den Prognosewert der abhängigen Variablen für die angegebene Zeit zurück. Throws: IllegalArgumentException - Bei unzureichenden historischen Daten - an init übergebene Beobachtungen - erzeugen Sie eine Prognose für den angegebenen Zeitwert. GetNumberOfPredictors Gibt die Anzahl der Prädiktoren zurück, die vom zugrunde liegenden Modell verwendet werden. Rückgabewerte: die Anzahl der Prädiktoren, die das zugrunde liegende Modell verwendet. GetNumberOfPeriods Gibt die aktuelle Anzahl von Perioden zurück, die in diesem Modell verwendet werden. Angegeben durch: getNumberOfPeriods in der Klasse AbstractTimeBasedModel Gibt die aktuelle Anzahl der in diesem Modell verwendeten Perioden zurück. GetForecastType Gibt einen oder zwei Wortnamen dieser Art von Prognosemodell zurück. Halten Sie diese kurz. Eine längere Beschreibung sollte in der Methode toString implementiert werden. Dies sollte überschrieben werden, um eine textuelle Beschreibung des aktuellen Prognosemodells zu liefern, wobei nach Möglichkeit alle abgeleiteten Parameter verwendet werden. Vorgegeben durch: toString im Interface ForecastingModel Overrides: toString in der Klasse AbstractTimeBasedModel Gibt eine Stringdarstellung des aktuellen Prognosemodells und seiner Parameter zurück. Ich habe im Wesentlichen ein Array von Werten wie dieses: Das obige Array ist vereinfacht, Im, das 1 Wert pro Millisekunde sammelt In meinem realen Code und ich muss die Ausgabe auf einem Algorithmus, den ich schrieb, um den nächsten Peak vor einem Zeitpunkt zu finden verarbeiten. Meine Logik schlägt fehl, weil in meinem Beispiel oben 0.36 die wahre Spitze ist, aber mein Algorithmus würde rückwärts schauen und sehen die sehr letzte Zahl 0.25 als die Spitze, als theres eine Abnahme zu 0.24 vor ihm. Das Ziel ist, diese Werte zu nehmen und einen Algorithmus auf sie, die glätten sie ein wenig, so dass ich mehr lineare Werte. (Dh: Id wie meine Ergebnisse curvy, nicht jaggedy) Ive wurde gesagt, um einen exponentiellen gleitenden durchschnittlichen Filter auf meine Werte anzuwenden. Wie kann ich dies tun Es ist wirklich schwer für mich, mathematische Gleichungen zu lesen, gehe ich viel besser mit Code. Wie verarbeite ich Werte in meinem Array, die Anwendung einer exponentiellen gleitenden Durchschnittsberechnung, um sie herauszufordern, um einen exponentiellen gleitenden Durchschnitt zu berechnen. Müssen Sie einige Zustand zu halten und Sie benötigen einen Tuning-Parameter. Dies erfordert eine kleine Klasse (vorausgesetzt, Sie verwenden Java 5 oder höher): Instantiate mit dem Decay-Parameter, die Sie wollen (kann Abstimmung sollte zwischen 0 und 1) und dann mit Average () zu filtern. Beim Lesen einer Seite auf einige mathematische Rekursion, alles, was Sie wirklich wissen müssen, wenn Sie es in Code ist, dass Mathematiker gerne Indizes in Arrays und Sequenzen mit Indizes schreiben. (Theyve einige andere Anmerkungen außerdem, die nicht helfen.) Jedoch ist die EMA ziemlich einfach, da Sie nur an einen alten Wert erinnern müssen, der keine komplizierten Zustandarrays erfordert. Beantwortet Feb 8 12 at 20:42 TKKocheran: Ziemlich viel. Isn39t es schön, wenn die Dinge einfach sein können (Wenn Sie mit einer neuen Sequenz beginnen, erhalten Sie einen neuen Mittelwert.) Beachten Sie, dass die ersten paar Begriffe in der gemittelten Sequenz um ein bisschen durch Randeffekte springen, aber Sie erhalten diese mit anderen gleitenden Durchschnitten auch. Allerdings ist ein guter Vorteil, dass Sie die gleitende durchschnittliche Logik in die Mittelung einwickeln und experimentieren können, ohne den Rest des Programms zu viel zu stören. Ndash Donal Fellows Ich habe eine harte Zeit, Ihre Fragen zu verstehen, aber ich werde versuchen, trotzdem zu beantworten. 1) Wenn Ihr Algorithmus 0,25 statt 0,36 gefunden hat, dann ist es falsch. Es ist falsch, weil es eine monotone Zunahme oder Abnahme (das ist immer nach oben oder immer nach unten). Wenn Sie ALLE Ihre Daten nicht klassifizieren, sind Ihre Datenpunkte - wie Sie sie darstellen - nichtlinear. Wenn Sie wirklich den maximalen Wert zwischen zwei Zeitpunkten finden wollen, dann schneiden Sie Ihr Array von tmin zu tmax und finden Sie das Maximum dieses Unterarrays. 2) Nun ist das Konzept der gleitenden Durchschnitte sehr einfach: vorstellen, dass ich die folgende Liste haben: 1.4, 1.5, 1.4, 1.5, 1.5. Ich kann es glätten, indem ich den Durchschnitt von zwei Zahlen: 1.45, 1.45, 1.45, 1.5. Beachten Sie, dass die erste Zahl ist der Durchschnitt von 1,5 und 1,4 (zweite und erste Zahlen) die zweite (neue Liste) ist der Durchschnitt von 1,4 und 1,5 (dritte und zweite alte Liste) die dritte (neue Liste) der Durchschnitt von 1,5 und 1,4 (Vierte und dritte), und so weiter. Ich könnte es Zeitraum drei oder vier gemacht haben, oder n. Beachten Sie, wie die Daten viel glatter sind. Ein guter Weg, um zu sehen, gleitende Durchschnitte bei der Arbeit ist, gehen Sie zu Google Finance, wählen Sie eine Aktie (versuchen Tesla Motors ziemlich volatil (TSLA)) und klicken Sie auf Technische Daten am unteren Rand des Diagramms. Wählen Sie Moving Average mit einer bestimmten Periode und Exponential gleitenden Durchschnitt, um ihre Differenzen zu vergleichen. Exponentielle gleitende Durchschnitt ist nur eine weitere Ausarbeitung dieser, aber Gewichte die älteren Daten weniger als die neuen Daten ist dies ein Weg, um die Glättung nach hinten auszugleichen. Bitte lesen Sie den Wikipedia-Eintrag. Also, dies ist eher ein Kommentar als eine Antwort, aber die kleine Kommentar-Box war nur zu klein. Viel Glück. Wenn Sie Probleme mit der Mathematik haben, könnten Sie mit einem einfachen gleitenden Durchschnitt statt exponentiell gehen. Also die Ausgabe erhalten Sie die letzten x-Terme durch x geteilt werden. Ungetestetes Pseudocode: Beachten Sie, dass Sie die Anfangs - und Endteile der Daten behandeln müssen, da deutlich, dass Sie die letzten 5 Ausdrücke nicht durchschnittlich sind, wenn Sie auf Ihrem 2. Datenpunkt sind. Außerdem gibt es effizientere Methoden, diesen gleitenden Durchschnitt (sum sum - älteste neueste) zu berechnen, aber dies ist, um das Konzept von dem, was passiert, zu bekommen. Beantwortet Feb 8 12 at 20:41 Deine Antwort 2016 Stack Exchange, Inc

No comments:

Post a Comment