L'apprentissage automatique dans la négociation : théorie, modèles, pratique et algo-trading - page 2032

 
Rorschach:

Pour une forêt, il y a une option pour regarder l'importance et les clusters. Dans catbust, il s'agit probablement de plot_tree.

Je vais préparer les données et les poster.

J'ai fait une version de test pour 6 colonnes, ça a pris 11GB. Notepad++ n'a pas pu l'ouvrir, il dit que le fichier est trop gros. BD Browser for SQLite est suspendu depuis environ 20 minutes.

Montrez une image de ce à quoi ressemblent les grappes d'arbres, je ne comprends pas encore ce que vous voulez dire.

Pourquoi l'ouvrir ? :) Je fais juste une mini copie avec une structure similaire pour le débogage.

 
elibrarius:

Je me demande comment ils forment les arbres sans prendre toutes les données en mémoire. Si la table fait 6 gigaoctets, il faut utiliser environ 6 gigaoctets de mémoire. L'arbre doit trier chaque colonne dans son ensemble. Si on ne met pas tout en mémoire, mais qu'on lit à chaque fois les données sur le disque, ce sera trop lent.
La seule variante consiste à conserver les données en mémoire dans le type float au lieu de double, mais cela réduira la précision. Pour nous, avec une précision de 5 chiffres, ce n'est peut-être pas si mal, mais catbust est un logiciel universel, je pense que les problèmes physiques et mathématiques devraient être résolus en double précision.

Je n'ai pas étudié le code, mais si vous y pensez logiquement, CatBoost convertit probablement la table de données d'échantillon et stocke exactement la variante convertie, ce qui se prête à une compression rapide.

La transformation se fait sur une grille de quantification de chaque prédicteur (6 algorithmes sont disponibles), et, par exemple, à partir de 1000 valeurs différentes d'une variable, il reste 32 variantes (tombant dans la plage d'une grille de quantification) et un tel vecteur de données est facilement compressé, d'ailleurs les chiffres ne sont déjà que des entiers (à en juger par les restrictions de la taille d'une grille - type de données ushort - 2 octets sur le nombre), et la table de quantification se trouve simplement en mémoire et est déjà utilisée à la création du modèle dans un code. Nous avons déjà réduit la taille, et il est possible de réduire encore le volume en choisissant non pas tous les prédicteurs pour l'évaluation, mais une partie d'entre eux, ce qu'il est recommandé de faire avec de grands échantillons, car l'algorithme du randomiseur permet d'utiliser dans d'autres arbres les prédicteurs qui ne sont pas entrés dans le "sac" en même temps. Il existe certainement d'autres astuces, mais la principale est la quantification.

La quantification doit être considérée séparément, l'idéal étant que chaque prédicteur soit associé à sa propre grille et que les données soient soumises à l'apprentissage avec la grille, ce qui permet à l'algorithme de le faire.

Ainsi, l'échantillon peut être auto-quantifié et il sera bien compressé.

 
Aleksey Vyazmikin:

Je n'ai pas étudié le code, mais si vous y pensez logiquement, CatBoost transforme probablement la table de données d'échantillon et stocke exactement les variantes transformées, qui se prêtent à une compression rapide.

La transformation se fait sur une grille de quantification de chaque prédicteur (6 algorithmes sont disponibles), et, par exemple, à partir de 1000 valeurs différentes d'une variable, il reste 32 variantes (tombant dans la plage d'une grille de quantification) et un tel vecteur de données est facilement compressé, d'ailleurs les chiffres ne sont déjà que des entiers (à en juger par les restrictions de la taille d'une grille - type de données ushort - 2 octets sur le nombre), et la table de quantification se trouve simplement en mémoire et est déjà utilisée à la création du modèle dans un code. Nous avons déjà réduit la taille, et il est possible de réduire encore le volume en choisissant non pas tous les prédicteurs pour l'évaluation, mais une partie d'entre eux, ce qu'il est recommandé de faire avec de grands échantillons, car l'algorithme du randomiseur permet d'utiliser dans d'autres arbres les prédicteurs qui ne sont pas entrés dans le "sac" en même temps. Il existe certainement d'autres astuces, mais la principale est la quantification.

La quantification doit être considérée séparément, l'idéal étant que chaque prédicteur soit associé à sa propre grille et que les données soient soumises à l'apprentissage avec la grille, ce qui permet à l'algorithme de le faire.

C'est pourquoi l'échantillon peut être quantifié par lui-même et il sera bien compressé.

Oui, je me souviens, je crois qu'il y a une grille par défaut de 1024 variantes. Si vous remplacez toutes les données par des nombres fractionnés, vous pouvez stocker au format ushort, ce qui représente 2 octets au lieu de 8, soit une compression 4 fois supérieure. C'est probablement pour ça que vous avez utilisé 2 Go au lieu de 6.
Maintenant je comprends à quoi sert cette grille, il s'avère que c'est pour la compression. Et c'est plus rapide à trier.
Документация по 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:
C'est vrai, je me souviens, il semble avoir une grille par défaut de 1024 variantes fractionnées. Si vous remplacez toutes les données par des nombres fractionnés, vous pouvez stocker au format ushort, ce qui représente 2 octets au lieu de 8, soit une compression 4 fois supérieure. C'est probablement pour ça que tu avais 2 Go au lieu de 6 et que tu l'as utilisé.

La valeur par défaut est de 254, mais je ne me souviens pas de la valeur que j'ai fixée alors. La consommation de mémoire était probablement inférieure à 2 Go - je me souviens avoir été très surpris que ce soit si peu.

Quoi qu'il en soit, cette approche permet de compresser de manière significative les données, voire l'échantillonnage lui-même. Vous ne pouvez pas faire ça avec les réseaux neuronaux.

elibrarius:
Maintenant je comprends à quoi sert cette grille, il s'avère qu'elle sert à la compression. Et il est plus rapide de le trier.
La grille permet également un ajustement moindre, car une gamme de valeurs est utilisée. Mais cela ne sera pas toujours bon - pour attraper les niveaux théoriques, je pense que vous devez couper la grille vous-même.
 
Aleksey Vyazmikin:

La valeur par défaut est de 254, mais je ne me souviens pas de la valeur que j'ai fixée alors. La consommation de mémoire était probablement inférieure à 2 Go - je me souviens avoir été très surpris qu'elle soit si faible.

Vous pouvez utiliser uchar alors, c'est 1 octet.

Aleksey Vyazmikin:
La grille permet de s'adapter à moins de choses, parce que la gamme de valeurs est utilisée. Mais ce n'est pas toujours bon, pour attraper des niveaux théoriques, il faudrait couper la grille soi-même.


La valeur maximale en ushort est de 65 mille - si vous définissez une telle grille, vous ne devez pas vous en préoccuper manuellement.

 
Maxim Dmitrievsky:

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

il n'est pas certain qu'il s'agisse d'une bonne mise en œuvre ;)

Je vais passer sur le russe.

J'ai lu celui-là)))) c'est plein d'erreurs dans les calculs et le réseau donne des réponses plutôt aléatoires

 
elibrarius:

Vous pouvez alors utiliser uchar , qui correspond à un octet.


En ushort la valeur maximale est de 65k - si vous définissez une telle grille, vous n'avez pas à vous en soucier manuellement

Leur taille maximale est de65535, mais je ne peux pas affecter les variables dans le code.

Quant à la taille maximale, non, elle ne garantit pas le résultat, car elle peut être adaptée à la bande de données et sauter celles qui en sont proches.

En général, il est bon de disposer d'un algorithme d'apprentissage qui vérifie toujours le caractère raisonnable de la division de fermeture (A>10 && A<=15), mais cela se produit généralement de manière aléatoire - il n'y a pas de condition obligatoire, bien qu'elle soit parfois reproduite.

 
Alexander Alexeyevich:

J'ai lu celui-ci)))) il y a beaucoup d'erreurs dans les calculs et le réseau donne des réponses plutôt aléatoires

Voulez-vous écrire le réseau vous-même ?

Vod ici est un minimum de mots et un maximum de code en python, mais aussi en anglais.

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:

Voulez-vous écrire le réseau vous-même ?

Il y a un minimum de mots et un maximum de code en Python, mais aussi en anglais.

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

Oui, je veux le faire moi-même), car tous les articles et exemples ne comptabilisent pas correctement les fonctions d'activation, par exemple la fonction sigmoïde est toujours supposée être 1/1+exp(-x). J'ai besoin de 1.0/1.0+exp(-x). Cela semble être la même chose, mais le terminal donne des calculs différents (voir si vous avez les mêmes calculs) d'où les erreurs.
 
Alexander Alexeyevich:
Oui, je veux le faire moi-même) car dans tous les articles, les exemples de fonctions d'activation sont comptés de manière incorrecte) par exemple la sigmoïde est comptée comme 1/1+exp(-x) partout. J'ai besoin de 1.0/1.0+exp(-x). Cela semble être la même chose, mais le terminal donne des calculs différents (voir si vous avez les mêmes calculs) d'où l'erreur.
L'écriture de réseaux neuronaux dans le terminal n'est pas du tout une option. Vous pouvez remarquer qu'une fonction peut soudainement fonctionner d'une manière différente de celle attendue. Utilisez un produit déjà testé
Raison: