Maschinelles Lernen im Handel: Theorie, Modelle, Praxis und Algo-Trading - Seite 1884

 
Evgeny Dyuka:
1. Das stimmt, Sie müssen alle Optionen durchgehen. Das Problem ist, dass es zu zeitaufwendig ist.
2. Ich habe es versucht, es wurde schlimmer.
3. Woher wissen Sie, welche sie benutzt? Es ist eine Blackbox, also füttere ich alles.

Es gibt Hyperparameter-Optimierer, wie den Optimierer im MT-Tester. Man stellt ihn auf 24 Stunden ein und er holt ihn ab.

Ich warte gelangweilt darauf, dass es klappt, aber das ist eine Besonderheit des NS, es gibt keine exakte Wissenschaft, nur Erfahrung (meine eigene und die von anderen) und Intuition. Ich kann meine Ergebnisse hier oder unter vier Augen mitteilen.

Ich habe vorhin ein Beispiel für die Ausbildung gegeben. Die Idee ist, dem Netzwerk beizubringen, Signale zu kaufen. Dann kehren Sie den Einstieg um und das Netzwerk sollte Verkaufssignale erzeugen. Es ist eine binäre Klassifizierung, ob ein Signal vorhanden ist oder nicht. Man könnte dem Netz beibringen, Kauf und Verkauf zu erkennen, aber das ist imho schlimmer. Der Bereich der Ausgabe ist auf 0-1 begrenzt; wenn wir nur nach Käufen suchen, wird der Bereich in 2 Klassen unterteilt (es gibt einen Kauf und es gibt keinen Kauf) und der Schwellenwert kann um 0,8 verschoben werden. Wenn wir nach Käufen oder Verkäufen suchen, wird 0-1 in 3 Sektoren unterteilt: Kauf, Verkauf und etwas dazwischen. Imho ist die Suche nur nach dem Kaufsignal: 2-mal mehr Trainingsbeispiele (Flip-Input), kleinere Netzgröße (die Aufgabe ist einfacher, weniger Neuronen erforderlich), weniger Trainingszeit, einfachere Lösung (man denkt nur an 1 Klasse), aber das ist nur Theorie.

Ich habe die Idee, dass das Netzwerk von selbst nach Merkmalen sucht, man gibt einen Preis und die gewünschten Signale an, und es macht alles von selbst. Ich habe mit lstm begonnen, es scheint perfekt zu sein, aber bis jetzt nicht so sehr. Ich will es mit normalen Netzen versuchen, und wenn nicht, werde ich mir überlegen, wie es weitergeht. CNNs sind ziemlich chaotisch, ich bin es leid, die Konfigurationen von Ebenen und Kernen anzupassen. Wahrscheinlich wäre es einfacher, Wavelets in ein reguläres Netz einzuspeisen. Und wenn es mir nicht passt, muss ich mehr Zeit für die Auswahl der Eingangssignale aufwenden, aber in diesem Fall habe ich eine Frage: Ist das wirklich notwendig, wäre es einfacher, das "klassische" System zu verwenden, es wäre verständlicher, zuverlässiger, wirtschaftlicher und einfacher zu testen.

Und wie analysieren Sie die Ergebnisse, wenn Sie sich nur die Zahlen ansehen? Ist dies der Code, den Sie verwenden?

plt.plot(history.history['loss'])
plt.plot(history.history['val_loss'])

Sie erstellen 2 Diagramme, Fehler auf dem Tablett und Test, Sie können sie verwenden, um zu verstehen, was das Netzwerk fehlt und in welche Richtung zu bewegen.

 
Rorschach:

Ich habe auch gezögert, darauf zu warten, dass es zählt, aber das ist eine Besonderheit des NS, es gibt keine exakte Wissenschaft, nur Erfahrung (die anderer Leute und meine eigene) und Intuition. Sie können Ihre Ergebnisse hier oder unter vier Augen mitteilen.

Sprechen wir über Bilder oder geht es bereits um den Markt?

Und wie analysieren Sie die Ergebnisse, schauen Sie nur auf die Zahlen? Ist dies der Code, den Sie verwenden?

Sie erstellen zwei Diagramme, eines für das Fach und eines für den Test, um zu verstehen, was dem Netz fehlt und in welche Richtung es gehen soll.

Ich kann leicht sehen, dass ich gerade dabei bin ))

Zuerst habe ich es mit dem Standardalgorithmus gezeichnet

import matplotlib.pyplot as plt

Wegen des starken Rauschens lag der Plot bereits nach 10 Epochen auf der horizontalen Linie.
Ich habe die binäre Klassifizierung und ich analysiere den Grad der Sicherheit des Netzes in jeder Antwort, d.h. zum Beispiel die richtige Antwort ist 0 1 und das Netz gibt 0,4 0,6 - das ist eine gute Antwort, und häufiger ist die richtige Antwort 0 1 und das Netz gibt 0,49 0,51
Wenn die Antworten Tausende sind, kann ich sie nach Sicherheit gruppieren und die Analyse durchführen.


 
Rorschach:

In der Praxis ist dies der heutige Euro auf M2, etwas, das das neuronale Netz zu verstehen beginnt, aber bisher nur schwach.
Blau steht für eine Aufwärtsprognose, gelb für eine Abwärtsprognose.


 
Evgeny Dyuka:

Man merkt sofort, dass eine Person sich in einem echten Prozess befindet ))

Zuerst habe ich mit Standard

Es nützt aber wenig, denn wegen des starken Rauschens liegt der Graph nach 10 Epochen auf der horizontalen Linie.
Ich habe die binäre Klassifizierung und ich analysiere den Grad der Sicherheit des Netzes in jeder Antwort, d.h. zum Beispiel die richtige Antwort ist 0 1 und das Netz gibt 0,4 0,6 - das ist eine gute Antwort, und häufiger ist die richtige Antwort 0 1 und das Netz gibt 0,49 0,51
Wenn die Antworten Tausende sind, kann ich sie nach Sicherheit gruppieren und die Analyse durchführen.


Können Sie die Diagramme veröffentlichen? Je mehr Epochen und je kleiner die Lattengröße, desto öfter ändern sich die Gewichte. Außerdem ist es sinnvoll, die Lernrate im Optimierer um eine Größenordnung zu ändern. Welchen Optimierer verwenden Sie?

 
Rorschach:

Können Sie die Diagramme veröffentlichen? Zusätzlich zu den Epochen sollte auch die Chargengröße geändert werden; je mehr Epochen und je kleiner die Chargengröße, desto öfter werden die Gewichte geändert. Außerdem ist es sinnvoll, die Lernrate im Optimierer um eine Größenordnung zu ändern. Welchen Optimierer verwenden Sie?

Für das Diagramm muss ich das Lernprogramm ausführen, dann... aber nichts Interessantes - vertikal nach unten, dann horizontal, kein sanfter Rückgang wie in Tutorials ))
Bach 128, wenn wir über die gleiche Sache sprechen. Es sollte immer 128 sein, das hat etwas mit TPU zu tun, so eine Anforderung.
Ich habe auch aufgehört, die Epochen zu ändern, nach 150 ändert sich normalerweise nichts mehr.
Ich kann es nicht mit SGD zum Laufen bringen.
 
Rorschach:

Hier ist mein Raster, ich ändere hier dynamisch die Anzahl der Ebenen

def make_model(arr_size, lays):
  sgd = SGD(lr=0.01, decay=1 e-6, momentum=0.9, nesterov=True)

  #res = 2 # количество ответов
  act = "softmax"
  #act = "sigmoid"
  #opt = sgd
  opt = 'adam'

  model = Sequential()

  if lays == 1:
    model.add(Dense(int((arr_size-res)*k), input_dim=(arr_size-res), activation='relu'))
    model.add(Dropout(dropout))

  if lays == 2:
    model.add(Dense(int((arr_size-res)*k), input_dim=(arr_size-res), activation='relu'))
    model.add(Dropout(dropout))
    model.add(Dense(int((arr_size-res)*0.5*k), activation='relu'))
    model.add(Dropout(dropout))

  if lays == 3:
    model.add(Dense(int((arr_size-res)*k), input_dim=(arr_size-res), activation='relu'))
    model.add(Dropout(dropout))
    model.add(Dense(int((arr_size-res)*0.5*k), activation='relu'))
    model.add(Dropout(dropout))
    model.add(Dense(int((arr_size-res)*0.3*k), activation='relu'))
    model.add(Dropout(dropout))

  if lays == 4:
    model.add(Dense(int((arr_size-res)*k), input_dim=(arr_size-res), activation='relu'))
    model.add(Dropout(dropout))
    model.add(Dense(int((arr_size-res)*0.7*k), activation='relu'))
    model.add(Dropout(dropout))
    model.add(Dense(int((arr_size-res)*0.5*k), activation='relu'))
    model.add(Dropout(dropout))
    model.add(Dense(int((arr_size-res)*0.3*k), activation='relu'))
    model.add(Dropout(dropout))

  #model.add(Dense(int((arr_size-res)*0.1*k), activation='relu'))
  #model.add(Dropout(dropout))

  model.add(Dense(res, activation=act))

  if res==1:
    ls="binary_crossentropy"
  else:
    ls="categorical_crossentropy"
  model.compile(loss=ls, optimizer=opt, metrics=['accuracy'])
  return model
 
Evgeny Dyuka:

Hier ist mein Raster, ich ändere hier dynamisch die Anzahl der Ebenen

Sie könnten statt Dropout etwas anderes ausprobieren, die Anzahl der Neuronen reduzieren. Initialisierung und Normalisierung der Gewichte hinzufügen. Werden die Eingabedaten irgendwie verarbeitet? Meine Ergebnisse wurden besser, nachdem ich die Eingabedaten mit einer Größenordnung multipliziert hatte. Es sieht so aus, als ob ich die Nicht-Stationarität doch noch loswerden muss.

 
Rorschach:

Sie könnten anstelle von Dropout etwas anderes versuchen, die Anzahl der Neuronen reduzieren. Initialisierung und Normalisierung der Gewichte hinzufügen. Werden die Eingabedaten irgendwie verarbeitet? Ich habe bessere Ergebnisse erhalten, nachdem ich die Eingabedaten mit einer Größenordnung multipliziert habe. Es sieht so aus, als ob wir die Nicht-Stationarität beseitigen müssen.

Kein Paket wird ein genaues Ergebnis liefern. Jede NS kann nur eine probabilistische Vorhersage nach oben, unten oder unbekannt machen. Der Preis gehorcht nicht den neuronalen Netzen und kann leicht gegen sie verstoßen. Eine Option von 65 % ist bereits akzeptabel.

 
Uladzimir Izerski:

Kein Paket wird ein genaues Ergebnis liefern. Jede NS kann nur eine probabilistische Vorhersage nach oben, unten oder unbekannt machen. Der Preis gehorcht nicht den neuronalen Netzen und kann leicht gegen sie verstoßen. Eine Option von 65 % ist bereits akzeptabel.

Hier sind es 56 %. Blau ist die richtige Einstellung, rot ist die Reaktion des Netzes. Prozentsätze haben keine Bedeutung.

hier sind es 48 %, die Zahl ist sogar noch niedriger, aber zumindest hat sie eine gewisse Wirkung.


 
Rorschach:

Sie könnten anstelle von Dropout etwas anderes versuchen, die Anzahl der Neuronen reduzieren. Initialisierung und Normalisierung der Gewichte hinzufügen. Werden die Eingabedaten irgendwie verarbeitet? Ich habe ein besseres Ergebnis erhalten, nachdem ich die Eingabedaten mit einer Größenordnung multipliziert habe. Es sieht so aus, als ob ich die Nicht-Stationarität doch noch loswerden muss.

Ja, man muss sie alle durchgehen, sonst macht man es nicht.
Versuchen Sie, dies zu spielen, um zu verstehen, wie Parameter die Ergebnisse beeinflussen.
Tensorflow — Neural Network Playground
Tensorflow — Neural Network Playground
  • Daniel Smilkov and Shan Carter
  • playground.tensorflow.org
It’s a technique for building a computer program that learns from data. It is based very loosely on how we think the human brain works. First, a collection of software “neurons” are created and connected together, allowing them to send messages to each other. Next, the network is asked to solve a problem, which it attempts to do over and over...