Diskussion zum Artikel "Wie man ONNX-Modelle in MQL5 verwendet" - Seite 2

 
Quantum #:

Beachten Sie im 1. Kommentar des Videos, dass Sie explizit die Tensorflow-Version 2.10.0 angeben müssen

Danke, ich meine

Maxim Dmitrievsky #:
Es macht keinen Sinn, hier zu experimentieren, denn eine solche Prognose unterscheidet sich nicht von einer naiven Prognose (der Wert des vorherigen Schlusskurses wird als Prognose genommen). In diesem Fall erhält man tatsächlich fast den kleinsten Lernfehler (RMS), was nichts über die Vorhersagefähigkeit des Modells aussagt. Vielmehr handelt es sich um ein lehrreiches Beispiel auf ONNX, dass auch komplexe Architekturen leicht auf das Terminal übertragen werden können. Ich weiß nicht, was die Autoren des Artikels über die Erforschung neuronaler Netzarchitekturen für die Zeitreihenprognose geraucht haben :) hier ist entweder eine korrekte Schätzung erforderlich oder eine Klassifizierung anstelle einer Regression.

Erläutern Sie bitte das Beispiel aus dem Bild, bei dem die anderen 20% der Testkerzen beteiligt sind. Ist es ein Forward? Warum stimmt die Vorhersage fast vollständig mit den tatsächlichen Kursen überein (dem Bild nach zu urteilen, sieht es aus wie zwei Kerzen, nur eine ist um einen Balken verschoben), aber der Tester ist ein bisschen traurig?

 
Ivan Butko #:

Bitte erläutern Sie das Beispiel aus dem Bild, bei dem die anderen 20 % der Testkerzen beteiligt sind. Handelt es sich um einen Forward? Warum stimmt die Prognose fast vollständig mit den aktuellen Kursen überein (nach dem Bild zu urteilen, sieht es aus wie zwei Kerzen, nur eine ist um einen Balken verschoben), aber im Tester gibt es eine gewisse Traurigkeit?

Sie haben Ihre eigene Frage beantwortet, nämlich dass Sie einen nachlaufenden MA als Prognose erhalten (normalerweise mit einer einzigen Verschiebung nach hinten). Dies ist ein bekannter Trick beim Training mit Standardmetriken, sie werden mit diesem Ergebnis minimiert.

Oben habe ich einen Link eingefügt, wo man über andere Metriken lesen kann.
 

https://stackoverflow.com/questions/65316205/implementation-os-nmae-as-metric-with-keras

from keras import backend as K
def NMSE_metric(y_true, y_pred):
    nmse = K.square(y_true - y_pred)/K.square(y_true+1 e-8)
    return nmse
#define the model
model = Sequential()
model.add(Conv1D(filters=256, kernel_size=2,activation='relu',padding = 'same',input_shape=(120,1)))
model.add(MaxPooling1D(pool_size=2))
model.add(LSTM(100, return_sequences = True))
model.add(Dropout(0.3))
model.add(LSTM(100, return_sequences = False))
model.add(Dropout(0.3))
model.add(Dense(units=1, activation = 'sigmoid'))
model.compile(optimizer='adam', loss= 'mse' , metrics = [NMSE_metric])


Implementation os NMAE as metric with Keras
Implementation os NMAE as metric with Keras
  • 2020.12.16
  • Patrick Luiz Patrick Luiz 1
  • stackoverflow.com
To do so, I'm trying with this code: The NNet I'm building is this: The problem is that NMSE_metric just gave inf. Any hint?
 
Maxim Dmitrievsky #:

Sie haben Ihre eigene Frage dahingehend beantwortet, dass Sie eine verzögerte MA als Vorhersage erhalten (normalerweise mit einer einfachen Rückwärtsverschiebung). Dies ist ein bekannter Trick beim Training mit Standardmetriken, sie werden mit diesem Ergebnis minimiert.

Oben habe ich einen Link eingefügt, wo man über andere Metriken lesen kann.

Es ist ein Artikel zu diesem Thema erforderlich.

 
Quantum #:

Es wird ein Artikel zu diesem Thema benötigt.

Offensichtlich sind Metriken aus dem Energiebereich auch nicht geeignet :) ich weiß keine gute Lösung, also bin ich auf Klassifizierung umgestiegen.
 
Maxim Dmitrievsky #:
Offensichtlich passen auch Metriken aus der Energiewirtschaft nicht :) Ich kenne keine gute Lösung, also bin ich zur Klassifizierung übergegangen.

Wenn man bei Google nach der besten Vorhersagemetrik sucht, wird MAPE (mittlerer absoluter Fehler in Prozent) angezeigt.

Die Leute fragen auch
Was ist die gebräuchlichste Kennzahl für die Prognosegenauigkeit
?
MAPE: Mean Absolute Percentage Error (mittlerer absoluter prozentualer Fehler) ist die am weitesten verbreitete Kennzahl zur Überprüfung der Vorhersagegenauigkeit. Sie gehört zu den skalenunabhängigen prozentualen Fehlern und kann für den Vergleich von Reihen auf verschiedenen Skalen verwendet werden.

Um Metriken explizit bei der Optimierung von Keras-Modellen zu verwenden, sollten sie explizit als Verlustfunktion angegeben werden, nicht wie in #13.

Eine Implementierung von über 100 Regressionsmetriken in Python ist hier zu finden (Akaike Information Criterion, Aitchison distance, Amemiya's Adjusted R-squared, Amemiya's Prediction Criterion, Bias as and given by Gupta, Bayesian Information Criterion, Brier score, Pearson correlation coefficient, Centered root-mean-square (RMS) difference, Decomposed MSE developed by Kobayashi and Salam...).

Beispiel mit der Optimierung der MAPE-Metrik (Keras sollte anstelle von Numpy-Mathematikfunktionen verwendet werden, da Tensoren).

# example from https://github.com/AtrCheema/SeqMetrics/blob/master/SeqMetrics/_rgr.py
# Mean Absolute Percentage Error (MAPE)
# The MAPE is often used when the quantity to predict is known to remain way above zero_.
# It is useful when the size or size of a prediction variable is significant in evaluating the accuracy of a prediction_.
# It has advantages f scale-independency and interpretability.
# However, it has the significant disadvantage that it produces infinite or undefined values for zero or close-to-zero actual values_.
# .. _zero:
# https://doi.org/10.1016/j.neucom.2015.12.114 // Mean Absolute Percentage Error for regression models
# .. _prediction:
# https://doi.org/10.1088/1742-6596/930/1/012002 // Forecasting Error Calculation with Mean Absolute Deviation and Mean Absolute Percentage Error
# .. _values:
# https://doi.org/10.1016/j.ijforecast.2015.12.003 // A new metric of absolute percentage error for intermittent demand forecasts

from keras import backend as K
def MAPE_metric(y_true, y_pred):
    return (K.mean(K.abs((y_true - y_pred) / (y_true+1e-8)) * 100))

#define the model
model = Sequential()
model.add(Conv1D(filters=256, kernel_size=2,activation='relu',padding = 'same',input_shape=(120,1)))
model.add(MaxPooling1D(pool_size=2))
model.add(LSTM(100, return_sequences = True))
model.add(Dropout(0.3))
model.add(LSTM(100, return_sequences = False))
model.add(Dropout(0.3))
model.add(Dense(units=1, activation = 'sigmoid'))
model.compile(optimizer='adam', loss=MAPE_metric , metrics = [MAPE_metric])

So sieht die Optimierung aus

Vorhersage-Graph:


Die Verwendung von MAPE in der Optimierung führte hier allerdings auch zu einer Verschiebung.

Vielleicht müssen wir komplexere Optimierungsrichtungen in Form von Produkten von Metriken in Betracht ziehen.

Das Thema erfordert detaillierte Forschung.

Обсуждение статьи "Использование ONNX-моделей в MQL5"
Обсуждение статьи "Использование ONNX-моделей в MQL5"
  • 2023.03.29
  • www.mql5.com
Опубликована статья Использование ONNX-моделей в MQL5 : Автор: MetaQuotes...
 
Quantum #:

Google für die beste Vorhersagemetrik zeigt MAPE (mittlerer absoluter Fehler in Prozent)

Um Metriken explizit bei der Optimierung von Keras-Modellen zu verwenden, sollten sie explizit als Verlustfunktion angegeben werden, nicht wie in #13.

Die Implementierung von mehr als 100 Regressionsmetriken in Python finden Sie hier (Akaike Information Criterion, Aitchison distance, Amemiya's Adjusted R-squared, Amemiya's Prediction Criterion, Bias as and given by Gupta, Bayesian Information Criterion, Brier score, Pearson correlation coefficient, Centered root-mean-square (RMS) difference, Decomposed MSE developed by Kobayashi and Salam...).

Wenn MAPE im Optimierungsprozess verwendet wurde, kam es jedoch auch hier zu einer Verschiebung.

Vielleicht müssen wir komplexere Optimierungsrichtungen in Form von Produkten von Metriken in Betracht ziehen.

Das Thema erfordert eine detaillierte Untersuchung.

IMHO liegt das Problem nicht in der Metrik, sondern in der Struktur der für die Vorhersage ausgewählten Daten - in diesem Fall wurde für das Beispiel der "einfachste" Satz von Stichproben genommen. Versuchen Sie z.B., Vektoren durch den Einbettungsraum zu stichprobenartig zu erfassen (nehmen Sie Stichproben mit einem Schritt, bei dem die Autokorrelation der Reihe verschwindet) - Sie werden eine Prognose erhalten, die der realen ähnlicher ist - das bedeutet nicht nur das Fehlen einer MA-ähnlichen Verzögerung, sondern auch, dass sie manchmal sehr falsch sein wird ;-).

Wenn man Teile der Reihe ohne Nachrichtenhintergrund herausbeißt und zusammenklebt, sollte das Ergebnis akzeptabel sein.

 
Stanislav Korotky #:

IMHO liegt das Problem nicht in der Metrik, sondern in der Struktur der für die Vorhersage ausgewählten Daten - in diesem Fall wurde für das Beispiel der "einfachste" Satz von Stichproben genommen. Versuchen Sie zum Beispiel, Vektoren durch den Einbettungsraum zu sampeln (nehmen Sie Stichproben mit einem Schritt, bei dem die Autokorrelation der Reihe verschwindet) - Sie werden eine Vorhersage erhalten, die der realen Vorhersage ähnlicher ist - das bedeutet nicht nur das Fehlen einer MA-artigen Verzögerung, sondern auch, dass sie manchmal sehr falsch sein wird ;-).

Dies erfordert komplexere Datenvorverarbeitungsprozesse und eine separate Behandlung des Themas. Es scheint, dass hier viel von der Art der Beziehungen zwischen den Daten abhängt (Märkte haben komplexe Beziehungen).

Soweit ich verstanden habe, ist die beste Vorhersage der Wert aus der Vergangenheit, wenn es keine neuen Informationen gibt (oder ihre Rolle im Sinne der linearen Transformationen Optimum Signal Processing, 1.4 Correlation Cancelling 1.5 Gram-Schmidt Orthogonalisation unbedeutend ist) (aber wenn sie richtig berücksichtigt wird, sollte sie nicht allzu sehr falsch sein, auch wenn dies Experimente erfordert).

Über die Metriken ("Richtungen" der Optimierung der Netzgewichte) muss man sich meiner Meinung nach klar werden (für finanzielle Zeitreihen), die Frage erfordert einen eigenen Artikel.

Wir laden alle dazu ein, ihre Erfahrungen zu teilen.

 
Notwendigkeit, Inkremente/Logarithmen von Inkrementen zu nehmen. Beseitigen Sie die Autokorrelation/Zyklen/Volatilitätsclusterung. Dann sollten die Standardmetriken korrekt funktionieren, aber der Fehler wird sich entsprechend erhöhen.
 

Jedes Projekt zum maschinellen Lernen besteht aus drei Phasen:

  • Preprocessing (viele Dinge)
  • Modellauswahl, Training, Optimierung, etc.
  • Implementierung

Die Verwendung von ONNX-Modellen in µl löst das Problem der Implementierung. Es ist wahr, dass nicht alle Modelle und nicht ganz einfach.

Das Trainieren und Optimieren von Modellen wird durch einen separaten Prozess in Python gelöst.

Aber von all diesen Schritten ist der erste der zeitaufwändigste, der kreativste und der wichtigste. Und es ist unmöglich, sie auf µl zu realisieren. Wir betrachten die primitive Skalierung nicht als Vorverarbeitung. Und die Volksweisheit sagt: "Müll rein - Müll raus". Es gibt zu viel, was zusätzlich entwickelt und in MCL implementiert werden muss, um MO nur auf MCL voll nutzen zu können. Man kann das Unermessliche nicht fassen, zumal es sich ständig erweitert.

Um einen Preprocess auszuführen, sollte man ihn daher entweder in einer anderen Sprache erstellen (wer R/Python/Julia usw. beherrscht) oder versuchen, ihn in ONNX zu konvertieren.

Der Vorteil der bisherigen Implementierung von ONNX ist, dass wir lernen werden, wie man ONNX-Modelle konvertiert, erstellt, vereinfacht und optimiert. Das kann in Zukunft nützlich sein.