L'apprendimento automatico nel trading: teoria, modelli, pratica e algo-trading - pagina 1884

 
Evgeny Dyuka:
1. È vero, devi passare attraverso tutte le opzioni. Il problema è che richiede troppo tempo.
2. Ho provato e la situazione è peggiorata.
3. Come fai a sapere quali sono quelli che usa? È una scatola nera, quindi alimento tutto.

Ci sono ottimizzatori di iperparametri, come l'ottimizzatore nel tester MT. Lo imposti per 24 ore e lo ritira.

Mi annoio ad aspettare che si risolva, ma questa è una peculiarità di NS, non esiste una scienza esatta, solo esperienza (mia e di qualcun altro) e intuizione. Posso condividere i miei risultati qui o in privato.

Prima ho postato un esempio per l'allenamento. L'idea è di insegnare alla rete a comprare segnali. Poi invertire l'entrata e la rete dovrebbe produrre segnali di vendita. È una classificazione binaria se c'è un segnale o no. Si potrebbe insegnare alla rete a riconoscere l'acquisto e la vendita, ma imho questo è peggio. La gamma di uscita è limitata a 0-1; se cerchiamo solo di comprare, la gamma è divisa in 2 classi (c'è un acquisto e non c'è un acquisto) e la soglia può essere spostata di 0,8. Se cerchiamo di comprare o vendere, 0-1 è diviso in 3 settori: comprare, vendere e qualcosa in mezzo. Imho, la ricerca solo per il segnale di acquisto è: 2 volte più esempi di formazione (input flip), dimensione della rete più piccola (il compito è più facile, meno neuroni richiesti), meno tempo di formazione, soluzione più facile (pensare a 1 sola classe), ma questa è solo teoria.

Ho un'idea, che la rete cercherebbe le caratteristiche da sola, tu dai un prezzo, segnali desiderati, e fa tutto da sola. Ho iniziato con lstm, sembra essere perfetto, ma finora non così tanto. Voglio provare le reti regolari, e se non lo farò penserò a cosa succederà dopo. Le CNN sono un po' incasinate, mi sto stancando di regolare le configurazioni dei livelli e del nucleo. Probabilmente, sarebbe più facile alimentare le wavelets in una rete regolare. E se non mi soddisfa, dovrò perdere più tempo a selezionare i segnali di ingresso, ma in questo caso ho una domanda: è davvero necessario, sarebbe più facile usare il sistema "classico", sarebbe più comprensibile, affidabile, economico e più facile da testare.

E come si analizzano i risultati, solo guardando i numeri? È questo il codice che usate?

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

Si costruiscono 2 grafici, errore su vassoio e test, si possono usare per capire cosa manca alla rete e in che direzione muoversi.

 
Rorschach:

Ho anche esitato ad aspettare che contasse, ma questa è una peculiarità di NS, non esiste una scienza esatta, solo l'esperienza (altrui e mia) e l'intuizione. Puoi condividere i tuoi risultati qui o in privato.

Stiamo parlando di immagini o si tratta già del mercato?

E come si analizzano i risultati, si guardano solo i numeri? È questo il codice che usate?

Costruisci due grafici, uno per il vassoio e uno per il test. Usandoli puoi capire cosa manca alla rete e in che direzione muoverti.

Posso facilmente vedere che sono nel processo ))

All'inizio l'ho disegnato usando l'algoritmo standard

import matplotlib.pyplot as plt

Ma è stato inutile: a causa del grande rumore la trama si trovava già sulla linea orizzontale dopo 10 epoche.
Ho la classificazione binaria e analizzo il livello di certezza della rete in ogni risposta, cioè per esempio la risposta corretta è 0 1 e la rete dà 0,4 0,6 - questa è una buona risposta, e più spesso la risposta corretta è 0 1 e la rete dà 0,49 0,51
Quando le risposte sono migliaia posso raggrupparle per certezza e fare l'analisi.


 
Rorschach:

Come risultato in pratica, questo è l'euro di oggi su M2, qualcosa che la rete neurale sta cominciando a capire, ma finora così debolmente.
Il blu prevede il rialzo, il giallo il ribasso.


 
Evgeny Dyuka:

Si capisce subito che una persona è nel processo reale ))

All'inizio ho disegnato usando lo standard

Ma è poco utile, a causa del grande rumore il grafico si trova sulla linea orizzontale dopo 10 epoche.
Ho la classificazione binaria e analizzo il livello di certezza della rete in ogni risposta, cioè per esempio la risposta corretta è 0 1 e la rete dà 0,4 0,6 - questa è una buona risposta, e più spesso la risposta corretta è 0 1 e la rete dà 0,49 0,51
Quando le risposte sono migliaia posso raggrupparle per certezza e fare l'analisi.


Puoi postare i grafici? Più epoche e più piccola è la dimensione della stecca, più volte cambiano i pesi. Inoltre, ha senso cambiare il lerning_rate nell'ottimizzatore di +-un ordine di grandezza. Che ottimizzatore usi?

 
Rorschach:

Puoi postare i grafici? Oltre alle epoche, la dimensione del batch dovrebbe essere cambiata; più epoche e più piccola è la dimensione del batch, più volte vengono cambiati i pesi. Inoltre, ha senso cambiare lerning_rate nell'ottimizzatore di +-un ordine di grandezza. Che ottimizzatore usi?

Per il grafico ho bisogno di eseguire il tutorial, poi... ma niente di interessante - verticalmente verso il basso poi orizzontalmente, nessun declino morbido come nei tutorial ))
Bach 128, se stiamo parlando della stessa cosa. Dovrebbe essere sempre 128 è qualcosa a che fare con TPU, un tale requisito.
Ho smesso di cambiare anche le epoche, dopo 150 di solito non cambia nulla.
Non riesco a farlo funzionare con SGD.
 
Rorschach:

Ecco la mia griglia, cambio dinamicamente il numero di livelli qui

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:

Ecco la mia griglia, cambio dinamicamente il numero di livelli qui

Si potrebbe provare qualcos'altro invece di Dropout, ridurre il numero di neuroni. Aggiungere l'inizializzazione e la normalizzazione dei pesi. I dati di input vengono elaborati in qualche modo? I miei risultati sono diventati migliori dopo la moltiplicazione dei dati di input per ordine di grandezza. Sembra che io debba sbarazzarmi della non stazionarietà dopo tutto.

 
Rorschach:

Potresti provare qualcos'altro invece di Dropout, ridurre il numero di neuroni. Aggiungere l'inizializzazione e la normalizzazione dei pesi. I dati di input sono elaborati in qualche modo? Ho ottenuto risultati migliori dopo aver moltiplicato i dati di input per un ordine di grandezza, sembra che dobbiamo sbarazzarci della non stazionarietà dopo tutto.

Nessun pacchetto darà un risultato preciso. Qualsiasi NS può solo dare una previsione probabilistica su, giù o sconosciuta. Il prezzo non obbedisce alle reti neurali e può facilmente andare contro di esse. Un'opzione del 65% è già accettabile.

 
Uladzimir Izerski:

Nessun pacchetto darà un risultato preciso. Qualsiasi NS può solo dare una previsione probabilistica su, giù o sconosciuta. Il prezzo non obbedisce alle reti neurali e può facilmente andare contro di esse. Un'opzione del 65% è già accettabile.

Qui c'è il 56%. Il blu è come dovrebbe essere, il rosso è la risposta della rete. Le percentuali non significano nulla.

Qui è il 48%, la cifra è ancora più bassa, ma almeno ha qualche effetto.


 
Rorschach:

Potresti provare qualcos'altro invece di Dropout, ridurre il numero di neuroni. Aggiungere l'inizializzazione e la normalizzazione dei pesi. I dati di input sono elaborati in qualche modo? Ho ottenuto un risultato migliore dopo la moltiplicazione dei dati di input per ordine di grandezza. Sembra che io debba sbarazzarmi della non stazionarietà dopo tutto.

Sì, dovete passarli tutti, altrimenti non lo farete.
Prova a giocare a questo, è buono per capire come i parametri influenzano i risultati.
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...