L'Apprentissage Automatique dans le trading : théorie, modèles, pratique et trading algo - page 2032
Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
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.
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é.
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é.
Maintenant je comprends à quoi sert cette grille, il s'avère que c'est pour la compression. Et c'est plus rapide à trier.
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.
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 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.
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.
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
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.
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
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 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.