L'apprendimento automatico nel trading: teoria, modelli, pratica e algo-trading - pagina 24
Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
Alexey, ho un'altra domanda sulla tua funzione per setacciare i predittori - che intervallo di valori di ritorno dovrebbe avere? Ho eseguito quella funzione di fitness sui miei dati con ingressi casuali (fitness_f(runif(predictor_number, min = 0, max = 1)), ho visto risultati da 0 a 0,03. Vedo anche nel codice che in caso di errore (ingressi zero) la funzione restituisce 0. Qui c'è qualcosa che non va, GenSA cerca di minimizzare i risultati, cioè alla fine GenSA arriva a zero ingressi e si ferma. Forse allora dovremmo cambiare il segno del risultato della funzione fitness in modo che GenSA agisca nella direzione opposta?
Se la funzione di fitness a un certo punto dell'ottimizzazione inizia a restituire numeri negativi e più sono bassi meglio è - allora tutto è ok ora.
Alexey, ho un'altra domanda per la tua funzione per setacciare i predittori - che intervallo di valori di ritorno dovrebbe avere? Ho eseguito quella funzione di fitness sui miei dati con ingressi casuali (fitness_f(runif(predictor_number, min = 0, max = 1)), ho visto risultati da 0 a 0,03. Vedo anche nel codice che in caso di errore (ingressi zero) la funzione restituisce 0. Qui c'è qualcosa che non va, GenSA cerca di minimizzare i risultati, cioè alla fine GenSA arriva a zero ingressi e si ferma. Forse allora dovremmo cambiare il segno del risultato della funzione fitness in modo che GenSA agisca nella direzione opposta?
Se la funzione di fitness ad un certo punto dell'ottimizzazione inizia a restituire numeri negativi e più sono bassi meglio è - allora tutto è ok ora.
Schema a blocchi dell'algoritmo basato sulla mutua informazione corretta e sulla ricerca stocastica per un sottoinsieme di predittori.
Il punto "b" deve essere chiarito. Il numero ottimale di variabili è un valore condizionale che viene calcolato con la formula:
L'intuizione è che, data l'assunzione di indipendenza delle variabili di input, il numero medio di livelli di una variabile deve essere elevato alla potenza richiesta per ottenere un numero totale di livelli unici interagenti tali che ognuno di essi abbia in media almeno n osservazioni concentrate, dove n è preso come 100.
Non possiamo avere troppe variabili di input con troppi livelli, poiché una stima conservativa della frequenza delle osservazioni sui livelli di input sarebbe troppo piccola per dare un'inferenza statistica sulla dipendenza della variabile di output sull'insieme dei livelli di input.
Impostando la soglia al di sopra della quale i valori vettoriali del numero di variabili di input saranno convertiti in 1 (il flag di inclusione dell'indice delle variabili), facciamo un calcolo probabilistico:
La sua essenza è che impostiamo il valore massimo di probabilità per selezionare il numero ottimale calcolato di ingressi. E questa logica è verificata applicando la distribuzione binomiale.
Per esempio, prendiamo i nostri dati: metà dell'intero set, che viene utilizzato per l'allenamento.
Abbiamo 17.973 righe, 12 predittori, ognuno con 5 livelli. Applicando le formule di cui sopra, otteniamo che il numero ottimale di predittori è 3.226.
Applicando la formula della soglia per includere un predittore nel set, otteniamo 0,731.
Qual è il numero più probabile di variabili selezionate che si ottiene in una distribuzione binomiale?
Il massimo è 3 osservazioni. Per essere precisi, 5 ^ 3.226 ci darebbe 178 livelli, che ospiterebbero una media di 100 osservazioni ciascuno.
Sì, ho trovato un sottoinsieme di predittori con un valore di fitness negativo. C'erano molti predittori, diverse migliaia, ho limitato gensa a solo 2 iterazioni, mi ci sono volute 8 ore :). Il risultato della funzione di fitness è 6%. Nel fronttest su questi predittori con nnet ho ottenuto il 45% di errore. Non è molto, non credo che l'EA sarebbe in profitto. Ho messo un limite di 10 iterazioni di nuovo per trovare un risultato migliore, l'ho eseguito, sono stato in attesa per 24 ore, speriamo che gensa sia mai completo. Dovrò provare genetica (libreria GA), funzionerà più velocemente con più thread (GA minimizza piuttosto che massimizzare il risultato, cioè il risultato della funzione fitness per GA dovrebbe cambiare il suo segno). Continuerò a sperimentare.
Ho letto vari articoli sul modello a componenti principali e ho cercato di insegnare il modello non solo per misurare R^2 e massimizzarlo selezionando i predittori, ma anche per testare il modello su dati fronttest. Sta uscendo un po' ambiguo. Da un lato ho aumentato la R^2 del modello rimuovendo le coppie correlate di predittori (funzione findCorrelation da bibiloteka caret), ma come si è scoperto la R^2 quando si testa il modello sui dati fronttest da questo diminuisce. Il miracolo non è avvenuto, anche il modello PCA viene riqualificato. Voglio provare una stima del predittore più complessa - dividere il campione di allenamento in due - per l'allenamento vero e proprio e per la validazione, formare il modello PCA, poi testare immediatamente sul campione di validazione, restituire il minimo R^2 come risultato finale. Se tale funzione viene utilizzata per la valutazione di un insieme di predittori e la massimizzazione di questo valore, allora verranno trovati solo quegli insiemi di predittori che danno buoni risultati sul campione addestrato e sui nuovi dati. Dobbiamo controllare.
Inoltre devo aver frainteso il testo del primo articolo sulla PCA in questo thread. Stava dicendo che il numero di componenti deve essere scelto per descrivere il 95% della variazione, pensavo che stessero parlando della precisione della previsione della variabile obiettivo. Ma non è questo il caso, le componenti principali sono costruite senza variabili target, e il 95% di accuratezza è quanto accuratamente i dati grezzi sono descritti usando proprio quelle componenti. E l'accuratezza delle previsioni non c'entra affatto.
Sì, ho trovato un sottoinsieme di predittori con un valore di fitness negativo. C'erano molti predittori, diverse migliaia, ho limitato gensa a solo 2 iterazioni, mi ci sono volute 8 ore :). Il risultato della funzione di fitness è 6%. Nel fronttest su questi predittori con nnet ho ottenuto il 45% di errore. Non è molto, non credo che l'EA sarebbe in profitto. Ho messo un limite di 10 iterazioni di nuovo per trovare un risultato migliore, l'ho eseguito, sono stato in attesa per 24 ore, speriamo che gensa sia mai completo. Dovrò provare la genetica (libreria GA), funzionerà più velocemente con più thread (GA minimizza piuttosto che massimizzare il risultato, cioè il risultato della funzione fitness per GA dovrebbe cambiare il suo segno). Sperimenterò di più.
Ho letto vari articoli sul modello a componenti principali e ho cercato non solo di addestrare il modello per misurare R^2 e massimizzarlo selezionando i predittori, ma anche di testare realmente il modello sui dati fronttest. Sta uscendo un po' ambiguo. Da un lato ho aumentato R^2 del modello rimuovendo le coppie correlate di predittori (funzione findCorrelation da bibiloteka caret), ma come si è scoperto R^2 quando si testa il modello sui dati fronttest da questo cade. Il miracolo non è avvenuto, anche il modello PCA viene riqualificato. Voglio provare una stima del predittore più complessa - dividere il campione di allenamento in due - per l'allenamento vero e proprio e per la validazione, formare il modello PCA, poi testare immediatamente sul campione di validazione, restituire il minimo R^2 come risultato finale. Se tale funzione viene utilizzata per la valutazione di un insieme di predittori e la massimizzazione di questo valore, allora verranno trovati solo quegli insiemi di predittori che danno buoni risultati sui dati addestrati e nuovi. Dovremo controllare.
Inoltre, devo aver sbagliato il testo del primo articolo sulla PCA in questo thread. Stava dicendo che il numero di componenti dovrebbe essere scelto per descrivere il 95% della variazione, pensavo che stessero parlando dell'accuratezza della previsione della variabile obiettivo. Ma non è questo il caso, le componenti principali sono costruite senza variabili target, e il 95% di accuratezza è quanto accuratamente i dati grezzi sono descritti usando proprio quelle componenti. E l'accuratezza delle previsioni non c'entra affatto.
Sì, si scopre che non si capisce.
La PCA può essere applicata come strumento indipendente, ma l'articolo non ne parla.
Ciò che viene discusso è come filtrare il rumore da un grande insieme di predittori.
Secondo la mia comprensione questo viene fatto nei seguenti passi:
1. Y-aware. Si tratta di scalare i predittori a seconda della variabile obiettivo
2. Utilizzando l'algoritmo PCA, un insieme di predittori viene ordinato e viene presa la parte che spiega il 95% della varianza.
2. O così (non l'ho capito io) usando l'algoritmo PCA, si costruisce un nuovo insieme di predittori moltiplicando quello originale per i coefficienti calcolati (carico). Questo set è ordinato. Prendiamo tanti di questi nuovi vettori quanti spiegano il 95% della varianza.
PS.
Andiamo alle pubblicazioni che Y-aware è il nuovo peep nel campo del filtraggio dei predittori di rumore.
Successo
2. Utilizzando l'algoritmo PCA, l'insieme dei predittori viene ordinato e viene presa la parte che spiega il 95% della varianza.
Questo non l'ho ancora capito. (Ora scriverò solo dell'approccio y-aware, per non confonderlo con l'altro). L'articolo stesso è qui:http://www.r-bloggers.com/principal-components-regression-pt-2-y-aware-methods/
Dopo il codice"princ <- prcomp(dmTrain, center = FALSE, scale. = FALSE)" c'è una situazione: i dati vengono letti, scalati per Y, i componenti PC vengono costruiti. Questa funzione non limita il numero di componenti - tanti quanti sono i predittori. La prima cosa da fare è selezionare solo una parte di essi (si raccomanda di descrivere il 95% delle variazioni). Nell'articolo stesso l'autore ha guardato il grafico sdev (alcune varianze non specificate) per i componenti, e ha detto che 2 o 5 sarebbero stati sufficienti, perché si distinguono nel grafico. In qualche modo non spicca nulla, il grafico è dolcemente decrescente.
C'è una tabella sdev, il numero di voci in essa è uguale al numero di componenti. È possibile calcolare quanti componenti prendere da questo? La somma di tutti i numeri non è necessariamente limitata a 1, ho visto una somma di 6, e probabilmente di più.
Non l'ho ancora capito. (Ora scriverò solo dell'approccio y-aware, per non confonderlo con l'altro). L'articolo stesso è qui:http://www.r-bloggers.com/principal-components-regression-pt-2-y-aware-methods/
Dopo il codice"princ <- prcomp(dmTrain, center = FALSE, scale. = FALSE)" abbiamo questa situazione: i dati vengono letti, scalati per Y, le componenti PC vengono costruite. Questa funzione non limita il numero di componenti - tanti quanti sono i predittori. La prima cosa da fare è selezionare solo una parte di essi (si raccomanda di descrivere il 95% delle variazioni). Nell'articolo stesso l'autore ha guardato il grafico sdev (alcune varianze non specificate) per i componenti, e ha detto che 2 o 5 sarebbero stati sufficienti, perché si distinguono nel grafico. In qualche modo non spicca nulla, il grafico è dolcemente decrescente.
C'è una tabella sdev, il numero di voci in essa è uguale al numero di componenti. È possibile calcolare quanti componenti prendere da questo? La somma di tutti i numeri non è necessariamente limitata a 1, ho visto una somma di 6, e probabilmente di più.
Eseguo rattle e ottengo tre tavoli:
L'ultima ha la 1a colonna che dice che se si prende solo PC1 spiegherà 0,9761 della variabilità (proporzione cumulativa), se si prendono DUE componenti - PC1 e PC2 spiegherà 0,99996 ecc.
(Non so come inserire le tabelle)
Importanza dei componenti:
PC1 PC2 PC3 PC4 PC5
Deviazione standard 2,2092 0,34555 0,01057 0,008382 0,004236
Percentuale della varianza 0,9761 0,02388 0,00002 0,000010 0,000000
Proporzione cumulativa 0,9761 0,99996 0,99998 1,000000 1,000000
Ho cercato questa tabella per molto tempo, finalmente l'ho trovata nel riassunto. Il posto più ovvio in realtà :) , grazie per averlo mostrato. Questo è il caso in cui qualcosa è nel sommario, ma non negli attributi dell'oggetto.
summary(princ)$importance[3,]
Si scopre che quell'articolo ha un seguito, dedicato proprio alla questione della selezione dei componenti, con qualche soluzione speciale per Y-aware. Non l'ho ancora provato.
http://www.win-vector.com/blog/2016/05/pcr_part3_pickk/
Ho cercato questa tabella per molto tempo, finalmente l'ho trovata nel riassunto. Il posto più ovvio in realtà :) , grazie per averlo mostrato. Questo è il caso in cui qualcosa è nel sommario, ma non negli attributi dell'oggetto.
Si scopre che quell'articolo ha un seguito, dedicato proprio alla questione della selezione dei componenti, con qualche soluzione speciale per Y-aware. Non l'ho ancora provato.
http://www.win-vector.com/blog/2016/05/pcr_part3_pickk/
Sì, ho trovato un sottoinsieme di predittori con un valore di fitness negativo. C'erano molti predittori, diverse migliaia, ho limitato gensa a solo 2 iterazioni, mi ci sono volute 8 ore :). Il risultato della funzione di fitness è 6%. Nel fronttest su questi predittori con nnet ho ottenuto il 45% di errore. Non è molto, non credo che l'EA sarebbe in profitto. Ho messo un limite di 10 iterazioni di nuovo per trovare un risultato migliore, l'ho eseguito, sono stato in attesa per 24 ore, speriamo che gensa sia mai completo. Dovrò provare genetica (libreria GA), funzionerà più velocemente con più thread (GA minimizza piuttosto che massimizzare il risultato, cioè il risultato della funzione fitness per GA dovrebbe cambiare il suo segno). Sperimenterò di più.
Ho letto vari articoli sul modello a componenti principali, e ora ho cercato non solo di addestrare il modello per misurare R^2 e massimizzarlo selezionando i predittori, ma anche di testare realmente il modello sui dati del fronttest. Sta uscendo un po' ambiguo. Da un lato ho aumentato la R^2 del modello rimuovendo le coppie correlate di predittori (funzione findCorrelation da bibiloteka caret), ma come si è scoperto la R^2 quando si testa il modello sui dati fronttest da questo diminuisce. Il miracolo non è avvenuto, anche il modello PCA viene riqualificato. Voglio provare una stima del predittore più complessa - dividere il campione di allenamento in due - per l'allenamento vero e proprio e per la validazione, formare il modello PCA, poi testare immediatamente sul campione di validazione, restituire il minimo R^2 come risultato finale. Se tale funzione viene utilizzata per la valutazione di un insieme di predittori e la massimizzazione di questo valore, allora verranno trovati solo quegli insiemi di predittori che danno buoni risultati sul campione addestrato e sui nuovi dati. Dovremo controllare.
Inoltre, devo aver sbagliato il testo del primo articolo sulla PCA in questo thread. Lì è stato detto che il numero di componenti dovrebbe essere scelto per descrivere il 95% della variazione, pensavo che stessero parlando della precisione della previsione della variabile obiettivo. Ma non è questo il caso, le componenti principali sono costruite senza variabili target, e il 95% di accuratezza è quanto accuratamente i dati grezzi sono descritti usando proprio quelle componenti. E l'accuratezza delle previsioni non c'entra affatto.