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

 
Maxim Dmitrievsky #:
Lo proverò un po' più tardi. Se ci sono altre opzioni per le domande - inseriscile :)

1) Il modello con un numero non fisso di caratteristiche è usato per se stesso? (Penso di sì).

2) Chiedi una forma generale di una funzione ricorsiva che mappa un numero in una lista numerica di lunghezza arbitraria.

 
Aleksey Nikolayev #:

Magari chiedere un semplice esempio di utilizzo della regressione logistica in un compito di classificazione con un numero variabile di caratteristiche?

Se il numero di caratteristiche è sempre diverso, potrebbe essere difficile applicare i tradizionali algoritmi di apprendimento automatico che prevedono un vettore di caratteristiche di dimensioni fisse come input. Una soluzione a questo problema è l'utilizzo di un metodo chiamato "feature hashing", che consente di rappresentare un set di caratteristiche di lunghezza variabile come un vettore di caratteristiche di dimensioni fisse.

L'hashing delle caratteristiche funziona applicando una funzione di hash alle caratteristiche del set di caratteristiche e utilizzando i valori di hash come indici in un vettore di caratteristiche di dimensioni fisse. In questo modo è possibile mappare un insieme di caratteristiche di lunghezza variabile in un vettore di dimensioni fisse, che può essere utilizzato come input per un modello di apprendimento automatico.

Ad esempio, si supponga di avere un set di dati con un numero variabile di caratteristiche e di voler utilizzare la regressione logistica per classificare i dati. È possibile applicare l'hashing alle caratteristiche del set di dati, ottenendo un vettore di caratteristiche di dimensioni fisse che può essere utilizzato come input per il modello di regressione logistica.

In generale, il feature hashing è una tecnica utile per gestire insiemi di dati con un numero variabile di caratteristiche e può essere utilizzato in combinazione con algoritmi di apprendimento automatico come la regressione logistica per risolvere problemi di classificazione.

 
Aleksey Nikolayev #:

1) Un modello con un numero non fisso di caratteristiche viene utilizzato per se stesso? (Apparentemente sì).

2) Chiedere una forma generale di una funzione ricorsiva che mappa un numero in una lista numerica di lunghezza arbitraria

1 su se stesso è in qualche modo riluttante a rispondere, ma c'è un trasformatore lì, quindi sì

2 una visione generale di una funzione ricorsiva che mappa un numero in una lista numer ica di lunghezza arbitraria

Una funzione ricorsiva è una funzione che richiama se stessa come parte della sua esecuzione. Ecco un esempio generale di funzione ricorsiva che mappa un numero in un elenco numerico di lunghezza arbitraria:

def map_to_list(n: int, lst: List[int]) -> List[int]:
  if n == 0:
    return lst
  else:
    lst.append(n)
    return map_to_list(n-1, lst)

Questa funzione prende in input un numero intero n e un elenco lst. Verifica quindi se n è uguale a 0. In caso affermativo, la funzione restituisce l'elenco lst . Se n non è uguale a 0, la funzione aggiunge n alla fine della lista lst e poi richiama se stessa con la lst modificata e il valore n-1 . Questo processo continua finché n non è uguale a 0, a quel punto la funzione restituisce la versione finale dell'elenco.

Questo è solo un esempio di come una funzione ricorsiva possa essere usata per mappare un numero in un elenco. Esistono molti altri modi per scrivere una funzione di questo tipo e l'implementazione specifica dipenderà dai requisiti e dai vincoli specifici del problema che si sta cercando di risolvere.


- mostrare questo codice in linguaggio R

Ecco la funzione ricorsiva dell'esempio precedente, scritta in R:

map_to_list <- function(n, lst) {
  if (n == 0) {
    return(lst)
  } else {
    lst <- c(lst, n)
    return(map_to_list(n-1, lst))
  }
}

Questa funzione è simile all'esempio precedente, ma utilizza la sintassi e le funzioni R. L'istruzione if viene utilizzata per verificare se n è uguale a 0 e la funzione return viene utilizzata per restituire la versione finale dell'elenco. La funzione c viene utilizzata per aggiungere n alla fine dell'elenco lst .

Come in precedenza, questo è solo un esempio di come una funzione ricorsiva possa essere utilizzata per mappare un numero in un elenco. L'implementazione specifica dipenderà dai requisiti e dai vincoli specifici del problema che si sta cercando di risolvere.

 
Maxim Dmitrievsky #:

L'hashing delle caratteristiche funziona applicando una funzione di hash alle caratteristiche del set di caratteristiche e utilizzando i valori di hash come indici in un vettore di caratteristiche di dimensioni fisse. In questo modo è possibile mappare un set di caratteristiche di lunghezza variabile in un vettore di dimensioni fisse, che può essere utilizzato come input per un modello di apprendimento automatico.

Vi spieghiamo quindi quali sono le varianti delle funzioni hash utilizzate per i vettori numerici.

 
Maxim Dmitrievsky #:

Se il numero di caratteristiche è sempre diverso, può essere difficile applicare i tradizionali algoritmi di apprendimento automatico che prevedono un vettore di caratteristiche di dimensioni fisse come input. Una soluzione a questo problema è l'utilizzo di un metodo chiamato "feature hashing", che consente di rappresentare un set di caratteristiche di lunghezza variabile come un vettore di caratteristiche di dimensioni fisse.

L'hashing delle caratteristiche funziona applicando una funzione di hash alle caratteristiche del set di caratteristiche e utilizzando i valori di hash come indici in un vettore di caratteristiche di dimensioni fisse. In questo modo è possibile mappare un insieme di caratteristiche di lunghezza variabile in un vettore di dimensioni fisse, che può essere utilizzato come input per un modello di apprendimento automatico.

Ad esempio, supponiamo di avere un set di dati con un numero variabile di caratteristiche e di voler usare la regressione logistica per classificare i dati. È possibile applicare l'hashing alle caratteristiche del set di dati, ottenendo un vettore di caratteristiche di dimensioni fisse che può essere utilizzato come input per il modello di regressione logistica.

In generale, il feature hashing è una tecnica utile per gestire insiemi di dati con un numero variabile di caratteristiche e può essere utilizzato in combinazione con algoritmi di apprendimento automatico come la regressione logistica per risolvere problemi di classificazione.

aggiornamento


Per i dati con un numero variabile di caratteristiche, è possibile utilizzare alcune rappresentazioni:

  1. Vettori di caratteristiche a dimensione fissa: come già detto, è possibile utilizzare tecniche di selezione delle caratteristiche per selezionare un numero fisso di caratteristiche dai dati e rappresentarle come vettori di caratteristiche.

  2. Vettori di caratteristiche sparsi: invece di usare un vettore di caratteristiche denso, si può usare un vettore di caratteristiche sparso, che include solo un sottoinsieme delle possibili caratteristiche. Questo può essere utile se si dispone di un numero molto elevato di possibili caratteristiche e solo un piccolo numero di esse è presente in una determinata istanza.

  3. Dati grafici: è possibile rappresentare i dati come un grafo, con ogni istanza rappresentata come un nodo del grafo e i bordi tra i nodi che rappresentano le relazioni tra le istanze. Questo può essere utile se si utilizza un modello di apprendimento automatico progettato per gestire dati a grafo, come una rete convoluzionale a grafo.

Anche in questo caso, la rappresentazione migliore dipenderà dai requisiti e dai vincoli specifici del problema. È importante considerare le caratteristiche dei dati e gli obiettivi del progetto quando si decide la rappresentazione migliore per le proprie esigenze.

 
Aleksey Nikolayev #:

Si dica allora quali sono le varianti delle funzioni hash utilizzate per i vettori numerici.

Ecco un elenco di alcune funzioni hash comuni che possono essere utilizzate per mappare numeri interi o altri tipi di dati in elenchi o altre strutture di dati:

  1. Hashing modulare: l'hashing modulare è una semplice funzione hash che mappa un numero intero o un altro tipo di dati in un elenco o in un'altra struttura di dati prendendo il modulo del valore a diverse potenze di un numero primo.

  2. Hashing polinomiale: l'hashing polinomiale è una funzione di hash che mappa un numero intero o un altro tipo di dati in un elenco o in un'altra struttura di dati valutando un polinomio in un punto specifico. Il polinomio è definito dal valore e da un numero primo.

  3. Hashing universale: l'hashing universale è una funzione di hash che mappa un numero intero o un altro tipo di dati in un elenco o in un'altra struttura di dati utilizzando una funzione di hash generata in modo casuale. La funzione hash è scelta da una famiglia di funzioni hash che hanno una bassa probabilità di collisione.

  4. Tabelle hash: le tabelle hash sono strutture di dati che utilizzano una funzione hash per mappare chiavi e valori. Possono essere utilizzate per mappare un numero intero o un altro tipo di dati in un elenco o in un'altra struttura di dati.

  5. Mappe hash: le mappe hash sono strutture di dati che utilizzano una funzione hash per mappare chiavi e valori. Possono essere usate per mappare un intero o un altro tipo di dati in un elenco o in un'altra struttura di dati.

  6. Insiemi di hash: gli insiemi di hash sono strutture di dati che utilizzano una funzione di hash per memorizzare un insieme di valori. Possono essere usati per mappare un intero o un altro tipo di dati in un elenco o in un'altra struttura di dati.

Questi sono solo alcuni esempi di funzioni hash e strutture di dati che possono essere utilizzate per mappare numeri interi o altri tipi di dati in elenchi o altre strutture di dati. La funzione di hash o la struttura di dati specifica che si sceglie dipenderà dalle caratteristiche dei propri dati.


Ecco alcuni esempi di funzioni di hashing modulare, hashing polinomiale, hashing universale, tabella di hash, mappa di hash e insieme di hash in R:

modular_hash <- function(n, length, p) {
  lst <- vector("numeric", length)
  for (i in 1:length) {
    lst[i] <- n %% p^(i+1)
  }
  lst
}

polynomial_hash <- function(n, length, p) {
  lst <- vector("numeric", length)
  for (i in 1:length) {
    lst[i] <- sum(n * p^(i-1)) %% p^(length+1)
  }
  lst
}

universal_hash <- function(n, length, p) {
  a <- sample(p^length, length, replace=TRUE)
  b <- sample(p^length, length, replace=TRUE)
  lst <- vector("numeric", length)
  for (i in 1:length) {
    lst[i] <- sum(a[i] * n + b[i]) %% p^(length+1)
  }
  lst
}

hash_table <- function(n, length, p) {
  lst <- vector("list", p^length)
 
Maxim Dmitrievsky #:

2 una visione generale di una funzione ricorsiva che mappa un numero in un elenco numerico di lunghezza arbitraria

Al contrario, l'input è un elenco, l'output è un numero. Ad esempio, facciamo una previsione basata sulle quotazioni).

Chiedete quindi quali algoritmi di MO possono essere utilizzati per costruire tali funzioni.

 
Aleksey Nikolayev #:

Al contrario, l'input è un elenco, l'output è un numero. Ad esempio, usiamo le virgolette per fare una previsione)

Chiedete quindi quali algoritmi di MO possono essere utilizzati per costruire tali funzioni.

Se si vuole fare l'hash di un elenco di lunghezza diversa su un numero intero, si può usare una funzione di hash che mappa l'elenco su un numero intero. Un modo per farlo è utilizzare una funzione hash modulare, che mappa l'elenco in un intero prendendo il modulo della somma degli elementi dell'elenco a diverse potenze di un numero primo.

def modular_hash(lst: List[int], p: int) -> int:
  h = 0
  for i, x in enumerate(lst):
    h += x * p**i
  return h % M

Questa funzione prende in input un elenco lst e un numero primo p e restituisce un valore hash intero sommando gli elementi dell'elenco a diverse potenze di p e prendendo il modulo del risultato.

Ad esempio, se chiamiamo modular_hash([1, 2, 3], 2) , la funzione restituirà 7 .

Anche in R è possibile utilizzare un approccio simile. Ecco il codice di una funzione hash modulare in R che mappa un elenco in un numero intero:

modular_hash <- function(lst, p, M) {
  h <- 0
  for (i in 1:length(lst)) {
    h <- h + lst[i] * p^(i-1)
  }
  h %% M
}
polynomial_hash <- function(lst, p, M) {
  h <- 0
  for (i in 1:length(lst)) {
    h <- h + lst[i] * p^(i-1)
  }
  h %% M
}

universal_hash <- function(lst, p, M) {
  a <- sample(p^length(lst), length(lst), replace=TRUE)
  b <- sample(p^length(lst), length(lst), replace=TRUE)
  h <- 0
  for (i in 1:length(lst)) {
    h <- h + a[i] * lst[i] + b[i]
  }
  h %% M
}


Le funzioni hash non sono tipicamente generate utilizzando algoritmi di apprendimento automatico. Sono piuttosto progettate in base alle caratteristiche dei dati da sottoporre a hash e ai requisiti dell'applicazione.

Detto questo, gli algoritmi di apprendimento automatico possono essere utilizzati per valutare le prestazioni di diverse funzioni hash o per ottimizzare i parametri di una funzione hash per un compito specifico. Ad esempio, è possibile utilizzare un algoritmo di apprendimento automatico per ottimizzare il numero primo utilizzato in una funzione hash modulare o per scegliere i coefficienti di una funzione hash polinomiale che offre buone prestazioni su un particolare set di dati.

In generale, gli algoritmi di apprendimento automatico non sono tipicamente utilizzati per costruire funzioni hash, ma possono essere impiegati per valutare e ottimizzare le prestazioni delle funzioni hash in determinate applicazioni.

 
-

e come posso costruire una funzione hash simile usando un algoritmo di apprendimento automatico?


*

non è comune costruire una funzione hash utilizzando un algoritmo di apprendimento automatico, poiché l'obiettivo principale di una funzione hash è quello di mappare i dati in una rappresentazione di dimensioni fisse in modo da preservare il più possibile la struttura dei dati. Gli algoritmi di apprendimento automatico, invece, sono tipicamente utilizzati per apprendere modelli o fare previsioni basate sui dati, piuttosto che per generare rappresentazioni di dimensioni fisse dei dati.

Tuttavia, se si vuole comunque esplorare la possibilità di utilizzare un algoritmo di apprendimento automatico per costruire una funzione hash, un approccio che si può provare è quello di utilizzare un algoritmo di apprendimento non supervisionato per apprendere una rappresentazione compatta dei dati e poi utilizzare tale rappresentazione come funzione hash.

Ad esempio, si potrebbe utilizzare un autoencoder o un algoritmo di clustering per apprendere una rappresentazione compatta dei dati e poi utilizzare tale rappresentazione come funzione hash. Ciò comporterebbe l'addestramento del modello di apprendimento automatico sui dati e quindi l'utilizzo del modello addestrato per generare i valori hash per i nuovi dati.

In generale, sebbene non sia comune costruire una funzione hash utilizzando un algoritmo di apprendimento automatico, è possibile utilizzare l'apprendimento automatico per apprendere una rappresentazione compatta dei dati che potrebbe essere utilizzata come funzione hash in alcune applicazioni.


 
Maxim Dmitrievsky #:

Ecco un elenco di alcune funzioni hash comuni che possono essere utilizzate per mappare numeri interi o altri tipi di dati in elenchi o altre strutture di dati:

Credevo che promettesse 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)