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

 
Aleksey Terentev:
Mis soluciones se basaban inicialmente en OpenNN (C++).
Ahora he aprendido muchas cosas y me he pasado a Keras (Python).

Principalmente me ocupo del aprendizaje profundo de la predicción de problemas de clasificación.

Así que estamos tratando con la misma área de MO. Keras es un buen paquete, sobre todo porque está portado a R.

Sólo que no entiendo la pregunta de ¿qué?

Buena suerte

 
Vladimir Perervenko:

Así que estamos tratando con la misma área de MO. Keras es un buen paquete, sobre todo porque está portado a R.

Sólo que no entiendo la pregunta de ¿qué?

Buena suerte

Acabo de decidir unirme a la discusión. =)
 
Maxim Dmitrievsky:


Ahora bien, esto es interesante... significa que habrá que hacer pruebas adicionales, tal vez esta rn no sea tan significativa como se pensaba antes

La única ventaja es la selección de los pesos en el optimizador al mismo tiempo que otros parámetros del sistema

Actualmente estoy tratando de averiguar qué tan bien calcula dentro de un rango de datos conocidos. La tabla de multiplicar, por ejemplo.

Actualización.

Otros experimentos después de cambiar el Asesor Experto han mostrado los siguientes resultados en comparación con el MLP 3-5-1 ordinario.

Se utilizaron diferentes fórmulas para las pruebas:

//double func(double d1,double d2,double d3 ){devuelve d1*d2;} //el error es de 0-2%, porque la multiplicación es inherente a las fórmulas. El 2% se obtiene porque el optimizador genético no siempre se detiene en una solución ideal. Pero también existe una solución absolutamente exacta con error = 0.
//double func(double d1,double d2,double d3 ){return d1*d2*d3;}// el error 0-2% de multiplicación está en las fórmulas, en MLP 1%
//double func(double d1,double d2,double d3 ){return MathSin(d1);}// 2-6% de error, en MLP 0,1%
//double func(double d1,double d2,double d3 ){return MathSin(d1)*MathSin(d2)*MathSin(d3);}// error 2%, en MLP 1%
//double func(double d1,double d2,double d3 ){return MathSin(d1)*MathSin(d2)*MathSqrt(d3);}// 3-4% error, en MLP 1%
//double func(double d1,double d2,double d3 ){return MathSin(d1)*MathPow(d2,.33)*MathSqrt(d3);}// error 8-4%, a MLP 1.5%
//double func(double d1,double d2,double d3 ){return MathPow(d1,2)*MathPow(d2,.33)*MathSqrt(d3);}// error 8-4%, a MLP 1.5%

La conclusión es que el MLP normal tiene 2-3 veces menos errores que el RNP de Reshetov. Quizás parte de este error se deba a que el optimizador genético del terminal MT5 no se detiene en una solución ideal.
 
elibrarius:

Actualmente estoy tratando de averiguar lo bien que cuenta dentro de un rango de datos conocidos. Una tabla de multiplicar, por ejemplo.

Actualización.

Los experimentos adicionales después de cambiar el EA mostraron los siguientes resultados, en comparación con el MLP 3-5-1 normal.

Se utilizaron diferentes fórmulas para las pruebas:

//double func(double d1,double d2,double d3 ){devuelve d1*d2;} //el error es de 0-2%, porque la multiplicación es inherente a las fórmulas. El 2% se obtiene porque el optimizador genético no siempre se detiene en una solución ideal. Pero también existe una solución absolutamente exacta con error = 0.
//double func(double d1,double d2,double d3 ){devuelve d1*d2*d3;}// error 0-2% la multiplicación es inherente a las fórmulas, en MLP 1%
//double func(double d1,double d2,double d3 ){return MathSin(d1);}// error 2-6%, en MLP 0,1%
//double func(double d1,double d2,double d3 ){return MathSin(d1)*MathSin(d2)*MathSin(d3);}// error 2%, en MLP 1%
//double func(double d1,double d2,double d3 ){devuelve MathSin(d1)*MathSin(d2)*MathSqrt(d3);}// 3-4% de error, en MLP 1%
//double func(double d1,double d2,double d3 ){return MathSin(d1)*MathPow(d2,.33)*MathSqrt(d3);}// error 8-4%, en MLP 1.5%
//double func(double d1,double d2,double d3 ){devuelve MathPow(d1,2)*MathPow(d2,.33)*MathSqrt(d3);}// error 8-4%, en MLP 1.5%

En resumen, podemos concluir que el MLP normal tiene 2-3 veces menos errores que la RNN de Reshetov. Quizás parte de este error se deba a que el optimizador genético del terminal MT5 no se detiene en una solución ideal.

Sí, resultados interesantes, quizás una enumeración completa sería más precisa
 
Maxim Dmitrievsky:

Sí, resultados interesantes, tal vez un rebasamiento completo sería más preciso
sería más preciso, pero después de unas semanas o meses... 8 coeficientes de ajuste con un paso del 1% 1008= 100000000000000 iteraciones, y el propio terminal pasa a la genética, con este número.
 
elibrarius:
Lo sería, pero después de unas semanas o meses... 8 coeficientes seleccionables con un paso del 1% 1008= 10000000000000000 iteraciones, y el propio terminal cambia a la genética, en ese número.

Me puedes decir, clasificar MLP desde alglib entiendo que requiere al menos 2 salidas, ¿cómo trabajar con esto? no hay ayuda ni descripción en ningún sitio... tinny )
 
Maxim Dmitrievsky:

Puedo preguntar, clasificar MLP desde alglib entiendo, requiere al menos 2 salidas, ¿cómo trabajar con ello?)

Sí 2, de la ayuda http://alglib.sources.ru/dataanalysis/neuralnetworks.php

Un caso especial son las redes neuronales con capa de salida lineal y normalización SOFTMAX de las salidas. Se utilizan para los problemas de clasificación, en los que las salidas de la red deben ser no negativas y su suma debe ser estrictamente igual a uno, lo que permite utilizarlas como probabilidades de asignar el vector de entrada a una de las clases (en el caso límite las salidas de la red entrenada convergen a estas probabilidades). El número de salidas de una red de este tipo no debe ser siempre inferior a dos (limitación impuesta por la lógica elemental).

Aún no lo he tratado, todavía estoy experimentando con los lineales.
 
elibrarius:

Sí, de la referencia http://alglib.sources.ru/dataanalysis/neuralnetworks.php

Un caso especial son las redes neuronales con capa de salida lineal y normalización SOFTMAX de las salidas. Se utilizan para los problemas de clasificación, en los que las salidas de la red deben ser no negativas y su suma debe ser estrictamente igual a uno, lo que permite utilizarlas como probabilidades de asignar el vector de entrada a una de las clases (en el caso límite las salidas de la red entrenada convergen a estas probabilidades). El número de salidas de una red de este tipo es siempre al menos dos (limitación dictada por la lógica elemental).


Ah, bueno, es decir, alimentamos la probabilidad de uno u otro resultado, por ejemplo, probabilidad de comprar 0,9, luego probabilidad de vender 0,1, un array servirá de buffer para las probabilidades de compra, otro para las de venta, los llenamos con estos valores y después del entrenamiento se utilizarán para volcar por separado las probabilidades de compra y de venta, ya veo, ¿no?
 
Maxim Dmitrievsky:

Bueno, en otras palabras, alimentamos la probabilidad de uno u otro resultado, por ejemplo, la probabilidad de compra es 0,9, y para la venta - 0,1. Una matriz servirá como un buffer para las probabilidades de compra, y el otro para las probabilidades de venta y después de la formación en ellos descartará las probabilidades por separado, supongo que es correcto?

Y por lo que he leído, tengo la misma opinión.

Aunque no sé cuál es su ventaja... al tener 1 salida, también obtenemos probabilidades - cerca de 0 (o -1) de Compra, y cerca de 1 de Venta. (o viceversa, dependiendo de cómo se entrene).

¿Puede ser útil si hay 3 o más salidas? Después de todo, 1 salida sería difícil de utilizar.... para 3 o 4 tareas (aunque también puede utilizar 0, 0,5 y 1 como clases Comprar, Esperar, Vender)

 
elibrarius:

Y por lo que he leído, tengo la misma opinión.

Sin embargo, no sé cuál es su ventaja... al tener 1 salida, también obtenemos probabilidades - alrededor de 0 (o -1) de Compra, y alrededor de 1 de Venta. (O viceversa, según la forma de entrenar).

¿Podría ser útil si hay 3 o más salidas? Entonces 1 salida sería difícil de usar.... para 3 o 4 tareas (aunque también puede utilizar 0, 0,5 y 1 como clases Comprar, Esperar, Vender)


Sí, probablemente lo hicieron para que sea posible tener más de 2 clases... entonces probablemente será más clustering y se puede utilizar otros métodos como k-means :)