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

 
Aleksey Nikolayev #:

Penso che abbia promesso di mappare un vettore di dimensione arbitraria in un vettore di dimensione fissa specificata, ma qui mappa un numero in un vettore?

Tutto è complicato e incomprensibile) La vita era molto più facile senza GPT) Avremo difficoltà nell'era dell'IA)

Ho scritto di più sul passaggio da vettore a numero.

Vettore in un vettore fisso?

 

Se si vuole fare l'hash di un elenco di lunghezza diversa in un elenco di lunghezza fissa, si può usare una funzione di hash che mappa l'elenco in un elenco di dimensioni fisse. Un modo per farlo è utilizzare una tecnica chiamata "feature hashing", che consente di rappresentare un elenco di lunghezza variabile come un elenco di dimensioni fisse applicando una funzione hash agli elementi dell'elenco e utilizzando i valori hash come indici nell'elenco di dimensioni fisse.

Ecco un esempio di funzione hash in Python:

def feature_hash(lst: List[int], n: int) -> List[int]:
  h = [0] * n
  for x in lst:
    h[hash(x) % n] += 1
  return h

Questa funzione prende in input un elenco lst e una lunghezza di elenco desiderata n, e restituisce un elenco di dimensioni fisse applicando una funzione hash agli elementi di lst e usando i valori hash come indici nell'elenco di dimensioni fisse. I valori di ciascun indice vengono quindi incrementati per contare il numero di occorrenze di ciascun elemento nell'elenco originale.

Ad esempio, se si chiama feature_hash([1, 2, 3], 5) , la funzione restituirà [0, 1, 1, 1, 1, 0] .

È possibile utilizzare un approccio simile anche in R. Ecco il codice di una funzione di hashing delle caratteristiche in R:

feature_hash <- function(lst, n) {
  h <- rep(0, n)
  for (x in lst) {
    h[as.integer(x) %% n] <- h[as.integer(x) %% n] + 1
  }
  h
}
 
Aleksey Nikolayev #:

Penso che abbia promesso di mappare un vettore di dimensione arbitraria in un vettore di dimensione fissa specificata, ma qui mappa un numero in un vettore?

Tutto è complicato e incomprensibile) La vita era molto più semplice senza GPT) Avremo difficoltà nell'era dell'IA).

Alexei, smetti di ascoltare i profani.

Se avete bisogno di un numero diverso di caratteristiche per ogni input.
Si tratta di pattern mining frequente - ricerca di regole associative in diverse varianti, anche con un insegnante.


==============
Perché ho detto che NON esistono algoritmi che accettano un numero diverso di caratteristiche?
Perché anche in questi algoritmi i dati sono sotto forma di matrice rada in un unico formato di codifica.
L'input è ancora costituito da tutti i nomi delle caratteristiche, anche se in un formato più delicato.
=======================
Anche il numero di attributi non è stato specificato
Se il numero di caratteristiche è relativamente piccolo, 10-20k, allora è possibile caricarlo in xgboost anche su un computer portatile debole senza problemi.
 
Maxim Dmitrievsky #:

in un vettore fisso?

1) Se vogliamo usare un qualsiasi algoritmo MO ordinario (con un numero fisso di caratteristiche), allora sì: prendiamo un insieme di vettori di lunghezza diversa e li convertiamo in un insieme di vettori di una determinata lunghezza.

2) Cercare immediatamente un algoritmo MO insolito che possa prendere in input vettori di qualsiasi lunghezza.

La prima opzione si trasforma nella seconda se la trasformazione vettoriale viene ricercata tramite MO.

 
Aleksey Nikolayev #:

1) Se vogliamo usare un qualsiasi algoritmo MO convenzionale (con un numero fisso di caratteristiche), allora sì - prendiamo un insieme di vettori di diversa lunghezza e li convertiamo in un insieme di vettori di una determinata lunghezza.

2) Cercare immediatamente un algoritmo MO insolito che possa prendere in input un vettore di qualsiasi lunghezza.

La prima opzione si trasforma nella seconda se la trasformazione vettoriale viene cercata tramite MO.

Quindi è chiaro che possiamo provarci con gli algoritmi di hash. Ma vorrei chiedere in base a quale principio si scelgono vettori di lunghezza arbitraria, o meglio la loro lunghezza :) e da quali dati.

Ci possono essere molte varianti

la prima opzione è più gradevole, ma è necessario inserire qualcosa nella logica

 

- Voglio fare l'hash di un vettore di dimensioni variabili di rendimenti azionari in un vettore fisso


Se si desidera eseguire l'hash di un vettore di dimensioni variabili di rendimenti azionari su un vettore di dimensioni fisse, è possibile utilizzare una tecnica chiamata min-hash. Min-hash è un metodo per approssimare la somiglianza tra due insiemi calcolando il numero di elementi che hanno in comune. Viene spesso utilizzato nel contesto del text mining, ma può essere applicato anche ad altri tipi di dati, come i rendimenti dei titoli azionari.

Ecco un esempio di come si potrebbe utilizzare min-hash per eseguire l'hash di un vettore di dimensioni variabili di rendimenti azionari in un vettore di dimensioni fisse:

  1. Definire la dimensione del vettore a dimensione fissa: per prima cosa, è necessario definire la dimensione del vettore a dimensione fissa che si desidera utilizzare. Questo dipende dai requisiti specifici dell'applicazione e dalla quantità di dati disponibili.

  2. Creare una funzione di hash: successivamente, è necessario creare una funzione di hash che possa essere utilizzata per eseguire l'hash dei dati relativi ai rendimenti dei titoli azionari nel vettore di dimensioni fisse. Esistono diversi approcci per creare una funzione hash, come ad esempio l'uso di una permutazione casuale o di un generatore congruenziale lineare.

  3. Hash dei dati: una volta definite le dimensioni del vettore di dimensioni fisse e creata una funzione hash, è possibile utilizzarle per eseguire l'hash del vettore di dimensioni variabili dei rendimenti azionari in un vettore di dimensioni fisse. Il vettore a dimensione fissa risultante rappresenterà i dati originali in forma compressa, con la dimensione del vettore determinata dalla dimensione definita.

È importante notare che min-hash può comportare una perdita di informazioni, poiché si tratta di un'approssimazione della somiglianza tra due insiemi piuttosto che di una rappresentazione esatta. L'accuratezza dell'approssimazione dipenderà dalle dimensioni del vettore a dimensione fissa e dalla specifica funzione di hash utilizzata.


- Come minimizzare la perdita di informazioni


Ci sono diversi modi per minimizzare la perdita di informazioni quando si usa min-hash per eseguire l'hash di un vettore di dimensioni variabili di rendimenti azionari su un vettore di dimensioni fisse:

  1. Utilizzare un vettore di dimensione fissa più grande: un modo per minimizzare la perdita di informazioni è quello di utilizzare un vettore di dimensione fissa più grande. Un vettore più grande avrà più elementi e potrà quindi catturare più informazioni sui dati originali. Tuttavia, questo aumenterà anche le dimensioni del vettore e potrebbe non essere pratico se si dispone di un ampio set di dati o di uno spazio di archiviazione limitato.

  2. Utilizzare una funzione hash migliore: un altro modo per ridurre al minimo la perdita di informazioni è quello di utilizzare una funzione hash migliore. Funzioni hash diverse hanno proprietà diverse e possono comportare livelli diversi di perdita di informazioni. Ad esempio, una funzione hash con un alto grado di casualità comporterà generalmente una perdita di informazioni minore rispetto a una funzione hash con un basso grado di casualità.

  3. Utilizzare più funzioni hash: è possibile ridurre al minimo la perdita di informazioni utilizzando più funzioni hash e combinando i risultati. In questo modo si può ottenere una rappresentazione più completa dei dati originali, poiché ogni funzione hash cattura aspetti diversi dei dati.

È importante notare che potrebbe non essere possibile eliminare completamente la perdita di informazioni quando si utilizza min-hash, poiché si tratta di un'approssimazione della somiglianza tra due insiemi piuttosto che di una rappresentazione esatta. L'accuratezza dell'approssimazione dipenderà dalle dimensioni del vettore a dimensione fissa e dalla specifica funzione hash utilizzata.


Ecco un esempio di come si potrebbe utilizzare min-hash in Python per eseguire l'hash di un vettore di dimensioni variabili di rendimenti azionari in un vettore di dimensioni fisse:

from datasketch import MinHash

# Define the size of the fixed size vector
num_hashes = 100

# Create a MinHash object
mh = MinHash(num_hashes=num_hashes)

# Hash the stock price returns data to the fixed size vector
for price_return in stock_price_returns:
    mh.update(str(price_return).encode('utf8'))

# The resulting fixed size vector is stored in the MinHash object
fixed_size_vector = mh.hashvalues


Ecco un esempio di come si potrebbe utilizzare min-hash in R per eseguire l'hash di un vettore di dimensioni variabili di rendimenti azionari in un vettore di dimensioni fisse:


# Install the 'minhash' package if it is not already installed
install.packages("minhash")

# Load the 'minhash' package
library(minhash)

# Define the size of the fixed size vector
num_hashes = 100

# Create a MinHash object
mh = minhash(num_hashes)

# Hash the stock price returns data to the fixed size vector
for (price_return in stock_price_returns) {
    mh = update(mh, price_return)
}

# The resulting fixed size vector is stored in the MinHash object
fixed_size_vector = getValues(mh)


È importante notare che questi esempi hanno lo scopo di illustrare il processo di base dell'utilizzo di min-hash per eseguire l'hash di un vettore di dimensioni variabili di rendimenti azionari in un vettore di dimensioni fisse. In un'applicazione reale, potrebbe essere necessario modificare il codice per adattarlo alle esigenze e ai dati specifici.

 

- quindi min-hash è il metodo migliore?

Min-hash è un metodo per approssimare la somiglianza tra due insiemi calcolando il numero di elementi che hanno in comune. Può essere utilizzato per eseguire l'hash di un vettore di rendimenti azionari di dimensioni variabili in un vettore di dimensioni fisse, ma non è detto che sia il modo migliore per farlo, in quanto può comportare una perdita di informazioni.

Esistono diversi approcci per eseguire l'hash dei dati dei rendimenti azionari e l'approccio migliore dipende dalle caratteristiche specifiche dei dati e dai requisiti dell'applicazione. Tra gli altri approcci che si possono prendere in considerazione vi sono:

  1. Hashing delle caratteristiche: l'hashing delle caratteristiche è una tecnica utilizzata per convertire dati categorici o testuali in una rappresentazione numerica che può essere utilizzata negli algoritmi di apprendimento automatico. Si potrebbe usare l'hashing delle caratteristiche per fare l'hash dei dati sui rendimenti dei titoli azionari in un vettore di dimensioni fisse.

  2. Hashing sensibile alle località (LSH): LSH è una tecnica utilizzata per identificare approssimativamente elementi simili in un set di dati. È possibile utilizzare LSH per eseguire l'hash dei dati sui rendimenti azionari in un vettore di dimensioni fisse e quindi identificare elementi simili in base ai loro valori di hash.

  3. Altre tecniche: Ci sono molte altre tecniche che si possono usare per fare l'hash dei dati sui rendimenti azionari, come ad esempio l'uso di una permutazione casuale o di un generatore congruenziale lineare. La tecnica specifica scelta dipenderà dalle caratteristiche dei dati e dai requisiti dell'applicazione.

È importante considerare attentamente i compromessi tra precisione ed efficienza quando si sceglie una tecnica di hashing. Alcune tecniche possono essere più precise ma meno efficienti, mentre altre possono essere più efficienti ma meno precise. È necessario trovare il giusto equilibrio che soddisfi le esigenze dell'applicazione.

 
mytarmailS #:
Alexei, smetti di ascoltare i profani.

Se hai bisogno di un numero diverso di segni per ingresso.
Si tratta di pattern mining frequente - ricerca di regole associative in diverse varianti, anche con un insegnante.


==============
Perché ho detto che NON ci sono algoritmi che prendono un numero diverso di caratteristiche?
Perché anche in questi algoritmi i dati sono una matrice rada in un unico formato di codifica.
L'input è ancora costituito da tutti i nomi delle caratteristiche, anche se in un formato più delicato.
=======================
Inoltre, il numero di caratteristiche non è stato specificato
Se il numero di segni è relativamente piccolo, 10-20k, è possibile caricarlo in xgboost anche su un computer portatile debole senza problemi.

Abbiamo già discusso con voi delle regole associative. Per me non si adattano bene al mio approccio generale di ricerca delle differenze tra prezzo e SB. Il problema è che l'SB è abbastanza bravo a far sembrare che ci siano delle regole - l'unico problema è che saranno diverse nei vari siti.

 
Aleksey Nikolayev #:

Ho già discusso con voi le regole associative. Per me, non si adattano bene al mio approccio generale di ricerca delle differenze tra prezzo e SB. Il problema è che SB è abbastanza bravo a far sembrare che le regole esistano - l'unico problema è che saranno diverse nei vari siti.

Allora, per preparare i dati come vuoi tu (senza struttura) devi capire come farlo correttamente, e per questo dovresti studiare come preparare i dati per le regole associative.
 

Ottimo lavoro, ho preso anche qualcosa di interessante per me nel contesto della modifica della lunghezza della finestra.

Se avete altre domande, abbozzatele pure, ve le chiederò dopo il nuovo anno.