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

 
Rorschach:

Per una foresta, c'è un'opzione per guardare l'importanza e i cluster. In catbust è probabilmente plot_tree.

Preparerò i dati e li posterò.

Ho fatto una versione di prova per 6 colonne, ci sono voluti 11GB. Notepad++ non può aprirlo, dice che il file è troppo grande. BD Browser per SQLite è rimasto sospeso per circa 20 minuti.

Mostra una foto di come sono fatti gli ammassi di alberi, non so ancora cosa intendi.

Perché aprirlo? :) Faccio solo una mini copia con una struttura simile per il debug.

 
elibrarius:

Mi chiedo come addestrino gli alberi senza prendere tutti i dati in memoria. Se la tabella è di 6 gigabyte, allora si dovrebbero usare circa 6 gigabyte di memoria. L'albero deve ordinare ogni colonna nel suo insieme. Se non mettiamo tutto in memoria, ma leggiamo i dati dal disco ogni volta, sarà troppo lento.
L'unica variante è mantenere i dati in memoria nel tipo float invece che double, ma questo ridurrà la precisione. Per noi con 5 cifre di precisione, potrebbe non essere troppo male, ma catbust è un software universale, penso che i problemi fisici e matematici dovrebbero essere risolti in doppia precisione.

Non ho studiato il codice, ma se ci pensate logicamente, CatBoost probabilmente converte la tabella di dati campione e memorizza esattamente la variante convertita, il che si presta a una compressione veloce.

La trasformazione avviene su una griglia di quantizzazione di ogni predittore (sono disponibili 6 algoritmi), e, per esempio, da 1000 valori diversi di una variabile rimangono 32 varianti (che cadono nella gamma di una griglia di quantizzazione) e tale vettore di dati è facilmente compresso, oltre alle cifre già solo interi (a giudicare dalle restrizioni della dimensione di una griglia - tipo dati ushort - 2 byte su numero), e la tabella di quantizzazione si trova semplicemente in memoria ed è usata già allora alla creazione del modello in un codice. Ora abbiamo già ridotto le dimensioni, e inoltre è possibile ridurre il volume scegliendo non tutti i predittori per la valutazione, ma la loro parte, che si raccomanda di fare a grandi campioni, a che l'algoritmo del randomizzatore permette di utilizzare in altri alberi quei predittori, che non hanno ottenuto in "bag" in una volta, a causa di questo allenamento sarà anche più veloce, ma ci saranno più alberi nel modello. Sicuramente ci sono altri trucchi, ma il principale è la quantizzazione.

La quantizzazione dovrebbe essere considerata separatamente, idealmente ogni predittore dovrebbe essere abbinato alla propria griglia e i dati dovrebbero essere presentati per l'allenamento insieme alla griglia, permette all'algoritmo di farlo.

Così, il campione può essere autoquantizzato e sarà ben compresso.

 
Aleksey Vyazmikin:

Non ho studiato il codice, ma se ci pensi logicamente, CatBoost probabilmente trasforma la tabella dei dati campione e memorizza esattamente le varianti trasformate, che sono adatte alla compressione veloce.

La trasformazione avviene su una griglia di quantizzazione di ogni predittore (sono disponibili 6 algoritmi), e, per esempio, da 1000 valori diversi di una variabile rimangono 32 varianti (che cadono nella gamma di una griglia di quantizzazione) e tale vettore di dati è facilmente compresso, oltre alle cifre già solo interi (a giudicare dalle restrizioni della dimensione di una griglia - tipo dati ushort - 2 byte su numero), e la tabella di quantizzazione si trova semplicemente in memoria ed è usata già allora alla creazione del modello in un codice. Ora abbiamo già ridotto le dimensioni, e inoltre è possibile ridurre il volume scegliendo non tutti i predittori per la valutazione, ma la loro parte, che si raccomanda di fare a grandi campioni, a che l'algoritmo del randomizzatore permette di utilizzare in altri alberi quei predittori, che non hanno ottenuto in "bag" in una volta, a causa di questo allenamento sarà anche più veloce, ma ci saranno più alberi nel modello. Sicuramente ci sono altri trucchi, ma il principale è la quantizzazione.

La quantizzazione dovrebbe essere considerata separatamente, idealmente ogni predittore dovrebbe essere abbinato alla propria griglia e i dati dovrebbero essere presentati per l'allenamento insieme alla griglia, permette all'algoritmo di farlo.

Ecco perché il campione può essere quantizzato da solo e sarà ben compresso.

Giusto, mi ricordo, credo che ci sia una griglia predefinita di 1024 varianti di split. Se sostituisci tutti i dati con numeri divisi, puoi memorizzare in formato ushort, che è 2 byte invece di 8, 4 volte la compressione. Probabilmente è per questo che hai usato 2gb invece di 6.
Ora capisco a cosa serve questa griglia, si scopre che è per la compressione. Ed è più veloce da ordinare.
Документация по MQL5: Основы языка / Типы данных / Целые типы / Типы char, short, int и long
Документация по MQL5: Основы языка / Типы данных / Целые типы / Типы char, short, int и long
  • www.mql5.com
Целый тип char занимает в памяти 1 байт (8 бит) и позволяет выразить в двоичной системе счисления 2^8 значений=256. Тип char может содержать как положительные, так и отрицательные значения. Диапазон изменения значений составляет от -128 до 127. uchar # Целый тип uchar также занимает в памяти 1 байт, как и тип char, но в отличие от него, uchar...
 
elibrarius:
Giusto, mi ricordo, sembra avere una griglia predefinita di 1024 varianti divise. Se sostituisci tutti i dati con numeri divisi, puoi memorizzare in formato ushort, che è 2 byte invece di 8, 4 volte la compressione. Probabilmente è per questo che avevi 2gb invece di 6 e li hai usati.

Il default è 254, ma non ricordo quanto ho impostato allora. Probabilmente sono stati consumati meno di 2gb di memoria - ricordo che ero molto sorpreso che fosse così poco.

Comunque, questo approccio permette di comprimere significativamente i dati anche il campionamento stesso. Non si può fare con le reti neurali

elibrarius:
Ora capisco a cosa serve questa griglia, risulta per la compressione. Ed è più veloce per ordinarlo.
La griglia permette anche un minore adattamento, perché viene utilizzato un intervallo di valori. Ma questo non sarà sempre buono - per catturare i livelli teorici, penso che si debba tagliare la griglia da soli.
 
Aleksey Vyazmikin:

Il default è 254, ma non ricordo quanto ho impostato allora. Probabilmente sono stati consumati meno di 2gb di memoria - ricordo che ero molto sorpreso che fosse così piccolo.

Puoi usare uchar allora, è 1 byte.

Aleksey Vyazmikin:
Grid permette di adattarsi meno, perché viene usato un intervallo di valori. Ma non è sempre buono, per catturare i livelli teorici dovresti tagliare tu stesso la griglia.


Il valore massimo in ushort è 65 mila - se si imposta una tale griglia, si può non preoccuparsi di farlo manualmente.

 
Maxim Dmitrievsky:

https://www.mql5.com/ru/articles/8385

non è un fatto che sia una buona implementazione )

Passerò su quello russo.

Ho letto quello))) è pieno di errori nei calcoli e la rete dà risposte piuttosto casuali

 
elibrarius:

Allora potete usare uchar , è 1 byte.


In ushort il valore massimo è 65k - se si imposta una tale griglia, non ci si deve preoccupare manualmente

La loro dimensione massima è65535, ma non posso influenzare le variabili nel codice.

Per quanto riguarda la dimensione massima - no, non garantisce il risultato, perché può essere adattata alla striscia di dati e saltare quelli vicini.

Generalmente è bene avere un algoritmo di apprendimento che controlla sempre la ragionevolezza della divisione di chiusura (A>10 && A<=15), ma di solito accade casualmente - non c'è una tale condizione obbligatoria, anche se a volte viene riprodotta.

 
Alexander Alexeyevich:

Ho letto questo))) ci sono molti errori nei calcoli e la rete dà risposte piuttosto casuali

Vuoi scrivere tu stesso la rete?

Vod qui è un minimo di parole e un massimo di codice in python, ma anche in inglese.

https://datascience-enthusiast.com/DL/Building_a_Recurrent_Neural_Network-Step_by_Step_v1.html

Building a Recurrent Neural Network - Step by Step - v1
  • datascience-enthusiast.com
Building your Recurrent Neural Network - Step by Step
 
Maxim Dmitrievsky:

Vuoi scrivere tu stesso la rete?

C'è un minimo di parole e un massimo di codice in Python, ma anche in inglese.

https://datascience-enthusiast.com/DL/Building_a_Recurrent_Neural_Network-Step_by_Step_v1.html

Sì, voglio farlo io), perché tutti gli articoli e gli esempi non contano correttamente le funzioni di attivazione, per esempio la funzione sigmoide è sempre assunta come 1/1+exp(-x). Ho bisogno di 1,0/1,0+exp(-x). Sembra essere lo stesso, ma il terminale dà calcoli diversi) vedi se hai gli stessi calcoli) da qui gli errori.
 
Alexander Alexeyevich:
Sì, voglio farlo io stesso) perché in tutti gli articoli, gli esempi di funzioni di attivazione sono contati in modo errato) per esempio sigmoide è contato come 1/1+exp(-x) ovunque. Ho bisogno di 1,0/1,0+exp(-x). Sembra essere lo stesso, ma il terminale dà calcoli diversi) vedi se hai gli stessi calcoli) da qui l'errore.
Scrivere reti neurali nel terminale non è affatto un'opzione. Si può notare che qualsiasi funzione può improvvisamente funzionare in un modo diverso da quello previsto. Usare uno già testato
Motivazione: