Diskussion zum Artikel "Selbst-organisierende Feature Maps (Kohonen Maps) - Wiederaufgreifen des Themas" - Seite 3

 
Übrigens, nahm die anderen Daten. Auch auf dem dritten Bild gibt es einen Regenbogen. Ich vermute, dass dies auf Ihre Eingriffe in den Code zurückzuführen ist, mit dem Sie diesen Artikel geschrieben haben. Sie haben in dem Artikel geschrieben, dass Sie mehrere Änderungen vorgenommen haben.

Screenshots von der MetaTrader-Handelsplattform

GBPUSD, H1, 2017.03.01

Alpari International Limited, MetaTrader 5, Demo

Was ist der Regenbogen?

GBPUSD, H1, 2017.03.01, Alpari International Limited, MetaTrader 5, Demo


 
Viktor Vasilyuk:
Übrigens, nahm die anderen Daten. Auch auf dem dritten Bild gibt es einen Regenbogen. Ich vermute, dass dies auf Ihre Eingriffe in den Code zurückzuführen ist, mit dem Sie diese Arbeit geschrieben haben. Sie haben in dem Papier geschrieben, dass Sie einige Änderungen vorgenommen haben.



Die Normalisierung der Zufälligkeit bei der Initialisierung der Knoten schränkt die Knoten selbst beim Training nicht ein. Sie können die Knoten mit Einheiten initialisieren, es wird das Ergebnis nicht beeinflussen.

Aber es kann sich auf die Geschwindigkeit auswirken, mit der das Ergebnis erzielt wird.

Die Tatsache, dass ich die Knoten mit zufälligen Werten aus dem Feld zwischen dem Minimum und dem Maximum für jede der Spalten separat initialisiere, beschleunigt einfach die Konvergenz, weil SOM die Knoten nicht zu Beginn in die vorgegebenen Felder treiben muss.

Dieser Prozess ist organisch mit dem Lernprozess selbst verwoben, so dass man nicht einmal sagen kann, dass dies der Moment ist, in dem das Gitter fährt und dies der Moment, in dem es lernt. In ein bestimmtes Feld hineinzufahren bedeutet, den Knoten mit einem sehr großen Veränderungskoeffizienten einzustellen.

Mein Eingriff hat also im Grunde nichts verändert. Er hat lediglich die Geschwindigkeit der Konvergenz beschleunigt.

Aber wenn Sie Beschwerden über diesen Mechanismus haben, können Sie ihn gerne ändern. Ändern Sie die Initialisierung der Knoten beim Erstellen des Gitters in Include\SOMNode.mqh

//+------------------------------------------------------------------+
//| Initialisierung der Knotenparameter in der eingestellten Grenze |
//+------------------------------------------------------------------+
void CSOMNode::InitNode(int x1,int y1,int x2,int y2,const double &min_values[],const double &max_values[])
  {
//--- Knotenkoordinaten festlegen
   m_x1=x1;
   m_y1=y1;
   m_x2=x2;
   m_y2=y2;
//--- Berechnung der Koordinaten des Knotenpunkts
   m_x=x1+MathAbs((x2-x1))/2;
   m_y=y1+MathAbs((y2-y1))/2;
//--- ein Array von Gewichten vorbereiten
   ArrayResize(m_weights,m_dimension);
//--- Initialisierung der Gewichte mit Zufallswerten;
   for(int i=0; i<m_dimension; i++) {m_weights[i]=min_values[i]+(max_values[i]-min_values[i])*rand()/32768;}
  };

Setzen Sie unnormalisierte rand() ein und es wird genau wie im ursprünglichen Algorithmus sein. Etwa so: m_weights[i]=rand();

 

Verstehe ich das richtig, dass, wenn Sie eine Datei "optim.csv" wie diese erstellen:

i;Title
-0.195;2017.04.04
0.086;2017.04.03
-0.195;2017.03.31
-0.195;2017.03.30
-0.195;2017.03.29
0.086;2017.03.28
-0.195;2017.03.27
-0.195;2017.03.24
0.086;2017.03.23
0.086;2017.03.22

gibt es nur zwei Werte:

  • -0.195
  • 0.086

dann wird die Ausführung von "Sample5_SOM_Net_Player" etwas wie folgt anzeigen

Start 1 Start 2

Das heißt, das Cohen-Netzwerk hat festgestellt, dass die Datei "optim.csv" zwei ... Zwei was? Patterns?


 

Das heißt, wenn ich zwei benachbarte Balken untersuchen will - ob sie bullish oder bearish sind - muss ich eine Beschreibung solcher Sequenzen erstellen, etwa so:

Zwei benachbarte Bars

Am Ende wird es vier Hauptsequenzen geben ("11", "12", "21", "22") und eine fünfte - wenn ein Balken weder bullisch noch bärisch ist (Balkenkörpergröße ist Null).


Gehen Sie dann einfach die angegebene Anzahl von Balken durch und erstellen Sie eine Datei "optim.csv", in die Sie diese Sequenzen schreiben. Sie erhalten dann etwas wie

i;Time
21;2017.04.03
11;2017.03.31
11;2017.03.30
11;2017.03.29
12;2017.03.28
22;2017.03.27
21;2017.03.24
11;2017.03.23
12;2017.03.22

Führen Sie dann "Sample5_SOM_Net_Player" aus. Richtig?

 

Sie haben zwei Werte, aber Sie haben 250 Knoten bestellt (50x50), so dass das Raster die Knoten natürlich über das gesamte Feld der Zwischenwerte ausdehnt.

Außerdem haben Sie einen unbedeutenden Wert "Zeit" in das Feld "Cluster" eingegeben. Wenn Sie die Zeit verwenden wollen, dann sollte die Datenstruktur irgendwie die Periodizität widerspiegeln, sonst versteht das Raster nicht, wie sich der Montag vom Freitag unterscheidet. Eine solche Darstellung der Zeit, wie Sie sie haben, ist zumindest bei Daten für mehrere Jahre sinnvoll, dann werden sie auf Wiederholungen treffen (wenn Sie die Werte des Jahres entfernen, natürlich).

Verstehen Sie eine einfache Idee, das Kohonen-Gitter platziert Knoten in der Nachbarschaft von ähnlichen (in multivariaten Begriffen) Beispielen. Und dann wird sich alles mit dem Verständnis der Arbeit fügen.

 
Nikolay Demko:

Sie haben zwei Werte, aber Sie haben 250 Knoten bestellt (50x50), so dass das Raster die Knoten natürlich über das gesamte Feld der Zwischenwerte ausdehnt.

Außerdem haben Sie einen unbedeutenden Wert "Zeit" in das Feld "Cluster" eingegeben. Wenn Sie die Zeit verwenden wollen, dann sollte die Datenstruktur irgendwie die Periodizität widerspiegeln, sonst versteht das Raster nicht, wie sich der Montag vom Freitag unterscheidet. Eine solche Darstellung der Zeit, wie Sie sie haben, ist zumindest bei Daten für mehrere Jahre sinnvoll, dann werden sie auf Wiederholungen treffen (wenn Sie die Werte des Jahres entfernen, natürlich).

Verstehen Sie eine einfache Idee, das Kohonen-Gitter platziert Knoten in der Nachbarschaft von ähnlichen (in multivariaten Begriffen) Beispielen. Und dann werden die Dinge an ihren Platz fallen, wenn man die Funktionsweise versteht.


Wenn ich die csv-Datei in diesem Format neu erstelle: [Größe des Kerzenkörpers][Wochentag (1, 2, 3, 4, 5)] und fülle sie für, sagen wir, 100 Balken, werde ich am Ende 100 BEISPIELE in der csv-Datei haben? Und wie viele Knoten sind in diesem Fall zu setzen? 3*3?
 
Vladimir Karputov:

Wenn ich die csv-Datei in diesem Format neu erstelle: [Größe des Kerzenkörpers][Wochentag (1, 2, 3, 4, 5)] und fülle es für, sagen wir, 100 Balken, werde ich am Ende mit 100 BEISPIELEN in der csv-Datei? Und wie viele Knoten sind in diesem Fall zu setzen? 3*3?


Das hängt davon ab, was Sie erreichen wollen, Clustering oder Regression.

Beim Clustering werden mehrere Beispiele zu einem Cluster zusammengefasst, dann sollte die Anzahl der Knoten geringer sein als die Anzahl der Beispiele.

Für die Regression werden mehr Knoten als Beispiele benötigt, um Felder an Punkten abzudecken, die in den Beispielen nicht vertreten sind.

Auch dieser Prozess ist nicht binär, so dass man nicht sagen kann, dass es sich um Clustering handelt, sondern um Regression, stellen Sie sich das als ein multidirektionales Spektrum vor, je mehr Clustering, desto weniger Regression und umgekehrt. Und am Nullpunkt, wenn die Anzahl der Knoten gleich der Anzahl der Beispiele ist, haben wir ungefähr gleiche Mengen an Clustering und Regression.

 
Nikolay Demko:


Es hängt davon ab, ob Sie Clustering oder Regression wünschen.

Beim Clustering werden mehrere Beispiele zu einem Cluster zusammengefasst, so dass die Anzahl der Knoten geringer sein sollte als die Anzahl der Beispiele.

Für die Regression werden mehr Knoten als Beispiele benötigt, um Felder an Punkten abzudecken, die in den Beispielen nicht vertreten sind.


Nun, zur Vereinfachung wollte ich eine Visualisierung für vier Sequenzen erhalten:

Forum zum Handel, automatisierte Handelssysteme und Testen von Handelsstrategien.

Diskussion des Artikels "Noch einmal zu den Kohonen-Karten"

Vladimir Karputov, 2017.04.04 13:49

Das heißt, wenn ich zwei benachbarte Balken untersuchen will - ob sie bullish oder bearish sind, muss ich eine Beschreibung solcher Sequenzen machen, etwa so:

Zwei benachbarte Bars

Am Ende gibt es vier Hauptsequenzen ("11", "12", "21", "22") und eine fünfte - wenn ein Bar weder bullish noch bearish ist (Bar Body Size ist Null).


in einer bestimmten Anzahl von Balken. Das heißt, ich lasse das Skript über eine bestimmte Anzahl von Balken laufen und weise eine der fünf Sequenzen zu ("0", "11", "12", "21", "22"). Ich weise auch einen Wochentag zu. Am Ende erhalte ich 100 Beispiele von [Name der Sequenz][Wochentag] für 100 Takte.

 
Vladimir Karputov:


Nun, um es zu vereinfachen, wollte ich eine Visualisierung für vier Sequenzen:


in einer bestimmten Anzahl von Takten. Das heißt, ich übergebe dem Skript eine bestimmte Anzahl von Takten und weise eine der fünf Sequenzen zu ("0", "11", "12", "21", "22"). Ich weise auch einen Wochentag zu. Am Ende habe ich 100 Beispiele von [Sequenzname][Wochentag] für 100 Takte.


Entschuldigung, aber ich verstehe nicht, warum Sie ein Raster brauchen, wenn Sie eine Kombination von Bedingungen haben und diese genau kennen?

Wenn nicht, ist es besser, dem Raster zu zeigen, woran Sie interessiert sind, z. B. die Differenz Open[i]-Close[i] in einer Spalte und die Differenz Open[i+1]-Close[i+1] in einer anderen Spalte, und schon auf der Grundlage der Clusterbildung die Bedingungen festzulegen, welche Cluster zu interpretieren sind.

 
Nikolay Demko:


Tut mir leid, aber ich verstehe das nicht. Wenn Sie eine Kombination von Bedingungen haben und genau wissen, welche das sind, warum brauchen Sie dann ein Raster?

***

  1. Die Kombinationen ("0", "11", "12", "21", "22") habe ich Ihnen heute nur als Beispiel genannt. Ich habe keine Ahnung, ob sie funktionieren oder nicht. Das ist es, was ich frage - wenn ich mir alle möglichen Kombinationen ausdenke, wie wird mir das Raster helfen? Ich dachte, dass dieses Raster die Anzahl der Treffer meiner Beispiele in bestimmten Gruppen (Clustern?) visuell anzeigen würde.
  2. Nun, wenn ich "... zum Beispiel den Unterschied zwischen Open[i]-Close[i] in einer Spalte und den Unterschied zwischen Open[i+1]-Close[i+1] in einer anderen Spalte, ..." mache, was ist die Rückmeldung? Nun, ich werde verschiedene Farben sehen - aber welche ist welche?