Wie man die Eingabewerte für die NS richtig bildet. - Seite 29

 
sergeev писал (а) >>

Paraphrasierend können wir sagen, dass dies ein Beweis für die Tatsache ist, dass es möglich ist, eine linear trennbare Klassifizierung für den Markt zu erhalten.

Ich selbst habe nach der Lektüre einiger kluger Bücher über die Unmöglichkeit, ein "exklusives oder" durch ein lineares Netzwerk zu bilden, angenommen, dass es unmöglich ist, lineare Netzwerke für den Markt zu verwenden (aus dem logischen Grund, dass der Markt viel komplizierter ist als ein einfaches "exklusives oder" :).

Und vielleicht ist sie es nicht? Vielleicht hat Juri recht? Und wir müssen nicht einen Haufen Bücher über nichtlineare Systeme wälzen, sondern einfach alles mit Flugzeugen schlagen?

Eine linear trennbare Klassifizierung kann für JEDES Problem erzielt werden.

ABER man muss selbst nach Mustern suchen und darauf aufbauend Eingaben machen, während ein nicht-lineares Perseptron von selbst Muster finden kann.

Wie ich bereits oben schrieb - wenn Sie mit einem linearen Perseptron positive Ergebnisse erzielen, brauchen Sie keins, denn die Regeln wurden bereits gefunden.

 
Nun, dann ist die Frage linear/nicht linear geklärt.
 

Netzwerk-Vorlage. Läuft in einem separaten Thread (CWinThread).

Version noch nicht wie gewünscht fertiggestellt. Keine Thread-Interrupt-Steuerung.

Unzureichend implementierte Logik der Dateioperationen.

Eine Menge falscher Kommentare zum Code.

15.07.08

Dateien:
better1.rar  50 kb
 
Lesen aus dem Workflow über einen Timer (um keine unnötigen Daten zu laden)
Einführung von Zeigern zum Lesen von Informationen aus einem Workflow (um die Anzahl der Kopien zu verringern)
Funktion zur Darstellung des mittleren quadratischen Fehlers (um zu sehen, wie das Netz zu lokalen Minima "wandert")
Schaltfläche zum Anhalten der Berechnungen und Speichern der aktuellen Gewichte in einer Datei hinzugefügt.
Normale Kommentare hinzugefügt

16.08.08
Dateien:
better1_1.rar  53 kb
_hilo_1.mq4  4 kb
_target_2.mq4  2 kb
 
sergeev писал (а) >>
Das Lesen aus dem Workflow wurde über einen Timer realisiert (um eine Überlastung der Daten zu vermeiden).
Einführung von Zeigern zum Lesen von Informationen aus dem Arbeitsablauf (um die Anzahl der Kopien zu verringern).
Funktion zur Darstellung des mittleren quadratischen Fehlers (um zu sehen, wie das Netz durch lokale Minima "wandert")
Schaltfläche zum Anhalten der Berechnungen und Speichern der aktuellen Gewichte in einer Datei hinzugefügt.
Normale Kommentare hinzugefügt

16.08.08

Der beneidenswerte Reichtum von Sergejew Alexej!

 
Sart писал (а) >>

Eine beneidenswerte Produktivität von Alexei Sergeev!

+1 :)

 
1. Mehr oder weniger normaler Austausch zwischen MetaTrader und VC++ über Header.
- CreatePattern - erstellt eine Datei mit Eingabe- und Ausgabevektoren, schreibt auch Informationen über die Anzahl der Muster und die Ausgabe-/Ausgabeabmessungen in die Kopfzeile.
- Dann liest VC++ und erstellt ein ähnliches Array in sich selbst. Nach der Verarbeitung des Gitters wird eine Datei mit demselben Namen, aber vom Typ .wg erstellt, in der die Gewichte des Gitters, die Schwellenwerte und die Kopfzeile des Gittermodells (Anzahl der Schichten und ihre Abmessungen) aufgezeichnet werden.
- NeuroInd.mq4 Indikator (NeuroIndP) - liest die Datei mit den Gewichten und erstellt ein analoges Modell in sich selbst und verwendet nun denselben Algorithmus wie CreatePattern, um durch die Balken zu gehen und diesem Gitter Eingaben zu geben. Der Indikator bildet den Ausgangsvektor. NeuroIndP - liest dasselbe, zeigt aber Einstiegspunkte an.

Das CreatePattern-Skript und NeuroInd sind durch dieselben Algorithmen für Eingabevektoren "verwandt", mit dem Unterschied, dass NeuroInd eine andere Dimension des Eingabevektors haben kann (je nachdem, wie wir uns entscheiden, das Netz zu verarbeiten). Wir sollten versuchen, diesen Algorithmus irgendwie zu verallgemeinern und ihn in einer separaten Datei unterzubringen (z.B. in <InputPatternAlg.mqh>). Nur so kann sie in diesem Komplex geändert werden.
-----------
2. Ich habe die zwischengeschalteten CLayer in der VC++-Klassenstruktur entfernt (ich denke, das war ein Fehler :) + wir sparen etwas Speicher + der Algorithmus zur Gitterberechnung stimmt mit dem Berechnungsalgorithmus im Indikator überein).
Dateien:
 

Je mehr ich mit dem Netz arbeite, desto mehr wird mir klar, dass nicht so sehr die Eingänge, sondern das Eingangs-Ausgangs-Paar wichtig ist. Die Artikel auf der ersten Seite von StatBars sind in dieser Hinsicht sehr "lernförderlich". Außerdem wurde festgestellt, dass die Annäherung schneller und wahrscheinlich besser ist, wenn die Ausgabe nicht binär, sondern kontinuierlich ist. (wenige inkonsistente und sich wiederholende In-Out-Paare).

Die Eingaben sind im Prinzip in Ordnung. Ein Quadrat aus Strichen (z. B. 5 Perioden mit 5 Werten pro Periode) ergibt einmalige, nicht wiederkehrende Eingaben.

Was die Ausgänge betrifft...

Ich habe die Ausgabe mit dem Verhältnis (Up-Dn)/(Up+Dn) getestet. Es passt schnell.

Der einzige Nachteil ist, dass das Verhältnis keine ungefähre Vorstellung über den absoluten Wert von Up und Dn vermittelt, was wünschenswert wäre :) Es macht keinen Unterschied, ob es 10/20 oder 50/100 sind.

Wenn wir nur einen einfachen Up-Dn ausgeben (um zu wissen, wie groß die Preisabweichung ist und in welche Richtung sie geht) und ihn dann mit einem Arkustangens komprimieren, stellt sich heraus, dass eine Sättigung der Werte eintritt.

(Ich sollte gleich sagen, dass ich den Arcustangens und nicht die lineare Kompression verwende, weil ich nicht nach Maxima suchen und an sie binden möchte).

Es ist möglich, (Up-Dn) durch den Koeffizienten zu teilen, um den Sättigungswert zu verringern, dann wird die Sättigung bei großen Werten auftreten, die bereits selten sind, und es wird keine große Wiederholbarkeit und Inkonsistenz geben.

Eine andere Möglichkeit besteht darin, getrennte Netze nur für den Wechsel von Up und Dn auszuprobieren.

Ich frage mich, ob jemand andere Ergebnisse hat?

 
sergeev писал (а) >>

Je mehr ich mit dem Netz arbeite, desto mehr wird mir klar, dass nicht so sehr die Eingänge, sondern das Eingangs-Ausgangs-Paar wichtig ist. Die Artikel auf der ersten Seite von StatBars sind in dieser Hinsicht sehr "lernförderlich". Außerdem wurde festgestellt, dass die Annäherung schneller und wahrscheinlich besser ist, wenn die Ausgabe nicht binär, sondern kontinuierlich ist. (wenige inkonsistente und sich wiederholende In-Out-Paare).

Die Eingaben sind im Prinzip in Ordnung. Ein Quadrat aus Strichen (z. B. 5 Perioden mit 5 Werten pro Periode) ergibt einmalige, nicht wiederkehrende Eingaben.

Was die Ausgänge betrifft...

Ich habe das Verhältnis (Up-Dn)/(Up+Dn) am Ausgang getestet. Sie konvergiert schnell.

Der einzige Nachteil - dieses Verhältnis gibt keine ungefähre Vorstellung über den absoluten Wert von Up und Dn, was wünschenswert wäre :) Es macht keinen Unterschied, ob es 10/20 oder 50/100 sind.

Wenn wir nur einen einfachen Up-Dn ausgeben (um zu wissen, wie groß die Preisabweichung ist und in welche Richtung sie geht) und ihn dann mit einem Arkustangens komprimieren, stellt sich heraus, dass eine Sättigung der Werte eintritt.

(Ich sollte gleich sagen, dass ich den Arcustangens und nicht die lineare Kompression verwende, weil ich nicht nach Maxima suchen und an sie binden möchte).

Es ist möglich, (Up-Dn) durch den Koeffizienten zu teilen, um den Sättigungswert zu verringern, dann wird die Sättigung bei großen Werten auftreten, die bereits selten sind, und es wird keine große Wiederholbarkeit und Inkonsistenz geben.

Als weitere Option ist es wahrscheinlich notwendig, getrennte Netze nur für den Wechsel von Up und Dn auszuprobieren.

Ich frage mich, ob jemand andere Ergebnisse hat?

Geben Sie bei jedem Takt eine Art Eingangsvektor ein und benötigen bei jedem Takt einen Ausgang?

 
Diese Version von MPS ist ein wenig besser, aber immer noch nicht das, was Sie brauchen, d. h. auf Short folgt Long und umgekehrt.
Dateien:
mps.zip  7 kb