Neuronale Netze. Fragen an die Experten. - Seite 16

 
joo:

Aber offenbar trainiert Lasso sein Bio-Netzwerk, um auf diese Weise mit den künstlichen zu arbeiten.

Lustig :)))) Mann, Nsh ist in dieser Hinsicht so süchtig machend, dass es manchmal extrem schwer ist, sich davon loszureißen.....
 
lasso:

Hallo.


Die Klassen sind sehr gemischt, sogar noch mehr als in Fig..,


aber dennoch unterscheidbar.

Ich bin in der Lage, auch mit nicht linearen Methoden zu dividieren, aber ich kann den NS nicht dazu bringen, ein besseres (oder zumindest qualitativ vergleichbares) Ergebnis zu erzielen.

Ich hoffe auf adäquate Antworten und dass sie auch für andere Forumsteilnehmer von Nutzen sind!

Ich habe seit einiger Zeit keinen Kontakt mehr zu Ihnen... Lassen Sie uns weitermachen.

..............

Das auf Seite 14 gestellte Problem wird in der Tat durch ein neuronales Netz elementar gelöst.

Der Screenshot zeigt eine der möglichen Konfigurationen. Sie können die Anzahl der Neuronen in einer versteckten Schicht mühelos auf z. B. 7 reduzieren.



Und was angenehm und überraschend war, ist, dass NS seine eigenen Lösungen findet, im Gegensatz zu offensichtlichen linearen Methoden (in Bezug auf dieses einfache Problem),

und diese Lösungen sind zunächst rätselhaft, aber nach eingehender Analyse stellt sich heraus, dass NS-Lösungen sogar etwas effizienter sind als lineare Lösungen. O-o-o-o-o!

Weitergehen.... ;-)

 
lasso:

Das auf Seite 14 gestellte Problem wird tatsächlich elementar mit einem neuronalen Netz gelöst.

Der Screenshot zeigt eine der möglichen Konfigurationen. Die Anzahl der Neuronen in der versteckten Schicht kann z.B. problemlos auf 7 reduziert werden.



Überraschend und erfreulich war die Tatsache, dass NS seine eigenen Lösungen findet, im Gegensatz zu offensichtlichen linearen Methoden (für dieses einfache Problem),

und diese Lösungen sind zunächst rätselhaft, aber nach einer umfassenden Analyse stellt sich heraus, dass NS-Lösungen sogar etwas effizienter sind als lineare Lösungen. O-o-o-o-o!

Weitergehen.... ;-)


Handelt es sich um ein stochastisches Kreuzungsproblem? Ich verstehe nicht, was Sie mit der Lösung dieses Problems erreichen wollen. Offensichtlich erlaubt es die dürftige Situationsbeschreibung der NS nicht, dieses Problem in irgendeiner "sinnvollen" Weise zu lösen. Ein solches Netz ist extrem instabil und außerhalb des OV absolut unbrauchbar. Aber für eine Trainingsaufgabe reicht es natürlich...

Wie geht es jetzt weiter? Vielleicht sollten wir uns näher mit der Zeitreihenvorhersage befassen?

 
Figar0:

Handelt es sich um ein stochastisches Kreuzungsproblem? Ich verstehe nicht, was Sie mit der Lösung dieses Problems erreichen wollten. Offensichtlich erlaubt die spärliche Beschreibung der Situation es NS nicht, dieses Problem auf irgendeine "sinnvolle" Weise zu lösen. Ein solches Netz ist extrem instabil und außerhalb des OV absolut unbrauchbar. Aber für eine Trainingsaufgabe reicht es natürlich...

Wie geht es jetzt weiter? Vielleicht ein bisschen näher an unseren Lämmern - Zeitreihenvorhersage?

Ich möchte lernen, wie man den NS-Apparat in den analytischen Blöcken meines TS anwendet, und zwar visuell und mit Beispielen, zum Nutzen anderer.

..................................

Damit ist die Aufgabe der Klassifizierung in Statistik 6 gelöst.

Es handelt sich jedoch um ein Programm eines Drittanbieters, das nicht direkt mit dem Handel verbunden ist.

Ja, es ermöglicht die Erstellung zahlreicher Diagramme und Berichte, die Speicherung des gefundenen Netzwerks in einer Datei, die Generierung von Code in C und VB, usw. Großartig!

Aber hier stehen wir vor einem neuen Problem!

Wie lässt sich dieser ganze Reichtum korrekt übertragen und in MQL umsetzen?

 
lasso:

Ja, es ermöglicht die Erstellung einer Vielzahl von Diagrammen und Berichten, das Speichern des gefundenen Netzwerks in einer Datei, die Generierung von Code in C und VB, usw. Großartig!

Aber hier stehen wir vor einem neuen Problem!

Wie lässt sich all dieser Reichtum korrekt übertragen und in MQL umsetzen?



Nun, es ist überhaupt kein Problem, eine DLL an den Expert Advisor anzuhängen. Das Terminal selbst im Ordner Experts/Samples enthält ein gutes Beispiel, und eine Suche im Forum mit dem Begriff "connect dll" hilft Ihnen, dies im Handumdrehen zu tun. Ja, ich glaube, es gab einen Artikel zu diesem Thema... Das ist kein Hindernis bei der Arbeit mit neuronalen Netzen.

Es gibt viel interessantere Fragen:

Was sollte ein neuronales Netz tun? Was sind die Eingaben? Wie bereitet man sie am besten zu? Wählen Sie den Typ und die Architektur des NS, usw. All dies ist einfacher und interessanter zu tun, auf einige praktische Aufgabe, wie der Handel November, und wenn möglich Dezember 2010 im Gewinn als neue NS-Daten. Obwohl es vielleicht besser wäre, sie in einen separaten Zweig wie "Anfänger und über die NS-Praxis hinaus" aufzunehmen.

 
Figar0:

Nun, es ist überhaupt kein Problem, eine DLL an den Expert Advisor anzuhängen. Das Terminal selbst im Ordner Experts/Samples enthält ein gutes Beispiel, und eine Suche im Forum mit dem Begriff "connect dll" hilft Ihnen, dies im Handumdrehen zu tun. Ja, ich glaube, es gab einen Artikel zu diesem Thema... Das ist kein Hindernis bei der Arbeit mit neuronalen Netzen.

Es gibt viel interessantere Fragen:

Was sollte ein neuronales Netz tun? Was sind die Eingaben? Wie bereitet man sie am besten zu? Wählen Sie den Typ und die Architektur des NS, usw. All dies ist einfacher und interessanter zu tun, auf einige praktische Aufgabe, wie der Handel November, und wenn möglich Dezember 2010 im Gewinn als neue NS-Daten. Obwohl es wahrscheinlich korrekter wäre, es in einem separaten Zweig wie "Anfänger und nicht nur NS-Praxis" unterzubringen.

Ich stimme zu, dass die Fragen interessant sind. Und um Antworten auf diese Fragen zu erhalten, müssen Sie in der MT-Umgebung arbeiten.

......................

Die Frage ist nicht, wie man die dll anbringt, sondern wo man diese dll bekommt?

Erzeugt Statistics 6 eine DLL?

Oder schlagen Sie einem unerfahrenen Forscher eines neuronalen Netzes vor, sein eigenes NS zu schreiben und es als DLL zu erstellen? Ich verstehe Sie nicht....

.......................

Es gibt eine Variante der FANN-Bibliothek.

Gibt es noch andere Varianten?

 
lasso:

Die Frage ist nicht, wie ich die DLL anhängen kann, sondern woher ich die DLL bekomme?

Erzeugt Statistics 6 eine DLL?

Oder schlagen Sie einem unerfahrenen Forscher eines neuronalen Netzes vor, das NS selbst zu schreiben und es in eine DLL zu verwandeln? Ich verstehe Sie nicht....

.......................

Es gibt eine Variante der FANN-Bibliothek.

Statistica, wie auch viele andere NS-Programme (neuroshell, neurosolutions), erzeugt C-Code, soweit ich mich erinnere. Wahrscheinlich ist das der einfachste Ausweg für einen Neuling. Sie können Netze direkt in MQL schreiben, aber das wirft eine Frage der Ausbildung auf... Ich finde FANN zu umständlich und nicht sehr einfach zu bedienen.

 
Statistica generiert den C-Quellcode der Konsolenanwendung des trainierten neuronalen Netzes (wenn Sie diesen Quellcode kompilieren, erhalten Sie eine ausführbare Datei). Der Code kann mit leichten Modifikationen auf MQL4/5 portiert werden. So habe ich angefangen, mich mit neuronalen Netzen zu beschäftigen.
 
lasso:


Es gibt eine Version der FANN-Bibliothek.

Gibt es noch andere Möglichkeiten?


SVM .... http://www.csie.ntu.edu.tw/~cjlin/libsvm/

 
Figar0:

Statistica erzeugt, wie viele andere NS-Programme (neuroshell, neurosolutions), C-Code, soweit ich mich erinnere. Dies ist wahrscheinlich der einfachste Weg für einen Anfänger. Sie können Netze direkt in MQL schreiben, aber das wirft eine Frage der Ausbildung auf... Ich finde FANN zu umständlich und nicht sehr einfach zu bedienen.


joo:
Statistica generiert C-Quellcode für die Konsolenanwendung des trainierten neuronalen Netzes (wenn Sie einen solchen Quellcode kompilieren, erhalten Sie eine ausführbare exe-Datei). Der Code könnte mit leichten Modifikationen auf MQL4/5 portiert werden. So habe ich angefangen, mich mit neuronalen Netzen zu beschäftigen.

So sieht das Ergebnis von Statistik 6 aus ))

Was ist die Freude?

Die einzige Freude besteht darin, den Signalverlauf vom Eingang zum Ausgang im Debugger zu sehen.

/* ------------------------------------------------------------------------- */


#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>

#ifndef FALSE
#define FALSE 0
#define TRUE 1
#endif

#define MENUCODE -999


static double NNCode38Thresholds[] =
{

/* layer 1 */
-0.78576109762088242, -0.23216582173469763, -1.6708808507320108, -1.525614113040888,
1.4153558659332133, -0.77276960668316319, 2.3600992937381298, 2.473963708568014,
-0.43422405325901231, 0.68546943611132893, 0.19836417975077064, 0.26461366779934564,
-0.19131682804149783, 0.24687125804149584, -0.95588612620053504, 0.25329560565058901,
-1.0054817062488075, 1.3224622867600988, 0.88115523574528376, 0.32309684489223067,
0.52538428519764313,

/* layer 2 */
-1.8292886608617505

};

static double NNCode38Weights[] =
{

/* layer 1 */
1.8660729426318707,
1.3727568288578245,
3.1175074758006374,
3.356836518157698,
3.2574311486418068,
3.2774957848884769,
1.4284147042568165,
3.534875314491805,
2.4874577673065557,
2.1516346524000403,
1.9692127720516106,
4.3440737376517129,
2.7850179803408932,
-12.654434243399631,
2.4850018642785399,
2.1683631515554227,
1.77850226182071,
2.1342779960924272,
2.8753050022428206,
3.9464397902669828,
2.5227540467556553,

/* layer 2 */
-0.041641949353302246, -0.099151657230575702, 0.19915689162090328, -0.48586373846026099,
-0.091916813099494746, -0.16863091580772138, -0.11592356639654273, -0.55874391921850786,
0.12335845466035589, -0.022300206392803789, -0.083342117374385544, 1.550222748978116,
0.10305706982775611, 3.9280003726494575, 0.12771097131123971, -0.12144621860368633,
-0.40427171889553365, -0.072652508364580259, 0.20641498115269669, 0.1519896468808962,
0.69632055946019444

};

static double NNCode38Acts[46];

/* ---------------------------------------------------------- */
/*
  NNCode38Run - run neural network NNCode38

  Input and Output variables.
  Variable names are listed below in order, together with each
  variable's offset in the data set at the time code was
  generated (if the variable is then available).
  For nominal variables, the numeric code - class name
  conversion is shown indented below the variable name.
  To provide nominal inputs, use the corresponding numeric code.
  Input variables (Offset):
  stoch

  Выход:
  res
    1=1
    2=-1

*/
/* ---------------------------------------------------------- */

void NNCode38Run( double inputs[], double outputs[], int outputType )
{
  int i, j, k, u;
  double *w = NNCode38Weights, *t = NNCode38Thresholds;

  /* Process inputs - apply pre-processing to each input in turn,
   * storing results in the neuron activations array.
   */

  /* Input 0: standard numeric pre-processing: linear shift and scale. */
  if ( inputs[0] == -9999 )
    NNCode38Acts[0] = 0.48882189239332069;
  else
    NNCode38Acts[0] = inputs[0] * 1.0204081632653061 + 0;

  /*
   * Process layer 1.
   */

  /* For each unit in turn */
  for ( u=0; u < 21; ++u )
  {
    /*
     * First, calculate post-synaptic potentials, storing
     * these in the NNCode38Acts array.
     */

    /* Initialise hidden unit activation to zero */
    NNCode38Acts[1+u] = 0.0;

    /* Accumulate weighted sum from inputs */
    for ( i=0; i < 1; ++i )
      NNCode38Acts[1+u] += *w++ * NNCode38Acts[0+i];

    /* Subtract threshold */
    NNCode38Acts[1+u] -= *t++;

    /* Now apply the logistic activation function, 1 / ( 1 + e^-x ).
     * Deal with overflow and underflow
     */
    if ( NNCode38Acts[1+u] > 100.0 )
       NNCode38Acts[1+u] = 1.0;
    else if ( NNCode38Acts[1+u] < -100.0 )
      NNCode38Acts[1+u] = 0.0;
    else
      NNCode38Acts[1+u] = 1.0 / ( 1.0 + exp( - NNCode38Acts[1+u] ) );
  }

  /*
   * Process layer 2.
   */

  /* For each unit in turn */
  for ( u=0; u < 1; ++u )
  {
    /*
     * First, calculate post-synaptic potentials, storing
     * these in the NNCode38Acts array.
     */

    /* Initialise hidden unit activation to zero */
    NNCode38Acts[22+u] = 0.0;

    /* Accumulate weighted sum from inputs */
    for ( i=0; i < 21; ++i )
      NNCode38Acts[22+u] += *w++ * NNCode38Acts[1+i];

    /* Subtract threshold */
    NNCode38Acts[22+u] -= *t++;

    /* Now calculate negative exponential of PSP
     */
    if ( NNCode38Acts[22+u] > 100.0 )
       NNCode38Acts[22+u] = 0.0;
    else
      NNCode38Acts[22+u] = exp( -NNCode38Acts[22+u] );
  }

  /* Type of output required - selected by outputType parameter */
  switch ( outputType )
  {
    /* The usual type is to generate the output variables */
    case 0:


      /* Post-process output 0, two-state nominal output */
      if ( NNCode38Acts[22] >= 0.05449452669633785 )
        outputs[0] = 2.0;
      else
        outputs[0] = 1.0;
      break;

    /* type 1 is activation of output neurons */
    case 1:
      for ( i=0; i < 1; ++i )
        outputs[i] = NNCode38Acts[22+i];
      break;

    /* type 2 is codebook vector of winning node (lowest actn) 1st hidden layer */
    case 2:
      {
        int winner=0;
        for ( i=1; i < 21; ++i )
          if ( NNCode38Acts[1+i] < NNCode38Acts[1+winner] )
            winner=i;

        for ( i=0; i < 1; ++i )
          outputs[i] = NNCode38Weights[1*winner+i];
      }
      break;

    /* type 3 indicates winning node (lowest actn) in 1st hidden layer */
    case 3:
      {
        int winner=0;
        for ( i=1; i < 21; ++i )
          if ( NNCode38Acts[1+i] < NNCode38Acts[1+winner] )
            winner=i;

        outputs[0] = winner;
      }
      break;
  }
}

Oder generiere ich an der falschen Stelle?