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

 
Evgeny Dyuka:
1. Así es, tienes que pasar por todas las opciones. El problema es que consume demasiado tiempo.
2. Lo intenté, y empeoró.
3. ¿Cómo sabes cuáles está usando? Es una caja negra, así que lo alimento todo.

Hay optimizadores de hiperparámetros, como el optimizador del probador de MT. Lo pones a 24 horas y lo recoge.

Me aburro esperando que se solucione, pero esto es una peculiaridad de la NS, no hay ciencia exacta, sólo experiencia (propia y ajena) e intuición. Puedo compartir mis resultados aquí o en privado.

Antes he publicado un ejemplo para la formación. La idea es enseñar a la red a comprar señales. Luego invierta la entrada y la red debería producir señales de venta. Se trata de una clasificación binaria de si hay señal o no. Se podría enseñar a la red a reconocer la compra y la venta, pero en mi opinión esto es peor. El rango de salida se limita a 0-1; si buscamos sólo compra, el rango se divide en 2 clases (hay compra y no hay compra) y el umbral se puede mover en 0,8. Si buscamos compra o venta, 0-1 se divide en 3 sectores: compra, venta y algo intermedio. En mi opinión, buscar sólo la señal de compra es: 2 veces más ejemplos de entrenamiento (flip input), menor tamaño de la red (la tarea es más fácil, se necesitan menos neuronas), menos tiempo de entrenamiento, solución más fácil (pensar sólo en una clase), pero esto es sólo teoría.

Tengo una idea, que la red busque las características por sí misma, le das un precio, señales deseadas, y lo hace todo por sí misma. He empezado con lstm, parece que es perfecto, pero de momento no tanto. Quiero probar las redes normales, y si no, ya pensaré qué pasará después. Las CNNs son un poco desordenadas, me estoy cansando de ajustar las configuraciones de las capas y los núcleos. Probablemente, sería más fácil introducir las ondículas en una red normal. Y si no me conviene, tendré que perder más tiempo seleccionando las señales de entrada, pero en este caso tengo una duda: ¿es realmente necesario, sería más fácil usar el sistema "clásico", sería más comprensible, fiable, económico y más fácil de probar.

¿Y cómo se analizan los resultados, sólo mirando los números? ¿Este es el código que utilizas?

plt.plot(history.history['loss'])
plt.plot(history.history['val_loss'])

Si construyes 2 gráficos, el de errores en la bandeja y el de pruebas, puedes utilizarlos para entender qué le falta a la red y en qué dirección moverse.

 
Rorschach:

También dudé en esperar a que contara, pero esto es una peculiaridad de la NS, no hay ciencia exacta, sólo experiencia (ajena y propia) e intuición. Puedes compartir tus resultados aquí o en privado.

¿Hablamos de fotos o ya se trata del mercado?

¿Y cómo se analizan los resultados, sólo se miran los números? ¿Este es el código que utilizas?

Se construyen dos gráficos, uno para la bandeja y otro para la prueba. Con ellos se puede entender qué le falta a la red y en qué dirección moverse.

Puedo ver fácilmente que estoy en el proceso ))

Al principio lo dibujé usando el algoritmo estándar

import matplotlib.pyplot as plt

Pero fue inútil. Debido al gran ruido, el gráfico ya se encontraba en la línea horizontal después de 10 épocas.
Tengo la clasificación binaria y analizo el nivel de certeza de la red en cada respuesta, es decir, por ejemplo la respuesta correcta es 0 1 y la red da 0,4 0,6 - esta es una buena respuesta, y más a menudo la respuesta correcta es 0 1 y la red da 0,49 0,51
Cuando las respuestas son miles puedo agruparlas por certeza y hacer el análisis.


 
Rorschach:

En consecuencia, en la práctica, este es el euro de hoy en día en M2, algo que la red neuronal está empezando a entender, pero hasta ahora tan débilmente.
El azul pronostica al alza, el amarillo a la baja.


 
Evgeny Dyuka:

Se nota enseguida que una persona está en el proceso real ))

Al principio dibujé usando el estándar

Pero no sirve de mucho, ya que debido al gran ruido el gráfico se sitúa en la línea horizontal después de 10 épocas.
Tengo la clasificación binaria y analizo el nivel de certeza de la red en cada respuesta, es decir, por ejemplo la respuesta correcta es 0 1 y la red da 0,4 0,6 - esta es una buena respuesta, y más a menudo la respuesta correcta es 0 1 y la red da 0,49 0,51
Cuando las respuestas son miles puedo agruparlas por certeza y hacer el análisis.


¿Puede publicar los gráficos? Cuantas más épocas y cuanto menor sea el tamaño del listón, más veces cambiarán los pesos. Además, tiene sentido cambiar el lerning_rate en el optimizador en +-un orden de magnitud. ¿Qué optimizador utiliza?

 
Rorschach:

¿Puede publicar los gráficos? Además de las épocas, hay que cambiar el tamaño del lote; cuantas más épocas y menor sea el tamaño del lote, más veces se cambiarán los pesos. Además, tiene sentido cambiar lerning_rate en el optimizador por +-un orden de magnitud. ¿Qué optimizador utiliza?

Para el gráfico necesito ejecutar el tutorial, entonces... pero nada interesante - verticalmente hacia abajo y luego horizontalmente, no hay disminución suave como en los tutoriales ))
Bach 128, si estamos hablando de lo mismo. Siempre debe ser 128 es algo que tiene que ver con TPU, tal requisito.
También dejé de cambiar las épocas, después de 150 normalmente no cambia nada.
No consigo que funcione con SGD.
 
Rorschach:

Esta es mi cuadrícula, aquí cambio dinámicamente el número de capas

def make_model(arr_size, lays):
  sgd = SGD(lr=0.01, decay=1 e-6, momentum=0.9, nesterov=True)

  #res = 2 # количество ответов
  act = "softmax"
  #act = "sigmoid"
  #opt = sgd
  opt = 'adam'

  model = Sequential()

  if lays == 1:
    model.add(Dense(int((arr_size-res)*k), input_dim=(arr_size-res), activation='relu'))
    model.add(Dropout(dropout))

  if lays == 2:
    model.add(Dense(int((arr_size-res)*k), input_dim=(arr_size-res), activation='relu'))
    model.add(Dropout(dropout))
    model.add(Dense(int((arr_size-res)*0.5*k), activation='relu'))
    model.add(Dropout(dropout))

  if lays == 3:
    model.add(Dense(int((arr_size-res)*k), input_dim=(arr_size-res), activation='relu'))
    model.add(Dropout(dropout))
    model.add(Dense(int((arr_size-res)*0.5*k), activation='relu'))
    model.add(Dropout(dropout))
    model.add(Dense(int((arr_size-res)*0.3*k), activation='relu'))
    model.add(Dropout(dropout))

  if lays == 4:
    model.add(Dense(int((arr_size-res)*k), input_dim=(arr_size-res), activation='relu'))
    model.add(Dropout(dropout))
    model.add(Dense(int((arr_size-res)*0.7*k), activation='relu'))
    model.add(Dropout(dropout))
    model.add(Dense(int((arr_size-res)*0.5*k), activation='relu'))
    model.add(Dropout(dropout))
    model.add(Dense(int((arr_size-res)*0.3*k), activation='relu'))
    model.add(Dropout(dropout))

  #model.add(Dense(int((arr_size-res)*0.1*k), activation='relu'))
  #model.add(Dropout(dropout))

  model.add(Dense(res, activation=act))

  if res==1:
    ls="binary_crossentropy"
  else:
    ls="categorical_crossentropy"
  model.compile(loss=ls, optimizer=opt, metrics=['accuracy'])
  return model
 
Evgeny Dyuka:

Esta es mi cuadrícula, aquí cambio dinámicamente el número de capas

Podrías probar otra cosa en lugar de la de abandono, reducir el número de neuronas. Añadir la inicialización y la normalización de los pesos. ¿Se procesan los datos de entrada de alguna manera? Mis resultados mejoraron después de multiplicar los datos de entrada por el orden de magnitud. Parece que, después de todo, tengo que deshacerme de la no estacionariedad.

 
Rorschach:

Podrías probar otra cosa en lugar de Dropout, reducir el número de neuronas. Añadir la inicialización y la normalización de los pesos. ¿Se procesan los datos de entrada de alguna manera? Obtuve mejores resultados después de multiplicar los datos de entrada por un orden de magnitud, parece que tenemos que deshacernos de la no estacionariedad.

Ningún paquete dará un resultado exacto. Cualquier NS sólo puede dar una predicción probabilística al alza, a la baja o desconocida. El precio no obedece a las redes neuronales y puede ir fácilmente en contra de ellas. Una opción del 65% ya es aceptable.

 
Uladzimir Izerski:

Ningún paquete dará un resultado exacto. Cualquier NS sólo puede dar una predicción probabilística al alza, a la baja o desconocida. El precio no obedece a las redes neuronales y puede ir fácilmente en contra de ellas. La opción del 65% ya es aceptable.

Aquí está el 56%. El azul es como debería ser, el rojo es la respuesta de la red. Los porcentajes no significan nada.

aquí es el 48%, la cifra es aún menor, pero al menos tiene algún efecto.


 
Rorschach:

Podrías probar otra cosa en lugar de Dropout, reducir el número de neuronas. Añadir la inicialización y la normalización de los pesos. ¿Se procesan los datos de entrada de alguna manera? Obtuve un mejor resultado después de multiplicar los datos de entrada por el orden de magnitud. Parece que, después de todo, tengo que deshacerme de la no estacionariedad.

Sí, tienes que pasar por todas, si no, no lo harás.
Intenta jugar a esto, es bueno para entender cómo los parámetros influyen en los resultados.
Tensorflow — Neural Network Playground
Tensorflow — Neural Network Playground
  • Daniel Smilkov and Shan Carter
  • playground.tensorflow.org
It’s a technique for building a computer program that learns from data. It is based very loosely on how we think the human brain works. First, a collection of software “neurons” are created and connected together, allowing them to send messages to each other. Next, the network is asked to solve a problem, which it attempts to do over and over...