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

 
Mihail Marchukajtes:

Une erreur n'est pas seulement une erreur. Une petite erreur peut avoir un impact important.

Et on ne demande pas à NS de saisir des données répétitives. On lui demande d'identifier des modèles cachés afin d'obtenir le bon résultat en l'absence de données répétitives. Comprendre la généralisation. Lorsque nous avons un domaine fini de données, mais que nous ne disposons que de 50% de ces données. Le réseau apprend et l'identification d'un modèle peut construire le reste des données qu'il n'a pas vues. C'est comme la reconstruction d'une vieille séquence vidéo avec des pixels manquants que le réseau reconstruit lui-même.

Il s'agit donc d'une approche statistique ! Par exemple, j'ai 20 photos de triangles différents. Sur le 21ème, il manque l'hypoténuse dans le triangle. Je peux facilement déterminer qu'il s'agit d'un triangle non dessiné, sur la base des statistiques recueillies - (il y a un triangle dans chaque photo). C'est-à-dire qu'une erreur dans le dessin du triangle n'est pas critique, car je dispose déjà des statistiques dans leur ensemble. Ce principe ne fonctionne-t-il pas avec les NS ?
 
Tag Konow:
C'est une approche statistique ! Par exemple, j'ai 20 photos de triangles différents. Sur le 21ème, il manque l'hypoténuse dans le triangle. Je peux facilement déterminer qu'il s'agit d'un triangle non dessiné sur la base des statistiques recueillies - chaque photo contient un triangle. En d'autres termes, une erreur dans le dessin du triangle n'est pas critique pour moi, car je dispose déjà de statistiques en général. Ce principe ne fonctionne-t-il pas avec les NS ?
Eh bien, en gros, si l'on ne considère pas que sur 21 photos, il n'y a qu'un coin dessiné et que le triangle n'est pas envisageable...
 
Mihail Marchukajtes:
Enfin, en gros, sauf si l'on compte que dans les 21 photos, il n'y a qu'un coin dessiné et qu'il n'y est pas question de triangle...
C'est ainsi que fonctionne une prédiction basée sur des statistiques. Je prédis qu'il s'agit d'un triangle non dessiné qui deviendra creux sur la prochaine photo.
 
Je vais vous dire ceci. Tout vient avec l'expérience, et dans le MoD il y a deux types d'expérience, théorique et pratique, et elles sont très différentes, croyez-moi. Plus on pratique, plus on commence à comprendre la philosophie du domaine. C'est ça, aller chercher des pommes de terre en auto-isolement ressemble à une quête :-)(
 

Pour comprendre l'essence et la base théorique des réseaux neuronaux, la connaissance de la théorie de Kolmogorov, Arnold et Hecht-Nielson est essentielle.

Pour la pratique, cette connaissance n'est pas particulièrement nécessaire, mais une compréhension générale de celle-ci ne ferait pas de mal.

 
elibrarius:

Je vous ai donné un lien pour voir les splits à partir des données du JOT. C'est là que le modèle complet est téléchargé dans un fichier. Ensuite, les splits sont lus à partir de celui-ci.

Les arbres déjà asymétriques peuvent sûrement être déchargés ?


elibrarius:

Dans le boosting, par définition, tous les arbres sont importants. Chaque arbre successif affine tous les précédents. Si vous éliminez un arbre au milieu, tous les arbres suivants fonctionneront avec des données erronées - ils doivent être réentraînés, sans tenir compte de l'arbre éliminé. Dans ce cas, le premier arbre sera une réplique très fidèle de celui qui a été écarté.

Non, ce n'est pas tout à fait vrai. Lorsque le modèle est prêt, on y trouve un tas de feuilles d'arbre, ce qui donne une probabilité proche de 0,5 - ce qui, par essence, n'est rien.


elibrarius:

Oui. Les feuilles individuelles du binning sont incomplètes, car elles sont complétées par les réponses des feuilles d'autres arbres de raffinage. Et seul le cumul des réponses, par exemple 100 arbres, donne la bonne réponse.

Essayer d'obtenir quelque chose de fiable à partir d'une seule feuille du modèle de dynamisation est impossible.
Dans le boosting, les 100 réponses de 100 arbres sont additionnées, chacune donnant par exemple 0,01 au total = 1. La valeur de 1 feuille = 0,01 - que voulez-vous en tirer ? Il n'y a rien dedans. Seule la somme de 100 feuilles donnera la bonne réponse.
En effet, là le 1er arbre est fort et donne par exemple 0,7, les autres ramènent la somme plus proche de 1. Si l'on ne considère que les feuilles du premier arbre séparément, mais je pense qu'elles sont plus faibles que n'importe quel arbre de la forêt aléatoire, en raison d'une profondeur moindre.
Dans une forêt aléatoire, on trouve la moyenne, par exemple chaque feuille de 100 arbres = 1, la moyenne aussi = 1. Dans cette forêt, les renards sont complets, mais avec des écarts aléatoires. Mais une foule de 100 réponses, donne la moyenne comme une réponse raisonnablement précise.

Il est possible d'obtenir des informations utiles à partir d'un seul arbre, mais c'est rare.

Même le premier arbre ne sera pas le meilleur.

La dynamisation est rapide, mais il faut sélectionner soigneusement les modèles, ce qui nécessite un grand échantillon, ce qui pose problème.

 
Aleksey Nikolayev:

Pour comprendre l'essence et la base théorique des réseaux neuronaux, la connaissance de la théorie de Kolmogorov, Arnold et Hecht-Nielson est essentielle.

Pour la pratique, cette connaissance n'est pas particulièrement nécessaire, mais une compréhension générale de celle-ci ne ferait pas de mal.

Spc.

L'absence de théorie rigoureuse relative à ces modèles de réseaux neuronaux n'empêche pas d'étudier les possibilités de leur application à des problèmes pratiques.

 
Aleksey Vyazmikin:

Les arbres déjà asymétriques peuvent sûrement être déchargés ?

J'ai essayé un exemple, en ajoutant grow_policy='Lossguide'.
Voici un morceau de modèle contenant des fentes :

'split': {'border': 16.049999237060547, 'float_feature_index': 1, 'split_index': 0, 'split_type': 'FloatFeature'}}, 'right': {'left': {'value': 0.05454545454545454, 'weight': 153}, 'right': {'value': 0.8265895953757225, 'weight': 161}, 'split': {'border': 5.999999046325684, 'ctr_target_border_idx': 0, 'split_index': 4, 'split_type': 'OnlineCtr'}}, 
'split': {'cat_feature_index': 1, 'split_index': 1, 'split_type': 'OneHotFeature', 'value': -845129958}}, {'left': {'left': {'value': -0.43103007753084105, 'weight': 444}, 'right': {'value': -0.10906568919445614, 'weight': 133}, 'split': {'border': 6.999999046325684, 'ctr_target_border_idx': 0, 'split_index': 2, 'split_type': 'OnlineCtr'}}, 'right': {'left': {'value': 0.02835585997337218, 'weight': 163}, 'right': {'value': 0.5713236394502054, 'weight': 151},
'split': {'border': 5.999999046325684, 'ctr_target_border_idx': 0, 'split_index': 3, 'split_type': 'OnlineCtr'}}, 
'split': {'cat_feature_index': 1, 'split_index': 1, 'split_type': 'OneHotFeature', 'value': -845129958}

Il y a aussi des scissions avec Depthwise. Mais c'est sur Python, je n'ai pas vu de moyen de décharger le modèle sur R. Mais je pense qu'il est possible d'enregistrer un modèle dans R au format interne, de l'ouvrir dans Python et de le décharger en JSON. Et à partir de tout cela, vous devez utiliser

 
Collègues. Le sujet est intéressant, mais je ne comprends pas la différence entre l'apprentissage automatique et la simple optimisation des paramètres dans un testeur ? Après tout, l'objectif sera à peu près le même - prendre la décision d'entrer (sortir) du marché lorsque les paramètres d'entrée (sortie) coïncident. Les deux méthodes cessent de fonctionner lorsque le marché change fortement. Ils doivent être ré-entraînés et optimisés. En bref et sans philosophie.
 
Yan Barmin:
Collègues. Le sujet est intéressant, mais je ne comprends pas la différence entre l'apprentissage automatique et la simple optimisation des paramètres dans un testeur ? L'objectif sera approximativement le même - prendre une décision sur l'entrée (la sortie) du marché lorsque les paramètres d'entrée (de sortie) coïncident. Les deux méthodes cessent de fonctionner lorsque le marché change fortement. Ils doivent être ré-entraînés et optimisés. En bref et sans philosophie.

La différence réside dans la flexibilité de l'outil. Le réseau neuronal peut s'adapter à n'importe quelle série. Regardez le polynôme ci-dessous. La largeur des coefficients ainsi que leur nombre peuvent être absolument différents.

double getBinaryClassificator1(double v0, double v1, double v2, double v3, double v4, double v5, double v6, double v7, double v8, double v9, double v10) {
   double x0 = 2.0 * (v0 + 2.6721302849319) / 5.70376880500565 - 1.0;
   double x1 = 2.0 * (v1 + 0.862195874260524) / 4.318953971518134 - 1.0;
   double x2 = 2.0 * (v2 + 0.636958350251177) / 2.893126110958697 - 1.0;
   double x3 = 2.0 * (v3 + 1.28131145039971) / 4.47439455086403 - 1.0;
   double x4 = 2.0 * (v4 + 1.40655622673661) / 3.84454848827483 - 1.0;
   double x5 = 2.0 * (v5 + 1.05792133319783) / 4.0361119526354905 - 1.0;
   double x6 = 2.0 * (v6 + 0.960632890559664) / 2.810809591513934 - 1.0;
   double x7 = 2.0 * (v7 + 2.50474545671368) / 4.50657217846072 - 1.0;
   double x8 = 2.0 * (v8 + 3.37124943164126) / 5.00153555828254 - 1.0;
   double x9 = 2.0 * (v9 + 1.01434366581359) / 3.81959911946484 - 1.0;
   double x10 = 2.0 * (v10 + 0.997401251919643) / 2.959840023725593 - 1.0;
   double decision = 0.0455519244734931 * sigmoid(x0 + x5 + x8)
  + 0.01733841684822077 * sigmoid(x5 + x7 + x8)
  + 0.21269063180827888 * sigmoid(x0 + x5 + x7 + x8)
  + 0.02875816993464052 * sigmoid(x0 + x8 + x9)
  -0.025853304284676835 * sigmoid(x0 + x4 + x8 + x9)
  + 0.021169208424110384 * sigmoid(x0 + x7 + x10)
  + 0.07184095860566449 * sigmoid(x0 + x8 + x10)
  + 0.03769063180827887 * sigmoid(1.0 + x0 + x3 + x5 + x8)
  -0.03179012345679012 * sigmoid(1.0 + x3 + x6 + x9)
  + 0.02750544662309368 * sigmoid(1.0 + x0 + x5 + x7 + x9)
  + 0.1463507625272331 * sigmoid(1.0 + x1 + x2 + x8 + x9)
  + 0.012799564270152506 * sigmoid(1.0 + x0 + x2 + x10)
  + 0.1864560639070443 * sigmoid(1.0 + x0 + x1 + x5 + x8 + x10)
  + 0.07494553376906318 * sigmoid(1.0 + x0 + x2 + x5 + x8 + x10)
  + 0.014669571532316631 * sigmoid(1.0 + x2 + x5 + x6 + x8 + x10)
  + 0.05266884531590414 * sigmoid(1.0 + x0 + x1 + x7 + x8 + x10)
  + 0.04566085693536674 * sigmoid(1.0 + x0 + x1 + x2 + x8 + x9 + x10)
  + 0.061546840958605666 * sigmoid(1.0 + x0 + x2 + x4 + x8 + x9 + x10);
   return decision;
}

Imaginez maintenant le nombre de variantes, aucun conseiller expert multi-paramètres ne peut se targuer d'une telle flexibilité. On dit aussi qu'ils sont capables de généraliser, mais ce n'est pas certain :-)