Aprendizaje automático en el trading: teoría, práctica, operaciones y más - página 1259

 
Es decir, si hay 20 predictores, quién sabe a qué llegará Bayes si no se entrena lo suficiente.
 
Maxim Dmitrievsky:

no del todo, debería ser más claro aquí

https://habr.com/ru/post/276355/

el abanico de aplicaciones es amplio, otra cuestión es cómo se utilizará exactamente

Lo leeré por la noche

 
Maxim Dmitrievsky:

Tú y yo no tenemos nada que hablar, porque por tu psicotipo puedo decir que eres un niño o simplemente... olvídalo.

¿"Nosotros" como tú? Para empezar, busca un trabajo, es una pena que a esa edad estés sentado sobre los hombros de tus padres.

 
Maxim Dmitrievsky:

no del todo, debería ser más claro aquí

https://habr.com/ru/post/276355/

el abanico de aplicaciones es amplio, otra cuestión es cómo se utilizará exactamente

Conclusión de la segunda parte del artículo:
El abandono puede verse como una versión barata del bayesianismo, que es muy simple. La idea se basa en la misma analogía con los conjuntos que mencioné al final del último post: imagina que tienes una red neuronal. Ahora imagina que lo coges, arrancas unas neuronas al azar y lo dejas a un lado. Tras unas 1000 operaciones de este tipo, se obtiene un conjunto de mil redes, en las que cada una es ligeramente diferente de la otra de forma aleatoria. Hacemos una media de sus predicciones y obtenemos que las desviaciones aleatorias se compensan entre sí en algunas partes y dan predicciones reales. Ahora imagina que tienes una red bayesiana, y sacas mil veces un conjunto de sus pesos de la incertidumbre, y obtienes el mismo conjunto de redes ligeramente diferentes.

Lo mejor del enfoque bayesiano es que permite utilizar esa aleatoriedad de forma controlada.

....

En la práctica, esto se traduce en que una red dimensional da mejores resultados que una red de abandono, aunque no por mucho.

Lo que hace que el abandono sea más genial es que es muy simple, por supuesto.

Es decir, una NS profunda con abandono es el equivalente a una red bayesiana. Y el dropout está en muchos paquetes, puedes usarlo primero para buscar peces en tus predictores/objetivos. Y luego tratar de mejorar los resultados con Bayes. En los artículos de Vladimir Perervenko se utilizó el abandono, es posible experimentar sobre su base.

Experimenté, pero no encontré ningún avance en mis predictores.
Pero no hice redes tan profundas como para tener que dejar caer 1000 neuronas de ellas. No he probado más que N-100-100-100-1 (401 neuronas). Es decir, pueden haberse eliminado 100, pero no 1000. Para eliminar 1000, se necesitaría una red con 4-10 mil neuronas y probablemente se tardaría mucho tiempo en contar.
Es posible que los bosques con 1000 árboles tengan resultados similares, y que cuenten mucho más rápido que NS.
 
elibrarius:
No he probado más que N-100-100-1 (401 neuronas).

No se puede entrenar a monstruos así de forma adecuada. En mi opinión, necesitamos una NS más sencilla. Hasta 100 neuronas.

 
elibrarius:
Conclusión de la segunda parte del artículo:

Es decir, una NS profunda con un abandono es análoga a una red bayesiana. Y el abandono se encuentra en muchos paquetes, puede utilizarlos primero para buscar peces en sus predictores/objetivos. Y luego tratar de mejorar los resultados con Bayes. En los artículos de Vladimir Perervenko abandono se utilizó, se puede experimentar sobre su base.

Experimenté, pero no encontré ningún avance en mis predictores.
Pero no hice redes tan profundas como para tener que dejar caer 1000 neuronas de ellas. No he probado más que N-100-100-100-1 (401 neuronas). Es decir, pueden haberse eliminado 100, pero no 1000. Para eliminar 1000, se necesitaría una red con 4-10 mil neuronas y probablemente se tardaría mucho tiempo en contar.
Es posible que los bosques con 1000 árboles tengan resultados similares, y que cuenten mucho más rápido que NS.

Oh, no sé, con cualquier número de árboles/maderas el akurasi deja de crecer y se quedan ahí de lastre, sin mejorar nada. Dejarlos caer o no dejarlos caer es una señal inequívoca.

Dura comparación entre la bayesiana y los abandonos en mi opinión, pero aún no soy muy conocedor del tema así que no voy a discutir, tal vez sí

 
Maxim Dmitrievsky:

Una burda comparación entre Bayes y los abandonos en mi opinión, pero todavía no soy muy entendido en el tema y no voy a discutir, tal vez sea así

Fue el autor de este artículo quien hizo la comparación, no yo. Escribió su artículo a partir de otro más grande, que utilizó para sus experimentos. Es decir, esta comparación proviene aparentemente de los desarrolladores del método.

 
Maxim Dmitrievsky:

Oh, no sé, con cualquier número de árboles/maderas el akurasi deja de crecer y se quedan ahí en lastre, sin mejorar nada. Los dejes caer o no, son un pañuelo muerto.

si va a construir un bosque con 1000 árboles, probablemente debería suministrar un 1% de datos a cada bosque, es decir, r=0,01, no 0,1 ... 0,6 como se recomienda para los bosques con 100 árboles recomendados.
 

He encontrado un código oscuro en el bosque de Alglib. Código completo de la función de cálculo de la etiropía cruzada de dataanalysis.mqh:

//+------------------------------------------------------------------+
//| Average cross-entropy (in bits per element) on the test set      |
//| INPUT PARAMETERS:                                                |
//|     DF      -   decision forest model                            |
//|     XY      -   test set                                         |
//|     NPoints -   test set size                                    |
//| RESULT:                                                          |
//|     CrossEntropy/(NPoints*LN(2)).                                |
//|     Zero if model solves regression task.                        |
//+------------------------------------------------------------------+
static double CDForest::DFAvgCE(CDecisionForest &df,CMatrixDouble &xy,
                                const int npoints)
  {
//--- create variables
   double result=0;
   int    i=0;
   int    j=0;
   int    k=0;
   int    tmpi=0;
   int    i_=0;
//--- creating arrays
   double x[];
   double y[];
//--- allocation
   ArrayResizeAL(x,df.m_nvars);
   ArrayResizeAL(y,df.m_nclasses);
//--- initialization
   result=0;
   for(i=0;i<=npoints-1;i++)
     {
      for(i_=0;i_<=df.m_nvars-1;i_++)
         x[i_]=xy[i][i_];
      //--- function call
      DFProcess(df,x,y);
      //--- check
      if(df.m_nclasses>1)
        {
         //--- classification-specific code
         k=(int)MathRound(xy[i][df.m_nvars]);
         tmpi=0;
         for(j=1;j<=df.m_nclasses-1;j++)
           {
            //--- check
            if(y[j]>(double)(y[tmpi]))
               tmpi=j;
           }

         //--- check
         if(y[k]!=0.0)
            result=result-MathLog(y[k]);
         else
            result=result-MathLog(CMath::m_minrealnumber);
        }
     }
//--- return result
   return(result/npoints);
  }

El fragmento de código marcado en rojo considera algo(tmpi) que no se utiliza de ninguna manera. ¿Por qué se incluye entonces?
O bien falta algo o el código no está completamente limpio.
En general, empecé a entrar en esta función porque quería buscar en 1 árbol. Y cuando puse número de árboles en el bosque = 1, vi que todos los errores están entre 0 y 1, y este de 100 a 300 + sucede.
Alguien entiende la entropía cruzada: ¿el código es correcto, o algo está mal?

Según la wikipedia debería ser



 

Lo he comparado con catbust - devuelve bien, normalmente > 0,5 en la prueba... bueno, como siempre

Mañana miraré el cálculo, quizá el código de depuración siga ahí

en general, esta métrica no sirve de nada aquí, ya que no se utiliza para una ruptura temprana o algo así... y es poco informativa en consecuencia. Se toma un error de clasificación y ya está