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

 
Ildottor Trader:

le tabelle possono essere unite usando la funzione rbind().
MLP1 <- rbind(Train1, Test)

Cos'è Test(Train2)? E perché la tabella di allenamento e la tabella di test dovrebbero essere combinate? Il test dovrebbe essere separato, al fine di testare il modello addestrato su di esso.

Non tutto verrà fuori così facilmente e velocemente come vuoi tu. Questo è nel modello di Reshetov che si possono semplicemente alimentare i dati, e il modello stesso setaccerà i predittori, determinerà i pesi, il numero di neuroni, e così via. Ma non si può fare con il neurone regolare, è necessario selezionare i parametri per il neurone tramite crossvalidation, per esempio come nell'esempio che ho scritto qui oggi, o come negli articoli di Vladimir Perervenko.


Guarda di nuovo quello che ho scritto lì -https://www.mql5.com/ru/forum/86386/page753#comment_6821981
Incollate semplicemente i vostri dati in quel codice come descritto ed eseguitelo. Se tutti i predittori sono presi uno per uno e non eliminati, allora dalla prima volta sarà probabilmente troppo male. Dopo aver eseguito il codice, eseguite anche il comandomax(gaResult@fitness), questo mostrerà il punteggio R2 del miglior modello trovato dalla genetica. Se la stima è vicina a 1 o un po' meno, bene, se è vicina a 0 o addirittura negativa, è male.

Poi inPREDICTOR_COLUMNS specificate il numero esatto di colonne che avete identificato come buone, e ancora una volta eseguite il codice, il modello sarà addestrato solo su questi predittori. Idealmente la migliore valutazione del modello da parte della genetica dovrebbe essere vicina a 1 e l'accuratezza sulla tabella di allenamento e di test dovrebbe essere 1.00.

La tabella di test dovrebbe essere temporizzata rigorosamente dopo i dati di addestramento, come se questo modello stesse già facendo trading sul mercato.

Se non succede niente di buono con quel codice (anche conKFOLDS=10) - allora non va bene. Se funziona, allora c'è una buona alternativa al modello di Reshetov e possiamo occuparci ulteriormente di quel codice e portare il modello su mql.

Infatti, ci sono solo due sezioni Train1 e Test1

ReteA impara da Train1 e viene campionato da Test1

NetB impara da Test1 e viene campionato su Train1

Quando sommiamo le due trame ReteA impara Test1, ReteB impara Trine1, otterremo i risultati dell'apprendimento per l'intera trama di apprendimento, ma questa trama sarà una trama di test. Questo è il punto che Reshetov sta facendo. Non lo so, come mi avete suggerito di controllare voi..... kFold divide le trame in qualche modo.... non chiaro.....

 

Non voglio ripetere il risultato di Reshetov, voglio organizzare l'IA come la sua. Il modo in cui allena il comitato. È chiaro che la formazione stessa sarà già disponibile mezzi, ma l'organizzazione, può giocare un ruolo importante....

Proverò ad eseguire il tuo script sui miei dati, per vedere cosa ne viene fuori...

 

Capisco, è quasi la stessa cosa. Nell'esempio di Reshetov le linee sono prese una per una (allenamento sulle linee pari, test sulle linee dispari), ma nel mio esempio le linee sono divise in gruppi in fila (allenamento sulle linee 1-100, test sulle linee 101-200). Questo è meglio per il forex, almeno qualche controllo per il fatto che il modello può funzionare in un altro intervallo di tempo, sconosciuto ad esso.

Si può anche fare il partizionamento in stile Reshetov, quindi nella funzioneelemnn_kfold erase

split2 <- function(x,n) split(x, cut(seq_along(x), n, labels = FALSE)) #функция  которая поделит строки таблицы на число кусков согласно KFOLDS
folds <- split2(1:nrow(x), KFOLDS) #номера  строк для обучения в каждом фолде

e invece inserire

folds <- list()
folds[[1]] <- c(which(y==1)[c(T,F)], which(y==0)[c(T,F)])
folds[[2]] <- c(which(y==1)[c(F,T)], which(y==0)[c(F,T)])

e assicuratevi di cambiare il numero di pieghe a 2 -KFOLDS=2, altrimenti appariranno alcuni errori

 

Dobbiamo solo capire che "training" e "test" all'interno della qufold crossvalidation sono controlli annidati. C'è una tabella di allenamento, che è divisa in diverse parti, e queste parti saranno di allenamento o di test, e i modelli nel ciclo imparano da una parte e predicono le altre, per assicurarsi che con questi parametri il modello sia in grado di imparare e predire qualcosa su nuovi dati per esso.

E c'è una tabella di test separata che non è più coinvolta in questa convalida incrociata. Aspetta solo che il modello sia completamente addestrato per controllarlo, come un test in un walk-forward che simula il trading reale.
E se il roll forward dà risultati normali in ogni test quando le finestre di allenamento e di test sono spostate nel tempo, allora l'ultimo modello addestrato non viene testato su un tavolo di prova separato, ma va al terminale per essere scambiato.

 
Esatto, un campione di controllo, che può essere un sito OOS. Addestrato, testato. Gettato al commercio. Personalmente penso di sì......
 
Mihail Marchukajtes:
Esatto, un campione di controllo, che può essere una sezione OOS. Addestrato, testato. Sono stati addestrati, testati e poi li hanno gettati nel commercio. Personalmente penso di sì......

Ma questo solleva la domanda. Come scegliere un modello senza una trama di controllo. Addestrato, ricevuto i risultati sulla convalida incrociata, detto che questo è il modello che otterrà il punteggio, messo sul real!!!!!

Di solito faccio un modello di prova in un giorno, sono 3-4 segnali..... considerando che ci vogliono due settimane per lavorare, non una grande perdita......

 
Ho eseguito il tuo script con le modifiche di cui sopra. Non dà alcun errore, e allena anche qualcosa, ma non mostra alcun grafico durante l'allenamento. Comunque vedo il risultato sotto forma di errore. Rifarò i miei modelli, poi tornerò a questo script. Proprio quando gli insiemi di allenamento saranno formati, continueremo lì....
 

A: Dr. Trader.

Non mi sono preoccupato di analizzare la sceneggiatura in dettaglio, è troppo "arrugginita" si scrive. Beh, ognuno ha il suo stile. Ma ecco alcuni punti importanti. ELM ha una serie di caratteristiche nell'applicazione:

  • Più esempi si danno in pasto a ELM nell'addestramento, meno sensibile è al rumore (per esperienza almeno 2000)
  • in ensemble di reti neurali ELM bisogna averne 100+ per ottenere un risultato sano (per esperienza è meglio prendere un po' di ridondanza e setacciarla in seguito)
  • La fusione applicata da voi con il semplice voto dà un risultato peggiore della media. Questo però è a discrezione dello sviluppatore.
  • seet.seed non fornisce la necessaria ripetibilità e diversità quando si ottimizzano gli iperparametri. Date un'occhiata ai commenti all' articolo. Lì elibrario ha testato questa idea con un esperimento. Solo forzando l'RNG in uno stato controllato ad ogni inizializzazione di una rete neurale si ottengono risultati di vera ottimizzazione. Per quanto mi riguarda è meglio usare l'ottimizzazione bayesiana. Dà una buona scelta di iperparametri.
Buona fortuna

 

Grazie per i commenti, li terrò a mente.

Ho aggiunto un link al tuo ultimo articolo lì alla fine del testo, chi vuole avere una comprensione più seria di elmNN - meglio andare direttamente a leggere l'articolo.


Vladimir Perervenko:

La fusione con il semplice voto che usi dà risultati peggiori della media. Anche se è a discrezione dello sviluppatore.

ci sono in realtà due modi di prevedere l'ensemble:

1) la funzione elemnn_kfold_predict() - viene considerata la media aritmetica dei risultati della regressione di ogni modello

2) funzione elemnn_kfold_predict_reshetovstyle() - ho aggiunto questo per Mikhail per i suoi esperimenti, questo modo di combinare i risultati dell'ensemble è usato nella neuronica di Reshetov. Solo classificazione. Confronta i risultati di tutti i modelli e dà una risposta con una classe particolare solo se tutti i modelli hanno dato la stessa previsione. Se almeno un modello ha dato una previsione diversa dagli altri, la funzione restituisce una previsione di "non so".

 
Hai già un risultato? Dov'è il consigliere?