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

 
Yuri, sono riuscito ad addestrare un modello vmr, ma non riesco a prevedere nuovi dati su di esso, puoi dirmi cosa c'è di sbagliato? Seleziono il menu Load model, seleziono il file train.vmr dall'atachment, poi clicco su Use model. Vedo il testo "Inserire i dati e premere "OK" nel registro. Ma questo è tutto, non importa quali dati inserisco, vedo ancora un pulsante grigio Ok inattivo e non posso ottenere una risposta. I file train.csv e test.csv sono anche in atache, sono quelli che hai postato prima.
File:
train.zip  38 kb
 
Dr.Trader:
Yuri, sono riuscito ad addestrare un modello vmr, ma non riesco a prevedere nuovi dati su di esso, puoi dirmi cosa c'è che non va? Seleziono il menu Load model, seleziono il file train.vmr dall'allegato, poi clicco su Use model. Vedo il testo "Inserire i dati e premere "OK" nel registro. Ma questo è tutto, non importa quali dati inserisco, vedo ancora un pulsante grigio Ok inattivo e non posso ottenere una risposta. I file Train.csv e test.csv sono anche in atache, questi sono quelli che hai postato prima.

Deve aver inserito qualcosa di non numerico? Questo innesca un gestore di eccezioni e disattiva il pulsante OK. In questo caso è necessario riavviare jPrediction.

Guarderò questo nel prossimo futuro per dare almeno un qualche tipo di messaggio di avvertimento quando un utente ha inserito dati non numerici.

P/S Ho già risolto il problema.

Per esempio, inseriamo il simbolo "z" al posto del numero. Questo risulterà in un messaggio di errore:

Per attivare ora il pulsante OK, selezionare la voce di menu File>Use model:


Caricato la versione corretta sul mio sito

 

L'ho capito, l'errore era nel formato di dati sbagliato. Ho formattato i dati come hai fatto nel pdf - ho aggiunto una seconda riga con una spiegazione, la prima colonna con gli indici, e ho eliminato il nome della colonna dal predittore. Tutto funziona. Il modello è addestrato in entrambi i casi, sia sui dati originali che sui dati formattati. Ma la predizione funziona solo se i dati appositamente formattati sono alimentati per l'addestramento.

Ma purtroppo il tuo modello non ha superato il test sui tuoi dati. In precedenza hai postato i file train.csv e test.csv e hai avuto buone prestazioni di predizione. Ho controllato, l'errore di predizione è del 50%, nessuna buona performance.

Passi per il test:

1) Formattare il file train.csv come sopra. Poi dividete fisicamente il file in due - train_part1.csv e train_part2.csv. Il secondo file contiene le ultime 20 righe di train.csv. Il primo file contiene tutto tranne le ultime 20 righe, quindi i dati nei due file non si sovrappongono.

2) Addestrare il modello su train_part1.csv, entrare in modalità previsione. Alimenta alternativamente linee da train_part2.csv per la predizione. Ho ottenuto la risposta giusta solo 9 volte su 20, nessun miracolo.

Non capisco perché se il tuo modello stesso divide il file di allenamento originale in due parti per l'allenamento e la convalida, poi fa un test fuori campione, e finisce con un'accuratezza di previsione di 100? E se si divide fisicamente il file di allenamento e si fa il test fuori campione manualmente, allora la previsione non è migliore del lancio di una moneta? Se alimento qualsiasi campione dal campione di allenamento per la predizione, allora la predizione funziona correttamente, cioè la funzione di predizione sembra essere ok. Tutto questo è molto brutto e sbagliato, avete degli errori gravi nel vostro codice.

File:
vmr_test.zip  44 kb
 
SanSanych Fomenko:

Solo una familiarità molto superficiale con R permetterebbe di parlare di "ronzini".

Naturalmente, mettiamo R e vediamo un interprete di stringhe di caratteri. Se si va più a fondo, si può vedere il bytecode, ma non risolve nessuno dei problemi dell'interprete in termini di efficienza. Non c'è nemmeno qualcosa da discutere - ronzino.

Ma se ci si addentra un po' nei pacchetti R, si vede rapidamente che ciò che si vede nel codice R si riferisce ad altro codice. E se cominciate a indagare, vedrete che per gli algoritmi computazionalmente intensivi R usa sempre pacchetti di terze parti, che sono stati scelti in base al principio della massima efficienza. Queste sono di solito librerie C o Fortran.

O, per esempio, le operazioni di matrice. Considerando che R non ha la nozione di scalare e tutto inizia con i vettori e l'aritmetica matriciale è completamente naturale per R, la questione di usare una libreria appropriata che NON sia scritta in R è una questione di principio. Viene utilizzata la Intel Math Kernel Library.

Per aggiungere questo, mettere in parallelo i calcoli non solo a tutti i core del proprio computer, ma anche ai computer vicini, è un'operazione comune in R.

Quindi, cosa sia "assillante" e cosa no è una grande domanda.

PS.

Non dovete portare nulla in R, dovete solo imparare la matematica. R ha tutto ciò di cui avete bisogno e molto di più.

Sono d'accordo con SanSanych. Tutto ciò di cui avete bisogno per qualsiasi vostra idea è già presente in R/.

L'osservazione arrogante di Reshetov non è sorprendente. È una tale visione del mondo.

Non c'è bisogno di cambiare idea. Non ha senso.

 
Dr.Trader:

Non capisco perché se il tuo modello stesso divide il file di allenamento originale in due parti per l'allenamento e la convalida, poi fa un test fuori campione e finisce con una precisione di previsione di 100? E se si divide fisicamente il file di allenamento e si fa il test fuori campione manualmente, allora la previsione non è migliore del lancio di una moneta? Se alimento qualsiasi campione dal campione di allenamento per la predizione, allora la predizione funziona correttamente, cioè la funzione di predizione sembra essere ok. Tutto questo è molto brutto e sbagliato, avete degli errori gravi nel vostro codice.

Hai ragione, c'è un errore nel codice. Lo correggerò.
 
Vladimir Perervenko:

Io sostengo SanSanych. Tutto ciò di cui hai bisogno per ogni tua idea è già nella R/.

Mi permetto di argomentare qui, se posso, nag è inteso in termini di velocità e sono assolutamente d'accordo con Yuri...

Si può trovare una soluzione pronta per R per quasi ogni problema, ma a volte si è bloccati con la velocità

Mi ricordo, stavo facendo una ricerca molto difficile per molti parametri attraverso la funzione di correlazione, all'inizio ho usato la funzione integrata in R (a proposito, è scritta in C++), ma poiché era sovraccaricata con diversi metodi, il calcolo di un giro del mio ciclo richiedeva circa 3,9 minuti o 230 secondi, quel tempo non era accettabile, il secondo passo fu scrivere la mia propria funzione in R senza tutto il resto, la mia funzione funzionava con 30 secondi, ma non mi soddisfaceva, perché R era il mio primo e unico linguaggio, ho chiesto al mio amico di scrivere per me una funzione corr quindi confrontiamo

Il fungo di correlazione predefinito in R è 230 sec.

funzione di correlazione R auto-scritta - 30 sec.

funzione scritta in C++ - 0,33 sec

Quindi sì, Yuri ha ragione, R è un babbeo in un contesto in cui lo intendeva, ma questo problema può essere risolto, e per quanto riguarda la convenienza e la velocità di scrittura del codice, penso che R sia lontano da tutti i linguaggi perché non devo scrivere nulla, tutto è già pronto, ecco perché mi piace R ...

 
mytarmailS:

Mi permetto di argomentare qui, se posso, il ronzino è inteso in termini di velocità e sono assolutamente d'accordo con Yuri...

È probabile che troviate una soluzione pronta per quasi tutti i problemi, ma a volte siete bloccati dalla velocità.

Mi ricordo, stavo facendo una ricerca molto difficile per molti parametri attraverso la funzione di correlazione, all'inizio ho usato la funzione integrata in R (a proposito, è scritta in C++), ma poiché era sovraccaricata con diversi metodi, il calcolo di un giro del mio ciclo richiedeva circa 3,9 minuti o 230 secondi, quel tempo non era accettabile, il secondo passo fu scrivere la mia propria funzione in R senza tutto il resto, la mia funzione funzionava con 30 secondi, ma non mi soddisfaceva, perché R era il mio primo e unico linguaggio, ho chiesto al mio amico di scrivere per me una funzione corr quindi confrontiamo

La funzione di correlazione predefinita in R è 230 sec.

funzione di correlazione R auto-scritta - 30 sec.

funzione scritta in C++ - 0,33 sec

Quindi sì, Yuri ha ragione, R è un ronzino in un contesto in cui lo intende, ma questo problema è risolto, e per quanto riguarda la convenienza e la velocità di codifica, penso che R sia lontano da tutti i linguaggi perché quasi non devo scrivere nulla, tutto è già pronto, ecco perché mi piace R ...

Cosa ha a che fare questo con R?

Ancora una volta, R ha tutto il necessario per implementare le vostre idee, compresa la velocità.

Un'altra cosa è che non tutti e non tutto sanno come usarli.

Ma questo non è un problema di lingua.

A proposito, la comodità e la semplicità delle funzioni in linea in Srr è incredibile.

Buona fortuna

 
mytarmailS:

Mi permetto di argomentare qui, se posso, il ronzino è inteso in termini di velocità e sono assolutamente d'accordo con Yuri...

È probabile che troviate una soluzione pronta per quasi ogni problema per R, ma a volte siete bloccati dalla velocità.

Mi ricordo, stavo facendo una ricerca molto difficile per molti parametri attraverso la funzione di correlazione, all'inizio ho usato la funzione integrata in R (a proposito, è scritta in C++), ma poiché era sovraccaricata con diversi metodi, il calcolo di un giro del mio ciclo richiedeva circa 3,9 minuti o 230 secondi, quel tempo non era accettabile, il secondo passo fu scrivere la mia propria funzione in R senza tutto il resto, la mia funzione funzionava con 30 secondi, ma non mi soddisfaceva, perché R era il mio primo e unico linguaggio, ho chiesto al mio amico di scrivere per me una funzione corr quindi confrontiamo

Il fungo di correlazione predefinito in R è 230 sec.

funzione di correlazione R auto-scritta - 30 sec.

funzione scritta in C++ - 0,33 sec

Quindi sì, Yuri ha ragione, R è un babbeo in un contesto in cui intende, ma questo problema è risolto, e per quanto riguarda la comodità e la velocità di codifica, penso che R sia lontano da tutti i linguaggi in quanto quasi non devo scrivere nulla, tutto è già pronto, ecco perché mi piace R ...

Non sostituiamo le domande generali con un esempio particolare.

Se stiamo parlando in generale dell'efficienza del codice nel SISTEMA di programmazione R, ho scritto sulle basi dell'efficienza. In contrasto con la maggior parte dei sistemi di programmazione, gli algoritmi computazionalmente intensivi in R sono usati indirettamente e sono usati al massimo dell'efficienza nella programmazione in generale, all'interno di alcune funzioni di contenuto, anche se c'è la possibilità di usarli direttamente, per esempio l'ottimizzazione o GA.

L'esempio più chiaro di questa efficienza sono le operazioni di matrice che appartengono alle operazioni più capienti dal punto di vista computazionale. Un programmatore potrebbe non essere affatto consapevole della libreria utilizzata, perché un'operazione di matrice è solo una semplice linea di codice.

Inoltre, quello di cui non ho scritto nel mio post sull'efficienza è quello che hai scritto tu. È la capacità di scrivere un pezzo di codice snr, con l'enfasi che la struttura di R è tale che questo inserimento sarà un'aggiunta organica al codice principale. E l'esempio che hai fatto è molto tipico di R.

 
OK, suggerisco di chiudere l'argomento dell'efficienza R, perché stiamo già iniziando a ripetere l'ovvio, e il significato è "petrolio, il cielo è blu, l'erba è verde".
 

Ciao!

Ho trovato un pacchetto con reti neurali ricorrenti https://cran.r-project.org/web/packages/rnn/rnn.pdf, è stato interessante controllarlo sui miei dati (forse qualcun altro sarebbe interessato ;) ) Ma ho incontrato qualcosa che non ho mai incontrato prima, come la rete ricorrente è alimentata con i dati in un modo speciale sotto forma di un array 3D, nonostante il fatto che ci sia un esempio, non riesco ancora a capire come funziona

come dovrebbe essere il codice nella variabile "X" se non ho 2 predittori ma 100, ecco un pezzo dell'esempio:

#  create training numbers
X1 = sample(0:127, 7000, replace=TRUE)
X2 = sample(0:127, 7000, replace=TRUE)
#  create training response numbers
Y <- X1 + X2
#  convert to binary
X1 <- int2bin(X1)
X2 <- int2bin(X2)
Y <- int2bin(Y)
#  Create 3 d array: dim 1: samples; dim 2: time; dim 3: variables.
X <- array( c(X1,X2), dim=c(dim(X1),2) )
Motivazione: