Reti neurali - pagina 14

 
Sì, allenamento vs previsione. Ho costruito una nuova rete con i primi 6-7 anni di dati usati per addestrare, testare e convalidare. Ho poi alimentato i restanti 3 anni di dati come test senza apprendimento, l'idea è quella di imitare un test dal vivo. La linea di regressione di allenamento aveva una pendenza di 0,99995 e quando l'ho alimentata con circa 3 anni di dati non visti in precedenza è scesa a 0,9995. Non sono sicuro di come interpretarlo. Sembra un po' troppo preciso per qualcosa che ho messo insieme in meno di un'ora.

Ve lo spiego con un esempio.

Diciamo che volete prevedere una variabile che può avere valori da 100 a 250 /come GBPJPY/. Volete predire passi temporali molto piccoli rispetto ai dati di allenamento /come H1 o H4/. Per qualche passo il valore desiderato è, diciamo, 174,850 e l'output della NN è 176,350. L'errore è molto piccolo /circa 0,8%/ ma in termini di Forex l'errore è grande - 150 pips.

È molto più facile prevedere un tasso di rendimento normale o logaritmico. Anche se fai un errore l'output probabilmente sarà ancora utile /se prevedi un aumento del prezzo del 20%, e in realtà è del 10%, anche se l'errore è del 50% il risultato è ancora molto buono/.

Sicuramente se si genera la prima popolazione a caso non c'è la possibilità di generare una popolazione in cui nessun programma risolve il problema?

È impossibile.

Anche se la NN dà una pessima previsione, è comunque una soluzione.

Più di quanto, ad esempio, un computer desktop medio possa gestire

Puoi usare un computer desktop. Oggi i computer sono molto meglio di quelli da cui sono partito

 

mrwobbles,

Saresti così gentile da informarci dei tuoi input e output per i tuoi risultati NN? Mi piacerebbe eseguirlo attraverso NeuroShell e vedere se posso generare il livello di correlazione R intorno alla stessa tenuta. Grazie in anticipo.

 
Kazam:
Te lo spiego con un esempio.

Diciamo che si vuole prevedere una variabile che può avere valori da 100 a 250 /come GBPJPY/. Volete prevedere passi temporali molto piccoli rispetto ai dati di allenamento /come H1 o H4/. Per qualche passo il valore desiderato è, diciamo, 174.850 e l'output della NN è 176.350. L'errore è molto piccolo /circa 0,8%/ ma in termini di Forex l'errore è grande - 150 pips.

È molto più facile prevedere un tasso di rendimento normale o logaritmico. Anche se fai un errore l'output probabilmente sarà ancora utile /se prevedi un aumento del prezzo del 20%, e in realtà è del 10%, anche se l'errore è del 50% il risultato è ancora molto buono/.

Sì, ma io sto parlando di errori di un ordine di grandezza inferiore. L'errore medio in pip della rete che ho addestrato è di circa 10-20 che si avvicina a un livello accettabile. Ci sono ancora alcuni risultati anomali, alcuni di oltre 100 pips che è ovviamente inaccettabile.

È impossibile.

Anche se la NN dà una pessima previsione è comunque una soluzione.

Sì, immagino che tu possa chiamarle soluzioni, ma iniziare con una popolazione casuale non porterebbe a un tempo di convergenza più lungo? In questo caso iniziare con una popolazione di reti pre-addestrate sicuramente accelererebbe la convergenza della rete e, si spera, porterebbe a risultati più accurati.

 
Sì, ma sto parlando di errori di un ordine di grandezza inferiore. L'errore medio in pip della rete che ho addestrato è di circa 10-20 che si avvicina a un livello accettabile. Ci sono ancora alcuni risultati anomali, alcuni di oltre 100 pips che è ovviamente inaccettabile.

Ma stai ancora guardando i dati di allenamento. Ho fatto un rapido esempio - guarda l'immagine qui sotto. Le misure di errore sono piccole, il coefficiente di correlazione è molto alto, ma guarda cosa succede quando provi a predire i prossimi 10 passi.

Sì, immagino che si possano chiamare soluzioni, ma iniziare con una popolazione casuale non porterebbe a un tempo di convergenza più lungo? In questo caso iniziare con una popolazione di reti pre-addestrate sicuramente accelererebbe la convergenza della rete e, si spera, porterebbe a risultati più accurati.

La casualità è la chiave

Con molte reti casuali si ha una maggiore possibilità di trovare la migliore soluzione possibile alla fine. Guardate la seconda immagine. Se fai una pre-selezione di NN potresti rimanere bloccato all'optimum locale, ma se usi NN casuali hai una maggiore possibilità di trovare l'optimum globale.

Naturalmente ci sono modi per superare il problema di rimanere bloccati nell'optimum locale.

File:
 

Questo pensiero mi ha attraversato la mente. Voglio dire che se la popolazione di NN pre-addestrate è troppo piccola o con una varianza genetica insufficiente, allora alcune soluzioni potrebbero non essere considerate. Come hai detto tu c'è sempre la possibilità di scegliere 12 NN che sono tutte bloccate a minimi locali diversi e questo non sarebbe un bene. O peggio ancora 12 NN che sono tutte bloccate allo stesso minimo locale. Anche se si potrebbe sempre codificare alcune mutazioni genetiche casuali per cercare di aumentare il patrimonio genetico, diciamo ogni 10 generazioni. Ma iniziare con una struttura completamente casuale assicurerebbe che la maggior parte delle possibilità siano considerate.

Ah capisco, ok ho appena scoperto come usare la rete dopo che è stata addestrata, la funzione sim a quanto pare... oh le gioie dei file di aiuto Dovrai perdonare la mia ignoranza, sono abbastanza nuovo nel lavorare con le NN. Sarei stato deluso se avessi risolto così facilmente. Questo dovrebbe essere quello che sto facendo durante le vacanze estive bene che e lavorare

Edit: ho addestrato la rete sui dati dei primi 7 anni e poi ho simulato le sue prestazioni sugli ultimi anni di input. L'errore medio in pip è stato di 40, ma se guardate la trama del grafico, ottiene i primi 1500 abbastanza bene, poi li perde e comincia a sbagliare il prezzo, ma la direzione è per la maggior parte giusta. Poi arriva a circa 10000 e lo riprende di nuovo (giusto in tempo per il grande crollo). Dai un'occhiata a questo e dimmi cosa ne pensi. Il blu scuro è l'uscita del target blu chiaro. Btw non ho fornito alla rete i target che sono stati sovrapposti per l'analisi.

File:
gbpjpy60-4.jpg  40 kb
gbpjpy60-8.jpg  55 kb
 

Non posso dire nulla guardando le foto perché potrebbe esserci un "effetto ombra" e le foto sono troppo piccole per dirlo.

Ma posso dirvi come controllare se il NN è ok. Esporta /c'è una procedura guidata di esportazione e importazione in Matlab/ l'output del test in un file XLS o CSV /file Excel/. Poi metti i valori reali accanto all'output della NN e nella colonna successiva metti una formula che controlla se la NN ha previsto la direzione corretta del movimento del prezzo.

Contando quanti "1" ottieni saprai la precisione della rete.

Poi puoi scrivere una formula che calcola il profitto e la perdita per ogni passo. Guarda l'immagine qui sotto /Io sto usando la versione polacca di Excel quindi non so se le formule sono giuste /. Salta lo spread per ora.

File:
 

Ciao Kazam,

È possibile implementare questo pacchetto NN a Metatrader?

File:
example.zip  106 kb
 

Sembra che possa andare bene, ho eseguito la formula attraverso il foglio di calcolo di Open Office e ha restituito il 73% di precisione sulla direzione degli scambi. Ho ancora qualche input da dare alla rete che penso migliorerà la precisione. Ecco il foglio di calcolo, l'ho salvato in formato xls, dovresti essere in grado di leggerlo.

File:
gj60.rar  831 kb
 

Nel campione, fuori dal campione

mrwobbles:
Sembra che possa andare bene, ho eseguito la formula attraverso il foglio di calcolo Open Office e ha restituito il 73% di precisione sulla direzione degli scambi. Ho ancora qualche input da dare alla rete che penso migliorerà la precisione. Ecco il foglio di calcolo, l'ho salvato in formato xls, dovresti essere in grado di leggerlo.

Bene... In campione o fuori campione?

C'è una grande differenza nel tuo conto, il 73% nel campione è un killer del conto, il 73% fuori dal campione è un forse...

Cerca di credere solo ai risultati out of sample, e meno input hai, meno overfitting avrai...quindi, se aggiungi nuovi input, pensa a cancellare alcuni di quelli vecchi...o espandi il dataset out of sample su cui formi le tue credenze

Come regola generale: Meno input, meno connessioni, più punti fuori campione...migliore generalizzazione.

Saluti

Simba

 

biddick

È una DLL quindi date un'occhiata qui:

http://www.metatrader.info/node/150[/CODE]

There's an example of how to use DLL functions in Metatrader.

mrwobbles

It's either the training data or you got something wrong - the results are to good .

If one could get an accuracy of 73% with a simple back propagation network no one would give a shit about more complicated stuff

SIMBA

You're right. Choosing the proper input is a the most important thing in the process of creating a NN /there's a rule "trash goes in, trash comes out" /.

But you can always use data mining tools to analyze many different variables and choose those that affect the one you want to predict.

There's a nice book about data minig /and about genetic algorithms, Bayesian classification etc./ - "Data Mining Methods and Models." by Daniel T. Larose. It also shows how to use WEKA /a free, open source software for machine learning/.

My preferred way is to use GA - for the propose of time series prediction I usually allow them to choose from 15-40 previous steps.

PS

I've mentioned using Bayesian probability for the classification tasks but it can also be used for time series prediction

[CODE]http://www.cis.hut.fi/juha/papers/ESTSPfinal.pdf