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

 
Renat Fatkhullin:

1) Malheureusement, vous avez formulé la question de manière incomplète et avez reçu une réponse polie, mal conçue et concise, du type "ça n'a pas d'importance".

Vous vouliez une réponse "donc d'accord/convention" en la formulant dans la question elle-même. Mais Duncan s'en est tiré avec "ce qui est juste" la première fois et l'a répété la deuxième fois.

2) Vous n'avez pas obtenu la confirmation de la précision dans R et n'avez pas obtenu de réponse quant à la raison pour laquelle le résultat est différent dans d'autres paquets. L'analyse de la question "pourquoi la réponse est différente dans d'autres paquets" est plus importante et est capable de révéler le sujet.


3) Notre position :

выражение для dgamma

(x)= 1/(s^a Gamma(a)) x^(a-1) e^-(x/s)

for x ≥ 0, a > 0 and s > 0


в точке 0 является неопределенным.

R pense que vous pouvez inclure ce point dans le calcul mais prendre les valeurs limites même si elles sont infinies comme dans le cas de dgamma(0,0.5,1).

Cependant, si l'on calcule les probabilités étant donné l'infini au point zéro, toutes les intégrales de dgamma deviennent formellement infinies et, selon cette logique, pgamma devrait être égal à l'infini pour toutes les valeurs de x.

Cependant, cela contredit les résultats de pgamma, où toutes les valeurs s'avèrent être finies. Ils sont corrects, car si au point x=0 la densité est supposée être 0.

1) Oui, je n'ai pas eu de réponse détaillée. Bien que je l'aie résumé... Je n'impose pas mon opinion, je suis aussi fatigué de me disputer, pour être honnête. J'attire votre attention sur le fait que les propos de cette personne reprenaient presque mot pour mot notre message original. La façon de déterminer la densité au point extrême n'est pas importante, l'essentiel est de calculer correctement les intégrales :

Nous déclarons que, strictement parlant, la densité de la distribution gamma au point zéro est indéfinie. Et en prenant la limite à droite, la densité est égale à un.

A la lumière de ces éléments, nous pensons que l'affirmation "erreurs de calcul dans R" n'est pas correcte. Plus précisément, c'est une question de convention : ce qui doit être considéré comme égal à l'expression zéro à la puissance zéro. L'égalisation de la densité de la distribution gamma à zéro au point zéro ne semble pas être une pratique conditionnelle.

2) Il n'a même pas été question de précision de ma part. La densité au point zéro n'est pas une question de précision ; il s'agit de la façon dont vous la déduisez à la suite de la fonction - non convergence (NaN) ou l'assimilez à la limite ou à zéro. Le point principal est que cela n'a pas d'importance pour le calcul de l'intégrale.

3) J'ai relu le texte corrigé de l'article. Et je suis heureux que vous ayez décidé de ne pas considérer le comportement de dgamma comme une erreur.

Mais ceci :

toutes les intégrales de dgamma deviennent formellement infinies et par cette logique pgamma devrait être égal à l'infini pour toutes les valeurs de x.

C'est étrange, Renat.

pgamma ne peut en principe pas être infini, puisque l'ingegral est limité par le haut par une valeur de 1.

Prenons la distribution normale. Il est défini sur [-inf,+inf]. Intégrale de la fonction de distribution = 1 sur tout cet intervalle. Mais d'une manière ou d'une autre, il s'avère que la sommation (intégration) de la densité sur un saport infiniment grand ne donne pas une somme infinie. Bien que la densité sur l'ensemble du support != 0 dans n'importe quelle région.

Et pour dgmamma le point x ==0 avec sa densité == inf (et au fait, vous n'avez pas considéré le cas où la densité tend vers 1 à ce point et quelles conclusions sur l'intégration vous en tirez...) combien de fois cela se produit-il ? Je dirais que ce n'est pas le cas. La probabilité de réaliser une variable aléatoire en tout point == 0 dans toute distribution continue... Tous les statisticiens le savent. On considère que la densité est une approximation de la probabilité pour une région infinitésimale autour de x.

Il découle de ce fait que, quelle que soit l'importance de la densité au point extrême, son effet sur l'ingral total = 0. Pensez-y...

Je pense que vous réfléchissez trop. ) Mais je ne vais pas discuter et trouver une solution. Peut-être qu'un jour je m'en rendrai compte et que je répondrai moi-même à la place de Duncan. )

Merci.

 

R est un système étonnant qui m'a personnellement ouvert les yeux sur la distance qui nous séparait, dans MetaTrader/MQL, des besoins réels de "rendre les calculs complexes simples et immédiats".

Nous (les développeurs C++) avons dans le sang l'approche "vous pouvez tout faire vous-même et nous vous donnons la base de bas niveau et la vitesse de calcul". Nous sommes fanatiques des performances et nous sommes bons dans ce domaine - MQL5 est excellent sur 64 bits.

Lorsque j'ai commencé à travailler moi-même sur R, j'ai réalisé que j'avais besoin d'un maximum de fonctions puissantes dans une ligne et de pouvoir faire des recherches en général.

Nous avons donc pris un tournant décisif et commencé à mettre à niveau MetaTrader 5 :

  • inclusion des bibliothèques mathématiques Alglib et Fuzzy précédemment réécrites dans la livraison standard, couvertes par des tests unitaires
  • développé un analogue de fonctions statistiques à partir de R, exécuté des tests et couvert par des tests. le travail est toujours en cours et la bibliothèque s'agrandit
  • développement de la première version bêta de la bibliothèque Graphics comme analogue de plot en R. ajout de fonctions à ligne unique pour une sortie rapide
  • a commencé à changer les interfaces dans les fenêtres de sortie du terminal pour permettre le traitement des données tabulaires, a changé la direction de la sortie, a ajouté la désactivation des colonnes inutiles, a changé la police en monospace dans la fenêtre de sortie de l'Expert Advisor
  • une puissante fonction ArrayPrint pour l'impression automatique des tableaux, y compris les structures, a été ajoutée.
  • Ajout des fonctions FileLoad et FileSave pour la sauvegarde/lecture rapide de tableaux sur un disque.


Bien sûr, nous sommes au début du chemin, mais le bon vecteur d'effort est déjà clair.

 

7 étapes d'intégration ne sont certainement pas suffisantes. En voici 1 000 :

> pgamma(0.8, 0.5, 1)
[1] 0.7940968

#а теперь велосипедное интегрирование:
> integration_steps <- seq(0, 0.8, length.out=1001)
> integration_result <- 0
> for(i in 2:length(integration_steps)){
+ integration_result <- integration_result + dgamma(integration_steps[i], 0.5, 1) * (integration_steps[i] - integration_steps[i-1])
+ }
> integration_result
[1] 0.7709089
#погрешность ~0.02, но тут способ уже проще некуда, и так сойдёт :) . Бесконечность при x=0 не мешает.
 
Alexey Burnakov:

1) Oui, je n'ai pas eu de réponse détaillée. Bien que je résumais... Je n'impose pas mon opinion, je suis aussi fatigué de me disputer, pour être honnête. J'attire votre attention sur le fait que les propos de cette personne reprenaient presque mot pour mot notre message original.

C'était une réponse polie, sans détail ni vérification. Et la réponse ne coïncide pas avec Wolfram Alpha et Matlab, ce qui est un problème.

Pas besoin d'éluder la question - la question de fond a été clairement énoncée.

 
Dr. Trader:


#погрешность ~0.02, но тут способ уже велосипедней некуда, и так сойдёт :) . Бесконечность при x=0 не мешает.

Intégrer la fonction 1/x, de 0 à 1, en incluant les points limites et comparer avec le résultat des calculs analytiques.

Wolfram dit que l'intégrale ne convergera pas à cause de la singularité à x=0.

 
Quantum:

Intégrer la fonction 1/x, de 0 à 1, en incluant les points limites et comparer avec le résultat des calculs analytiques.

Avec le même code - 7.485471. R est arrivé à 76.3342 et a dit qu'il n'irait pas plus loin, et que ce n'est pas un résultat exact, et incorrect. Wolfram a juste immédiatement dit que le résultat ne s'additionne pas, et n'a rien répondu.
La bonne réponse : je ne sais pas, combien ?

Ne me dites pas que puisque l'intégrale de 1/x ne peut pas être trouvée, l'intégrale de dgamma(x) ne peut pas non plus être trouvée. Les deux fonctions tendent vers l'infini en x -> 0+ , mais elles tendent à des vitesses différentes, et cette vitesse influence la possibilité de trouver l'intégrale ou non.

 

Il existe une fonction -log(x). Il tend vers l'infini à x->0. On peut le faire sans moins, mais alors il tend vers le bas, je ne suis pas à l'aise avec cela.

Et il a une intégrale de 0 à 1. L'infini n'interfère pas.


 
Renat Fatkhullin:

R est un système étonnant qui m'a personnellement ouvert les yeux sur la distance qui nous séparait, dans MetaTrader/MQL, du besoin réel de "faire maintenant des calculs complexes de manière simple et directe".

...

Nous avons donc pris un tournant décisif et commencé à mettre à niveau MetaTrader 5 :

  • inclusion des bibliothèques mathématiques Alglib et Fuzzy précédemment réécrites en standard, tests unitaires couverts
  • développé un analogue de fonctions statistiques à partir de R, exécuté des tests et couvert par des tests. le travail est toujours en cours et la bibliothèque s'agrandit
  • développement de la première version bêta de la bibliothèque Graphics comme analogue de plot en R. ajout de fonctions à ligne unique pour une sortie rapide
  • a commencé à changer les interfaces dans les fenêtres de sortie du terminal pour pouvoir travailler avec des données tabulaires. a changé la direction de la sortie, a ajouté la désactivation des colonnes inutiles, a remplacé la police par une police monospace dans la fenêtre de sortie de l'Expert Advisor
  • une puissante fonction ArrayPrint pour l'impression automatique des tableaux, y compris les structures, a été ajoutée.
  • Ajout des fonctions FileLoad et FileSave pour un chargement/déchargement rapide des tableaux sur le disque.


Bien sûr, nous sommes au début du voyage, mais le bon vecteur d'effort est déjà clair.

R, ainsi que de nombreux autres langages, est toujours plus adapté à l'apprentissage automatique que MQL, car il possède une fonctionnalité inhérente permettant de traiter les données dans des tableaux. Le fait est qu'un échantillon pour l'apprentissage automatique est le plus souvent un tableau de données à deux dimensions, et qu'il faut donc une fonction pour travailler avec des tableaux :

  1. Insertion de lignes et de colonnes sous forme de tableaux de plus petite dimension dans un autre tableau
  2. Remplacer les lignes et les colonnes d'un tableau par des tableaux de plus petite taille
  3. Suppression de lignes et de colonnes d'un tableau (par exemple, pour éliminer d'une sélection des prédicteurs sans importance ou des exemples présentant des "aberrations" évidentes).
  4. Diviser des tableaux en parties, ce qui donne deux tableaux ou plus qui sont des parties du tableau original (nécessaire pour diviser un échantillon en parties de formation et de test, ou en plusieurs parties, par exemple pour Walling Forward).
  5. Mélange aléatoire des lignes et des colonnes dans un tableau avec une distribution égale (il est nécessaire que ces exemples ou d'autres exemples de l'échantillon se retrouvent dans différentes parties, de préférence distribués de manière égale dans ces parties).
  6. Diverses fonctions pour le traitement des données par ligne ou par colonne (par exemple, le calcul de la moyenne arithmétique par ligne ou par colonne, la variance, ou la recherche de la valeur maximale ou minimale dans une ligne pour une normalisation ultérieure).
  7. Et ainsi de suite.

Tant que MQL n'aura pas implémenté les fonctions susmentionnées nécessaires à la manipulation des échantillons dans les tableaux, la plupart des développeurs d'algorithmes d'apprentissage automatique préféreront d'autres langages de programmation qui disposent déjà de tout cela. Ou bien ils utiliseront le MLP sans prétention (algorithme des années 1960) de la bibliothèque AlgLib où, si je me souviens bien, pour des raisons de commodité, les tableaux bidimensionnels sont représentés comme unidimensionnels.

Bien entendu, les fonctions pour les densités des distributions aléatoires sont également des fonctionnalités nécessaires. Mais ces fonctions ne sont pas toujours nécessaires dans les tâches d'apprentissage automatique, et dans certaines tâches, elles ne sont pas utilisées du tout. Mais les opérations avec les échantillons, comme avec les tableaux multidimensionnels, sont quelque chose dont l'implémentation des algorithmes d'apprentissage automatique ne peut se passer pour aucune tâche, à moins bien sûr qu'il ne s'agisse d'une tâche d'entraînement d'une grille pour apprendre les données normalisées connues à partir de CWR triviaux.

 
Renat Fatkhullin:

R est un système étonnant, qui m'a personnellement ouvert les yeux sur la distance qui nous sépare, dans MetaTrader/MQL, des besoins réels de "rendre les calculs complexes simples et immédiats".

Nous (les développeurs C++) avons dans le sang l'approche "vous pouvez tout faire vous-même et nous vous donnons la base de bas niveau et la rapidité des calculs". Nous sommes fanatiques des performances et nous sommes bons dans ce domaine - MQL5 est excellent sur 64 bits.

Lorsque j'ai commencé à travailler moi-même sur R, j'ai réalisé que j'avais besoin d'un maximum de fonctions puissantes dans une ligne et de pouvoir faire des recherches en général.

Nous avons donc pris un tournant décisif et commencé à mettre à niveau MetaTrader 5 :

  • inclusion des bibliothèques mathématiques Alglib et Fuzzy précédemment réécrites dans la livraison standard, couvertes par des tests unitaires
  • développé un analogue des fonctions statistiques à partir de R, exécuté des tests et couvert par des tests. le travail est toujours en cours et la bibliothèque s'agrandit
  • développement de la première version bêta de la bibliothèque Graphics comme analogue de plot en R. ajout de fonctions à ligne unique pour une sortie rapide
  • Nous avons commencé à modifier les interfaces dans les fenêtres de sortie des terminaux pour pouvoir travailler avec des données tabulaires. Nous avons changé la direction de la sortie, ajouté la désactivation des colonnes inutiles, changé la police de caractères en monospace dans la fenêtre de sortie du conseiller expert.
  • une puissante fonction ArrayPrint pour l'impression automatique des tableaux, y compris les structures, a été ajoutée.
  • ajout de FileLoad et FileSave pour écrire/lire rapidement des tableaux sur le disque.


Bien sûr, nous sommes au début du chemin, mais le bon vecteur d'efforts est déjà clair.

Il s'agit d'une évaluation équilibrée et étonnamment objective de R.

La partie constructive de la discussion n'a pas été gaspillée. Vous êtes à l'écoute des commentaires et des suggestions des utilisateurs R. Nous sommes également intéressés par l'amélioration de la plate-forme.

Bien sûr, vous n'en êtes qu'au début, mais dans tous les cas, les vaccins R renforceront le MCL.

Bonne chance dans votre travail.

 

En ce qui concerne les conventions dont parlait Burnakov.

Considérons trois cas très différents.

1. Division par une constante égale à zéro.

Dans R, nous avons le résultat

> 1/0
[1] Inf

Est-ce un résultat correct ?

Pour l'interpréteur, ce résultat doit être considéré comme correct, car nous ne pouvons pas terminer R

Pour le compilateur, ce résultat est correct. Lorsqu'une situation exceptionnelle se produit, l'exécution du programme est interrompue et le contrôle est donné pour gérer cette situation exceptionnelle, sinon il se plante.

Notez comme c'est différent !

2. Division par une variable, égale à zéro.

> a<-0
> 1/a
[1] Inf

A proprement parler, cette variante diffère de la précédente.

La fonction 1/a est continue partout sauf a=0. A ce point, la limite à gauche = -Inf, et la limite à droite = +Inf.

R ne comprend pas cela, mais vous pouvez l'accepter puisque la différence entre moins l'infini et plus l'infini a un sens en mathématiques, pas en code de programme.


3. Division de deux quantités infinitésimales dans leur aspiration vers zéro

> sin(a)/a
[1] NaN

La signification de NaN ne s'explique pas du tout pour moi. Mais il est tout à fait clair, au vu du point 2, que R ne comprend pas les limites en tant que telles.

S'agit-il d'erreurs de R en tant que système de programmation ? Je ne sais pas. Très probablement la documentation de R aurait dû informer de telles nuances, mais alors comment le mettre en œuvre avec un développement décentralisé à l'heure actuelle environ 130.000 fonctions ? En avons-nous besoin ?

Qu'est-ce qui en découle dans le sens de la discussion qui s'est engagée ?

Les décisions sont prises à terre.

1. nous prenons R et transférons carrément le code à MKL. En même temps, nous devons réaliser que les variantes mentionnées ci-dessus peuvent avoir des interprétations différentes dans différentes fonctions de R

2. déclarer des accords, quelles valeurs seront acceptées dans les cas que j'ai mentionnés (la liste peut être incomplète). Nous vérifions minutieusement le code R et s'il ne correspond pas à nos paramètres, nous le portons de R à MCL avec des corrections selon nos accords. Dans ce cas, grâce au développement centralisé, nous appliquons systématiquement les conventions adoptées et, en ce sens, nous avons un meilleur système.

Raison: