Redes neuronales. Preguntas de los expertos. - página 16

 
joo:

Pero aparentemente Lasso está entrenando su bio-red para trabajar con los artificiales de esta manera.

Divertido :)))) Hombre, Nsh es tan adictivo en este sentido, que a veces es extremadamente difícil separarse de él.....
 
lasso:

Hola.


Las clases están muy mezcladas, incluso más que en fig..,


pero todavía se puede distinguir.

Soy capaz de dividir incluso por métodos lineales no astutos, pero no consigo que el NS produzca un resultado mejor (o al menos comparable en calidad).

Espero que las respuestas sean adecuadas y que también sean útiles para otros foreros.

He estado privado de comunicación con usted durante algún tiempo... Sigamos con ello.

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

El problema planteado en la página 14 se resuelve efectivamente de forma elemental mediante una red neuronal.

En la captura de pantalla hay una de las posibles configuraciones. Puede reducir sin problemas el número de neuronas de una capa oculta a 7, por ejemplo.



Y lo que fue agradable y sorprendente, es que NS encuentra sus propias soluciones, a diferencia de los métodos lineales obvios (en relación con este simple problema),

y estas soluciones son desconcertantes al principio, pero tras un extenso análisis, resulta que las soluciones NS son incluso ligeramente más eficientes que las lineales. ¡O-o-o-o-o!

Seguir adelante.... ;-)

 
lasso:

El problema planteado en la página 14 se resuelve efectivamente de forma elemental con una red neuronal.

La captura de pantalla es una de las configuraciones posibles. El número de neuronas en la capa oculta puede reducirse sin problemas a 7, por ejemplo.



Y lo que fue sorprendente y agradable fue el hecho de que NS encuentra sus propias soluciones, a diferencia de los métodos lineales obvios (para este sencillo problema),

y estas soluciones son desconcertantes al principio, pero tras un análisis exhaustivo, resulta que las soluciones NS son incluso ligeramente más eficientes que las lineales. ¡O-o-o-o-o!

Seguir adelante.... ;-)


¿Es un problema de cruce estocástico? No entiendo qué quieres conseguir con la solución de este problema, obviamente la escasez de la descripción de la situación no permitirá a NS resolver este problema de forma "significativa". Una red así será extremadamente inestable y absolutamente inútil fuera de la VO. Pero servirá para una tarea de formación, por supuesto...

¿A dónde vamos a partir de aquí? ¿Tal vez deberíamos acercarnos a la predicción de la serie temporal?

 
Figar0:

¿Es un problema de cruce estocástico? No entiendo lo que querías conseguir resolviendo este problema, obviamente la escasa descripción de la situación no permitirá a NS resolver este problema de ninguna manera "significativa". Una red así será extremadamente inestable y absolutamente inútil fuera de la VO. Pero servirá para una tarea de formación, por supuesto...

¿A dónde vamos a partir de aquí? Tal vez un poco más cerca de nuestros corderos - ¿previsión de series temporales?

Quiero aprender a aplicar los aparatos de NS en los bloques analíticos de mi ST, y hacerlo de forma visual y con ejemplos, en beneficio de los demás.

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

Así pues, la tarea de clasificación en Estadística 6... está resuelta.

Pero es un programa de terceros, que no está directamente relacionado con el comercio.

Sí, permite construir un montón de gráficos, informes, guardar la red encontrada en un archivo, generar código en C y VB, etc. ¡Genial!

Pero aquí nos encontramos con un nuevo problema.

¿Cómo transferir toda esta riqueza correctamente y hacerla funcionar en MQL?

 
lasso:

Sí, permite construir un montón de gráficos e informes, guardar la red encontrada en un archivo, generar código en C y en VB, etc. ¡Genial!

Pero aquí nos encontramos con un nuevo problema.

¿Cómo transferir correctamente toda esta riqueza y hacerla funcionar en MQL?



Bueno, no es un problema para adjuntar una dll al Asesor Experto en absoluto. El propio Terminal en la carpeta Expertos/Muestras tiene un buen ejemplo, además una búsqueda en el foro usando la frase "connect dll" te ayudará a hacerlo en un santiamén. Sí, creo que había un artículo sobre este tema... No es un obstáculo cuando se trabaja con redes neuronales.

Preguntas mucho más interesantes:

¿Qué debe hacer una red neuronal? ¿Cuáles son las entradas? ¿Cuál es la mejor manera de prepararlos? Elija el tipo y la arquitectura de la NS, etc. Todo esto es más fácil y más interesante de hacer en alguna tarea práctica, como el comercio de noviembre, y si es posible diciembre de 2010 en el beneficio como nuevos datos NS. Aunque, tal vez, sería mejor ponerlo en una rama separada como "Principiantes y más allá de la práctica de la NS".

 
Figar0:

Bueno, no es un problema para adjuntar una dll al Asesor Experto en absoluto. El propio Terminal en la carpeta Expertos/Muestras tiene un buen ejemplo, además una búsqueda en el foro usando la frase "connect dll" te ayudará a hacerlo en un santiamén. Sí, creo que había un artículo sobre este tema... No es un obstáculo cuando se trabaja con redes neuronales.

Preguntas mucho más interesantes:

¿Qué debe hacer una red neuronal? ¿Cuáles son las entradas? ¿Cuál es la mejor manera de prepararlos? Elija el tipo y la arquitectura de la NS, etc. Todo esto es más fácil y más interesante de hacer en alguna tarea práctica, como el comercio de noviembre, y si es posible diciembre de 2010 en el beneficio como nuevos datos NS. Aunque, probablemente, sería más correcto ponerlo en una rama separada como "Principiantes y no sólo práctica de NS".

Estoy de acuerdo en que las preguntas son interesantes. Y para tener respuestas a ellas se necesita funcionalidad trabajando en el entorno de la MT.

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

La pregunta no es cómo adjuntar la dll, sino dónde conseguir esta dll.

¿Genera Statistics 6 una dll?

¿O está sugiriendo a un investigador novato en redes neuronales que escriba su propio NS y lo haga como DLL? No te entiendo....

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

Existe una variante de la biblioteca FANN.

¿Existen otras variantes?

 
lasso:

La cuestión no es cómo adjuntar la dll, sino dónde puedo conseguirla.

¿Genera Statistic 6 una dll?

¿O estás sugiriendo que un investigador novato en redes neuronales escriba él mismo el NS y lo convierta en una DLL? No te entiendo....

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

Existe una variante de la biblioteca FANN.

Statistica, al igual que muchos otros programas de NS (neuroshell, neurosolutions), genera código C por lo que recuerdo. Probablemente sea la salida más fácil para un novato. Se pueden escribir redes directamente en MQL, pero esto plantea una cuestión de formación... Considero que FANN es demasiado engorroso y no es muy fácil de usar.

 
Statistica genera el código fuente en C de la aplicación de consola de la red neuronal entrenada (si se compila dicho código fuente se obtiene un archivo exe-ejecutable). El código se puede portar a MQL4/5 como dos dedos de frente, con una ligera modificación. Así fue como empecé a estudiar las redes neuronales.
 
lasso:


Existe una versión de la biblioteca FANN.

¿Hay otras opciones?


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

 
Figar0:

Statistica, al igual que muchos otros programas NS (neuroshell, neurosolutions), genera código C por lo que recuerdo. Esta es probablemente la salida más fácil para un principiante. Se pueden escribir redes directamente en MQL, pero esto plantea una cuestión de formación... FANN me parece demasiado engorroso y no muy fácil de usar.


joo:
Statistica genera un código fuente en C para la aplicación en consola de la red neuronal entrenada (si se compila dicho código fuente se obtiene un archivo exe-ejecutable). El código podría ser portado a MQL4/5 como dos dedos en el pavimento, con una ligera modificación. Así fue como empecé a estudiar las redes neuronales.

Esto es lo que genera mi Statistics 6 ))

¿Cuál es la alegría?

La única alegría es ver la tendencia de la señal desde la entrada hasta la salida en el depurador.

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


#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 estoy generando en el lugar equivocado?

Razón de la queja: