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

 
Maxim Dmitrievsky:
con katbust - vuelve a ser normal, normalmente > 0,5 en la prueba... como siempre

¿Comprobó el bosque de 1 árbol en katbust? ¿Y da katbust la salida de entropía cruzada o algún otro error?

Alglib da 5 errores diferentes: (este es mi ejemplo con 1 árbol)

Alerta: Informe de estimación de errores del conjunto de entrenamiento: relclserror=0,267; avgce=184,207; rmserror=0,516; avgerror=0,267; avgrelerror=0,267;

 

No, el boosting se construye de forma diferente, aumenta el número de árboles mientras la entropía disminuye, cuando empieza a crecer durante n iteraciones, se detiene, para no sobrecomplicar el modelo

da la entropía y cualquier métrica personalizada, pero se basa en la entropía

la versión inglesa del sitio de alglib tiene un nuevo bosque más rápido, por cierto... quería reescribirlo, pero no lo encuentro )

 
He mirado los documentos de xgboost. No es la salida de la entropía cruzada, sino
error - tasa de error de clasificación binaria. Se calcula como (# casos erróneos) / (# todos los casos).
Por defecto, utiliza el umbral de 0,5 para los valores predichos para definir las instancias negativas y positivas.
Un umbral diferente (por ejemplo, 0.) podría especificarse como "error@0".
 
elibrarius:
He mirado los documentos de xgboost. No tiene una salida de entropía cruzada, pero
error - Tasa de error de clasificación binaria. Se calcula como (# casos erróneos) / (# todos los casos).
Por defecto, utiliza el umbral de 0,5 para los valores predichos para definir las instancias negativas y positivas.
Un umbral diferente (por ejemplo, 0.) podría especificarse como "error@0".

Sí, y aquí el error de clasificación se utiliza por defecto, aparentemente

pero hay que distinguir, el boosting utiliza el error para parar, mientras que el bosque sólo da post-facto, y los árboles de profundidad completa
 
Maxim Dmitrievsky:

No, el boosting se construye de forma diferente, aumenta el número de árboles mientras la entropía disminuye, cuando empieza a crecer durante n iteraciones, se detiene, para no sobrecomplicar el modelo

da la entropía y cualquier métrica personalizada, pero se basa en la entropía

en la versión inglesa del sitio de alglib publiqué un nuevo bosque más rápido, por cierto... quería reescribirlo, pero no lo encuentro )

¿Dónde está el nuevo alglib? ¿Puedo buscarlo en algún lugar del foro? Es interesante comparar el código de esta función

 
elibrarius:

¿Dónde está el nuevo alliglib - está en el foro en algún lugar para buscar? Es interesante comparar el código de esta función

no, está en c++ o c#

http://www.alglib.net/arcnews.php#date_16_06_2018

  • Algoritmo de construcción de bosques aleatorios mejorado, que es de 2 a 10 veces más rápido que la versión anterior y produce bosques de órdenes de magnitud más pequeños.
NEWS Archive
  • www.alglib.net
The news archive contains the list of all news, 44 in total. The latest news are at the news page.
 
Maxim Dmitrievsky:

no, está en c++ o c#

http://www.alglib.net/arcnews.php#date_16_06_2018

  • Algoritmo de construcción de bosques aleatorios mejorado, que es de 2 a 10 veces más rápido que la versión anterior y produce bosques de órdenes de magnitud más pequeños.

Gracias.

 
elibrarius:

Gracias.

Si te das cuenta y comparas, avísame :) podrías reescribirlo así, si no es mucha molestia. Los archivos del bosque actual son demasiado grandes, estaría bien reducirlos. Y la aceleración también es una ventaja.

 

Gracias a la iniciativa de Maxim he sido desbaneado. Gracias Maxim.

He estado en la sauna durante un tiempo y he ejecutado mi EA en hojas, el que he escrito antes de Año Nuevo. Hasta ahora el resultado es negativo, pero creo que tengo que darle más tiempo, porque Si está en plano ahora después de los fuertes movimientos de Año Nuevo, que no han sucedido cuando se inició el EA.

Las pruebas se han hecho con un volumen mínimo en la cuenta con un rico historial y una mala experiencia, por lo tanto no habrá una señal pública, publicaré el informe más adelante cuando las estadísticas estén disponibles. Lo hago para aquellos que están interesados si mi enfoque es rentable o no.

En cuanto a CatBoost'a, porque tengo modelos muy pequeños, 1-30 árboles más o menos, a continuación, frente a una situación en la que la prueba (en la que el modelo de selección) y el examen (en el que las pruebas independientes) muestra puede mostrar muy buenos resultados financieros, pero en la muestra de formación resultados son muy débiles. Así que ahora pruebo el modelo en las tres muestras, y si estoy contento con él, lo selecciono. Por lo tanto, recomiendo mirar también la muestra de entrenamiento, yo no lo hice ya que esperaba el mismo efecto que las hojas del árbol (mi enfoque alternativo en el que sólo se seleccionan las hojas) o el andamiaje, que el modelo se comportara definitivamente bien en la muestra de prueba, pero resulta que no siempre es así.

Hasta ahora la cuestión de los criterios para la selección de un modelo está abierta para mí, después de las pruebas en una muestra para la formación de buenos modelos (para una serie de indicadores financieros y modelos de criterios) de 100k no es más que 10-30 piezas, que no es suficiente, por supuesto. Deberíamos rebajar los criterios o crear más modelos. Catbust tiene muchos parámetros diferentes, por lo que puede remachar muchos modelos.

Por otro lado, tenía muchas esperanzas en el entrenamiento a través de las tarjetas gráficas, pero resultó ser muy poco útil para la 1060 - hasta ahora los experimentos muestran que tardó 20 minutos en entrenar 200 modelos, mientras que en el procesador G3900 (en realidad la escoria bajo LGA1151) ¡sólo tardó 6 minutos! Al mismo tiempo, el procesador siempre está cargando entre el 50% y el 60%, lo que hace imposible utilizar más de 2 tarjetas de vídeo a la vez, mientras que yo tenía grandes esperanzas en un equipo de 6 tarjetas. No sé por qué ocurre esto cuando en teoría todo debería ser rápido. El mayor cuello de botella en los cálculos de la GPU es la transferencia del modelo de la RAM a la GPU y viceversa, pero es demasiado lento para mí, tal vez la transferencia ocurre después de cada iteración y esa es la razón de los retrasos. ¿Alguien más ha intentado ejecutarlo en la GPU?

 
Maxim Dmitrievsky:

Si te das cuenta y comparas, avísame :) podrías reescribirlo así, si no es mucha molestia. Los archivos del bosque actual son demasiado grandes, estaría bien reducirlos. Sí, y la aceleración también es una ventaja.

Lo he comparado, hay el mismo trozo de código sin usar abajo: (firmada en 2009, es decir, no se ha editado esta parte)


             Copyright 16.02.2009 by Bochkanov Sergey
        *************************************************************************/
        public static double dfavgce(decisionforest df,
            double[,] xy,
            int npoints,
            alglib.xparams _params)
        {
            double result = 0;
            double[] x = new double[0];
            double[] y = new double[0];
            int i = 0;
            int j = 0;
            int k = 0;
            int tmpi = 0;
            int i_ = 0;

            x = new double[df.nvars-1+1];
            y = new double[df.nclasses-1+1];
            result = 0;
            for(i=0; i<=npoints-1; i++)
            {
                for(i_=0; i_<=df.nvars-1;i_++)
                {
                    x[i_] = xy[i,i_];
                }
                dfprocess(df, x, ref y, _params);
                if( df.nclasses>1 )
                {
                   
                    //
                    // classification-specific code
                    //
                    k = (int)Math.Round(xy[i,df.nvars]);
                    tmpi = 0;
                    for(j=1; j<=df.nclasses-1; j++)
                    {
                        if( (double)(y[j])>(double)(y[tmpi]) )
                        {
                            tmpi = j;
                        }
                    }

                    if( (double)(y[k])!=(double)(0) )
                    {
                        result = result-Math.Log(y[k]);
                    }
                    else
                    {
                        result = result-Math.Log(math.minrealnumber);
                    }
                }
            }
            result = result/npoints;
            return result;
        }

Razón de la queja: