Reti neurali. Domande degli esperti. - pagina 16

 
joo:

Ma a quanto pare Lasso sta allenando la sua bio-rete a lavorare con quelle artificiali in questo modo.

Divertente :)))) Amico, Nsh è così coinvolgente in questo senso, a volte è estremamente difficile staccarsi.....
 
lasso:

Salve.


Le classi sono molto miste, anche più che in fig..,


ma ancora distinguibile.

Sono in grado di dividere anche con metodi lineari non furbi, ma non riesco a far sì che il NS produca un risultato migliore (o almeno di qualità comparabile).

Spero in risposte adeguate e che siano utili anche per gli altri forumisti!

Sono stato privato della comunicazione con voi per qualche tempo... Andiamo avanti.

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

Il problema posto a pagina 14 è effettivamente risolto in modo elementare da una rete neurale.

Nello screenshot c'è una delle possibili configurazioni. Potete tranquillamente ridurre il numero di neuroni in uno strato nascosto a 7, per esempio.



E ciò che è stato piacevole e sorprendente, è che NS trova le proprie soluzioni, a differenza dei metodi lineari ovvi (in relazione a questo semplice problema),

e queste soluzioni sono sconcertanti all'inizio, ma dopo un'analisi completa, si scopre che le soluzioni NS sono anche leggermente più efficienti di quelle lineari. O-o-o-o-o!

Andare avanti.... ;-)

 
lasso:

Il problema posto a pagina 14 è effettivamente risolto in modo elementare con una rete neurale.

Lo screenshot è una delle possibili configurazioni. Il numero di neuroni nello strato nascosto può essere ridotto in modo indolore a 7, per esempio.



E ciò che è stato sorprendente e piacevole è stato il fatto che NS trova le proprie soluzioni, a differenza dei metodi lineari ovvi (per questo semplice problema),

e queste soluzioni sono sconcertanti all'inizio, ma dopo un'analisi completa, si scopre che le soluzioni NS sono anche leggermente più efficienti di quelle lineari. O-o-o-o-o!

Andare avanti.... ;-)


È un problema di incrocio stocastico? Non capisco cosa volete ottenere risolvendo questo problema, ovviamente la pochezza della descrizione della situazione non permetterà a NS di risolvere questo problema in modo "significativo". Una tale rete sarà estremamente instabile e assolutamente inutile al di fuori dell'OV. Ma andrà bene per un compito di allenamento, naturalmente...

Dove andiamo da qui? Forse dovremmo avvicinarci alla previsione della serie temporale?

 
Figar0:

È un problema di incrocio stocastico? Non capisco cosa volevate ottenere risolvendo questo problema, ovviamente la descrizione scarna della situazione non permetterà a NS di risolvere questo problema in modo "significativo". Una tale rete sarà estremamente instabile e assolutamente inutile al di fuori dell'OV. Ma andrà bene per un compito di allenamento, naturalmente...

Dove andiamo da qui? Forse un po' più vicino ai nostri agnelli - previsione delle serie temporali?

Voglio imparare ad applicare l'apparato NS nei blocchi analitici del mio TS, e farlo visivamente e con esempi, a beneficio degli altri.

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

Quindi, il compito di classificazione in Statistica 6 -- risolto.

Ma è un programma di terzi, che non è direttamente collegato al trading.

Sì, permette di costruire un sacco di grafici, rapporti, salvare la rete trovata in un file, generare codice in C e VB, ecc. Grande!

Ma qui ci troviamo di fronte a un nuovo problema!

Come trasferire correttamente tutta questa ricchezza e farla funzionare in MQL?

 
lasso:

Sì, permette di costruire molti grafici e rapporti, salvare la rete trovata in un file, generare codice in C e in VB, ecc. Grande!

Ma qui ci troviamo di fronte a un nuovo problema!

Come trasferire correttamente tutta questa ricchezza e farla funzionare in MQL?



Beh, non è affatto un problema allegare una dll all'Expert Advisor. Il Terminale stesso nella cartella Experts/Samples ha un buon esempio, inoltre una ricerca sul forum usando la frase "connect dll" vi aiuterà a farlo in pochissimo tempo. Sì, credo che ci fosse un articolo su questo argomento... Non è un ostacolo quando si lavora con le reti neurali.

Domande molto più interessanti:

Cosa dovrebbe fare una rete neurale? Quali sono gli ingressi? Qual è il modo migliore per prepararli? Scegliere il tipo e l'architettura del NS, ecc. Tutto questo è più facile e più interessante da fare su qualche compito pratico, come il trading di novembre, e se possibile dicembre 2010 in profitto come nuovi dati NS. Anche se forse sarebbe meglio metterlo in un ramo separato come "Principianti e oltre la pratica NS".

 
Figar0:

Beh, non è affatto un problema allegare una dll all'Expert Advisor. Il Terminale stesso nella cartella Experts/Samples ha un buon esempio, inoltre una ricerca sul forum usando la frase "connect dll" vi aiuterà a farlo facilmente. Sì, credo che ci fosse un articolo su questo argomento... Non è un ostacolo quando si lavora con le reti neurali.

Domande molto più interessanti:

Cosa dovrebbe fare una rete neurale? Quali sono gli ingressi? Qual è il modo migliore per prepararli? Scegliere il tipo e l'architettura del NS, ecc. Tutto questo è più facile e più interessante da fare su qualche compito pratico, come il trading di novembre, e se possibile dicembre 2010 in profitto come nuovi dati NS. Anche se probabilmente sarebbe più corretto metterlo in un ramo separato come "Principianti e non solo pratica NS".

Sono d'accordo che le domande sono interessanti. E per avere delle risposte, è necessario lavorare con funzionalità nell'ambiente MT.

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

La domanda non è come allegare la dll, ma dove ottenere questa dll?

Statistics 6 genera una dll?

O stai suggerendo a un ricercatore di reti neurali alle prime armi di scrivere il proprio NS e renderlo come una DLL? Non ti capisco....

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

Esiste una variante della libreria FANN.

Ci sono altre varianti?

 
lasso:

La domanda non è come allegare la dll, ma dove trovo la dll?

Statistica 6 genera una dll?

O stai suggerendo a un ricercatore inesperto di reti neurali di scrivere lui stesso il NS e trasformarlo in una DLL? Non ti capisco....

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

Esiste una variante della libreria FANN.

Statistica, così come molti altri programmi NS (neuroshell, neurosolutions), genera codice C per quanto mi ricordo. Probabilmente è la via d'uscita più semplice per un principiante. Si possono scrivere reti direttamente in MQL ma questo solleva una questione di formazione... Trovo il FANN troppo ingombrante e non molto facile da usare.

 
Statistica genera il sorgente C dell'applicazione console della rete neurale addestrata (se si compila tale sorgente si ottiene un file eseguibile exe). Il codice può essere portato a MQL4/5 come due dita sul pavimento, con leggere modifiche. È così che ho iniziato a studiare le reti neurali.
 
lasso:


Esiste una versione della libreria FANN.

Ci sono altre opzioni?


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

 
Figar0:

Statistica, come molti altri programmi NS (neuroshell, neurosolutions), genera codice C per quanto mi ricordo. Questo è probabilmente il modo più semplice per un principiante. Si possono scrivere reti direttamente in MQL ma questo solleva una questione di formazione... Trovo il FANN troppo ingombrante e non molto facile da usare.


joo:
Statistica genera il codice sorgente C per l'applicazione console della rete neurale addestrata (se si compila tale codice sorgente si ottiene un file eseguibile exe). Il codice potrebbe essere portato a MQL4/5 come due dita sul pavimento, con lievi modifiche. È così che ho iniziato a studiare le reti neurali.

Ecco cosa genera la mia Statistics 6 ))

Qual è la gioia?

L'unica gioia è vedere l'andamento del segnale dall'ingresso all'uscita nel debugger.

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


#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;
  }
}

O sto generando nel posto sbagliato?