L'Apprentissage Automatique dans le trading : théorie, modèles, pratique et trading algo - page 2877

 
Aleksey Nikolayev #:

Je pense qu'il promettait de faire correspondre un vecteur de taille arbitraire à un vecteur de taille fixe spécifiée, mais ici il fait correspondre un nombre à un vecteur ?

Tout est compliqué et incompréhensible) La vie était beaucoup plus facile sans GPT) Nous aurons du mal à entrer dans l'ère de l'IA)

J'ai écrit davantage sur la conversion d'un vecteur en un nombre.

Vecteur dans un vecteur fixe ?

 

Si vous souhaitez convertir une liste de longueur variable en une liste de longueur fixe, vous pouvez utiliser une fonction de hachage qui convertit la liste en une liste de taille fixe. Une façon de procéder consiste à utiliser une technique appelée "hachage de caractéristiques", qui permet de représenter une liste de longueur variable comme une liste de taille fixe en appliquant une fonction de hachage aux éléments de la liste et en utilisant les valeurs de hachage comme indices dans la liste de taille fixe.

Voici un exemple de fonction de hachage en 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

Cette fonction prend en entrée une liste lst et une longueur de liste souhaitée n, et renvoie une liste de taille fixe en appliquant une fonction de hachage aux éléments de lst et en utilisant les valeurs de hachage comme indices dans la liste de taille fixe. Les valeurs de chaque index sont ensuite incrémentées pour compter le nombre d'occurrences de chaque élément dans la liste d'origine.

Par exemple, si nous appelons feature_hash([1, 2, 3], 5) , la fonction renverra [0, 1, 1, 1, 1, 0] .

Vous pouvez également utiliser une approche similaire dans R. Voici le code d'une fonction de hachage de caractéristiques en 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 #:

Je pense qu'il promettait de faire correspondre un vecteur de taille arbitraire à un vecteur de taille fixe spécifiée, mais ici il fait correspondre un nombre à un vecteur ?

Tout est compliqué et incompréhensible) La vie était beaucoup plus simple sans GPT) Nous aurons du mal à entrer dans l'ère de l'IA).

Alexei, arrêtez d'écouter les profanes.

Si vous avez besoin de différents nombres de caractéristiques par entrée.
Il s'agit de l'exploration de motifs fréquents - recherche de règles associatives dans différentes variantes, y compris avec un enseignant.


==============
Pourquoi ai-je dit qu'il n'existe PAS d'algorithmes acceptant différents nombres de caractéristiques ?
Parce que même dans ces algorithmes, sous le capot, les données se présentent sous la forme d'une matrice éparse dans un format d'encodage chaud.
L'entrée est toujours constituée de tous les noms des caractéristiques, bien que dans un format plus doux.
=======================
Le nombre d'attributs n'a pas non plus été spécifié
Si le nombre de caractéristiques est relativement faible (10 à 20 000), vous pouvez le charger dans xgboost sans problème, même sur un ordinateur portable faible.
 
Maxim Dmitrievsky #:

en un vecteur fixe ?

1) Si nous voulons utiliser un algorithme de MO ordinaire (avec un nombre fixe de caractéristiques), alors oui - nous prenons un ensemble de vecteurs de différentes longueurs et nous les convertissons en un ensemble de vecteurs d'une longueur donnée.

2) Chercher immédiatement un algorithme de MO inhabituel qui puisse prendre en entrée un vecteur de n'importe quelle longueur.

La première option se transforme en deuxième option si la transformation vectorielle est recherchée au moyen de la MO.

 
Aleksey Nikolayev #:

1) Si nous voulons utiliser un algorithme MO conventionnel (avec un nombre fixe de caractéristiques), alors oui - nous prenons un ensemble de vecteurs de différentes longueurs et nous les convertissons en un ensemble de vecteurs d'une longueur donnée.

2) Cherchez immédiatement un algorithme de MO inhabituel qui peut prendre en entrée un vecteur de n'importe quelle longueur.

La première option se transforme en deuxième option si la transformation vectorielle est recherchée au moyen de la MO.

Il est donc clair que nous pouvons essayer via les f-iys de hachage. Mais je me demande sur quel principe choisir des vecteurs de longueur arbitraire, ou plutôt la longueur de ces vecteurs :) et à partir de quelles données.

il peut y avoir beaucoup de variantes

la première option est plus agréable, mais il faut mettre quelque chose dans la logique

 

- Je veux hacher un vecteur de taille variable de rendements de prix en un vecteur fixe


Si vous souhaitez hacher un vecteur de taille variable de rendements de cours boursiers en un vecteur de taille fixe, vous pouvez utiliser une technique appelée min-hash. Le min-hash est une méthode permettant d'estimer la similarité entre deux ensembles en calculant le nombre d'éléments qu'ils ont en commun. Elle est souvent utilisée dans le contexte de l'exploration de texte, mais elle peut également être appliquée à d'autres types de données, telles que les rendements des cours boursiers.

Voici un exemple d'utilisation de min-hash pour hacher un vecteur de taille variable de cours boursiers en un vecteur de taille fixe :

  1. Définir la taille du vecteur de taille fixe : Tout d'abord, vous devez définir la taille du vecteur de taille fixe que vous souhaitez utiliser. Cela dépendra des exigences spécifiques de votre application et de la quantité de données dont vous disposez.

  2. Créer une fonction de hachage : Ensuite, vous devez créer une fonction de hachage qui peut être utilisée pour hacher les données sur les rendements des cours boursiers dans le vecteur de taille fixe. Il existe de nombreuses approches différentes pour créer une fonction de hachage, comme l'utilisation d'une permutation aléatoire ou d'un générateur congruentiel linéaire.

  3. Hacher les données : une fois que vous avez défini la taille du vecteur de taille fixe et créé une fonction de hachage, vous pouvez les utiliser pour hacher le vecteur de taille variable des données sur les cours boursiers en un vecteur de taille fixe. Le vecteur de taille fixe résultant représentera les données d'origine sous une forme compressée, la taille du vecteur étant déterminée par la taille que vous avez définie.

Il est important de noter que le min-hash peut entraîner une perte d'informations, car il s'agit d'une approximation de la similarité entre deux ensembles plutôt que d'une représentation exacte. La précision de l'approximation dépend de la taille du vecteur de taille fixe et de la fonction de hachage utilisée.


- Comment minimiser la perte d'informations


Il existe plusieurs façons de minimiser la perte d'informations lors de l'utilisation de min-hash pour convertir un vecteur de taille variable de cours boursiers en un vecteur de taille fixe :

  1. Utiliser un vecteur de taille fixe plus grand : Une façon de minimiser la perte d'informations est d'utiliser un vecteur de taille fixe plus grand. Un vecteur plus grand aura plus d'éléments et pourra donc capturer plus d'informations sur les données d'origine. Cependant, cela augmente également la taille du vecteur et peut ne pas être pratique si vous disposez d'un grand ensemble de données ou d'un espace de stockage limité.

  2. Utiliser une meilleure fonction de hachage : une autre façon de minimiser la perte d'informations consiste à utiliser une meilleure fonction de hachage. Différentes fonctions de hachage ont des propriétés différentes et peuvent entraîner différents niveaux de perte d'informations. Par exemple, une fonction de hachage ayant un degré élevé d'aléa entraînera généralement une perte d'informations moins importante qu'une fonction de hachage ayant un faible degré d'aléa.

  3. Utiliser plusieurs fonctions de hachage : vous pouvez également minimiser la perte d'informations en utilisant plusieurs fonctions de hachage et en combinant les résultats. Cela permet d'obtenir une représentation plus complète des données d'origine, car chaque fonction de hachage capture des aspects différents des données.

Il est important de noter qu'il n'est pas toujours possible d'éliminer complètement la perte d'informations en utilisant la fonction min-hash, car il s'agit d'une approximation de la similarité entre deux ensembles plutôt que d'une représentation exacte. La précision de l'approximation dépend de la taille du vecteur de taille fixe et de la fonction de hachage utilisée.


Voici un exemple d'utilisation de min-hash en Python pour hacher un vecteur de taille variable de cours boursiers en un vecteur de taille fixe :

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


Voici un exemple de la manière dont vous pourriez utiliser min-hash en R pour hacher un vecteur de taille variable de rendements boursiers en un vecteur de taille fixe :


# 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)


Il est important de noter que ces exemples ont pour but d'illustrer le processus de base de l'utilisation de min-hash pour hacher un vecteur de taille variable de rendements de prix d'actions en un vecteur de taille fixe. Dans une application réelle, vous devrez peut-être modifier le code pour l'adapter à vos besoins et données spécifiques.

 

- le min-hash est donc la meilleure solution ?

Le min-hash est une méthode qui permet d'estimer la similarité entre deux ensembles en calculant le nombre d'éléments qu'ils ont en commun. Cette méthode peut être utilisée pour convertir un vecteur de taille variable de données sur les cours boursiers en un vecteur de taille fixe, mais ce n'est pas nécessairement la meilleure façon de procéder, car elle peut entraîner une perte d'informations.

Il existe de nombreuses approches différentes pour hacher les données relatives aux rendements des cours boursiers, et la meilleure approche dépendra des caractéristiques spécifiques des données et des exigences de votre application. Voici quelques autres approches que vous pourriez envisager :

  1. Hachage de caractéristiques : le hachage de caractéristiques est une technique utilisée pour convertir des données catégorielles ou textuelles en une représentation numérique qui peut être utilisée dans des algorithmes d'apprentissage automatique. Vous pourriez utiliser le hachage de caractéristiques pour hacher les données sur les rendements des cours boursiers en un vecteur de taille fixe.

  2. Hachage sensible à la localité (LSH) : LSH est une technique utilisée pour identifier approximativement les éléments similaires dans un ensemble de données. Vous pouvez utiliser LSH pour hacher les données sur les rendements boursiers en un vecteur de taille fixe, puis identifier les éléments similaires sur la base de leurs valeurs de hachage.

  3. Autres techniques : il existe de nombreuses autres techniques que vous pouvez utiliser pour hacher les données sur les rendements boursiers, par exemple en utilisant une permutation aléatoire ou un générateur congruentiel linéaire. La technique spécifique que vous choisirez dépendra des caractéristiques des données et des exigences de votre application.

Il est important d'examiner attentivement les compromis entre la précision et l'efficacité lors du choix d'une technique de hachage. Certaines techniques peuvent être plus précises mais moins efficaces, tandis que d'autres peuvent être plus efficaces mais moins précises. Vous devrez trouver le bon équilibre pour répondre aux besoins de votre application.

 
mytarmailS #:
Alexei, cesse d'écouter les profanes.

Si vous avez besoin d'un nombre différent de signes par entrée.
Il s'agit de l'exploration de motifs fréquents - recherche de règles associatives dans différentes variantes, y compris avec un enseignant.


==============
Pourquoi ai-je dit qu'il n'y a PAS d'algorithmes qui prennent différents nombres de caractéristiques ?
Parce que même dans ces algorithmes, sous le capot, les données sont une matrice éparse dans un format d'encodage chaud.
L'entrée est toujours constituée de tous les noms des caractéristiques, bien que dans un format plus doux.
=======================
De plus, le nombre d'éléments n'a pas été spécifié
Si le nombre de signes est relativement faible 10-20k, vous pouvez le charger dans xgboost même sur un ordinateur portable faible sans problèmes.

Nous avons déjà discuté des règles associatives avec vous. Pour moi, elles ne cadrent pas bien avec mon approche générale qui consiste à rechercher des différences entre le prix et le SB. Le problème est que le SB est très doué pour faire croire qu'il y a des règles - le seul problème est qu'elles seront différentes selon les sites.

 
Aleksey Nikolayev #:

J'ai déjà discuté avec vous des règles associatives. Pour moi, elles ne cadrent pas bien avec mon approche générale qui consiste à rechercher des différences entre le prix et le SB. Le problème est que le SB est assez doué pour faire apparaître des règles - le seul problème est qu'elles seront différentes selon les sites.

Boost donc, mais pour préparer les données comme vous le souhaitez (sans structure) vous devez comprendre comment le faire correctement, pour cela vous devriez étudier comment préparer les données pour les règles associatives.
 

Bon travail, j'ai même trouvé quelque chose d'intéressant pour moi dans le cadre de la modification de la longueur de la fenêtre.

Si vous avez d'autres questions, n'hésitez pas à les esquisser, je vous les poserai après la nouvelle année.