Réseaux neuronaux - page 14

 
Oui, l'entraînement par rapport aux prévisions. J'ai construit un nouveau réseau avec les 6-7 premières années de données utilisées pour la formation, le test et la validation croisée. Je l'ai ensuite alimenté avec les 3 années de données restantes comme un test sans apprentissage, l'idée étant d'imiter un test réel. La ligne de régression de l'apprentissage avait une pente de 0,99995 et lorsque je l'ai alimenté avec environ 3 ans de données inédites, cette pente est tombée à 0,9995. Je ne sais pas trop comment interpréter ce résultat. Cela semble un peu trop précis pour quelque chose que j'ai mis en place en moins d'une heure.

Je vais vous l'expliquer à l'aide d'un exemple.

Disons que vous voulez prédire une variable qui peut avoir des valeurs de 100 à 250 /comme GBPJPY/. Vous voulez prédire de très petits pas de temps par rapport aux données d'entraînement /comme H1 ou H4/. Pour un certain pas, la valeur souhaitée est, disons, 174.850 et la sortie du NN est 176.350. L'erreur est très faible /environ 0,8%/ mais en termes de Forex, l'erreur est importante - 150 pips.

Il est beaucoup plus facile de prévoir un taux de rendement normal ou logarithmique. Même si vous faites une erreur, le résultat sera probablement toujours utile /si vous prédisez une augmentation de 20% du prix, et qu'elle est en réalité de 10%, même si l'erreur est de 50%, le résultat est toujours très bon/.

Si vous générez la première population au hasard, n'y a-t-il pas une chance que vous puissiez générer une population dans laquelle aucun programme ne résout le problème ?

C'est impossible.

Même si le NN donne une très mauvaise prédiction, il reste une solution.

Plus que ce qu'un ordinateur de bureau moyen pourrait gérer.

Vous pouvez utiliser un ordinateur de bureau. Les ordinateurs d'aujourd'hui sont bien meilleurs que ceux de mes débuts.

 

mrwobbles,

Auriez-vous l'amabilité de nous informer de vos entrées et sorties pour vos résultats NN ? J'aimerais l'exécuter à travers NeuroShell et voir si je peux générer un niveau de corrélation R autour de la même étanchéité. Merci d'avance.

 
Kazam:
Je vais vous l'expliquer à l'aide d'un exemple.

Disons que vous voulez prédire une variable qui peut avoir des valeurs de 100 à 250 /comme GBPJPY/. Vous voulez prédire de très petits pas de temps par rapport aux données d'entraînement /comme H1 ou H4/. Pour un certain pas, la valeur souhaitée est, disons, 174.850 et la sortie du NN est 176.350. L'erreur est très faible /environ 0,8%/ mais en termes de Forex, l'erreur est importante - 150 pips.

Il est beaucoup plus facile de prévoir un taux de rendement normal ou logarithmique. Même si vous faites une erreur, le résultat sera probablement toujours utile /si vous prédisez une augmentation de 20% du prix, et qu'elle est en réalité de 10%, même si l'erreur est de 50%, le résultat est toujours très bon/.

Oui, mais je parle d'erreurs d'un ordre de grandeur plus petit que cela. L'erreur moyenne en pips du réseau que j'ai formé est d'environ 10-20, ce qui est proche d'un niveau acceptable. Il y a quand même quelques résultats anormaux, quelques-uns de plus de 100 pips, ce qui est évidemment inacceptable.

C'est impossible.

Même si le NN donne une très mauvaise prédiction, c'est toujours une solution.

Oui, je suppose qu'on peut les appeler des solutions, mais le fait de commencer avec une population aléatoire ne conduirait-il pas à un temps de convergence plus long ? Dans ce cas, le fait de commencer avec une population de réseaux pré-entraînés accélérerait sûrement la convergence du réseau et, espérons-le, donnerait des résultats plus précis.

 
Oui, mais je parle d'erreurs d'un ordre de grandeur plus petit que cela. L'erreur moyenne en pips du réseau que j'ai formé est d'environ 10-20, ce qui est proche d'un niveau acceptable. Il y a quand même quelques résultats anormaux, quelques-uns de plus de 100 pips, ce qui est évidemment inacceptable.

Mais vous regardez toujours les données d'entraînement. J'ai fait un exemple rapide - regardez l'image ci-dessous. Les mesures d'erreur sont faibles, le coefficient de corrélation est très élevé, mais regardez ce qui se passe lorsque vous essayez de prédire les 10 prochaines étapes.

Oui, je suppose que l'on peut appeler cela des solutions, mais le fait de commencer avec une population aléatoire n'entraînerait-il pas un temps de convergence plus long ? Dans ce cas, le fait de commencer avec une population de réseaux pré-entraînés accélérerait sûrement la convergence du réseau et, espérons-le, donnerait des résultats plus précis.

L'aléatoire est la clé

Avec de nombreux réseaux aléatoires, vous avez plus de chances de trouver la meilleure solution possible au final. Regardez la deuxième image. Si vous effectuez une présélection de NN, vous risquez de rester bloqué à l'optimum local, mais si vous utilisez des NN aléatoires, vous avez plus de chances de trouver l'optimum global.

Bien sûr, il existe des moyens de surmonter le problème de l'enlisement dans l'optimum local.

Dossiers :
 

Cette idée m'a traversé l'esprit. Je veux dire que si la population de NNs pré-entraînés est trop petite ou avec une variance génétique insuffisante, certaines solutions pourraient ne pas être prises en compte. Comme vous l'avez dit, il y a toujours une chance de choisir 12 NNs qui sont tous coincés à des minima locaux différents et ce ne serait pas bon. Ou pire encore, 12 NNs qui sont tous coincés au même minimum local. Bien que vous puissiez toujours coder des mutations génétiques aléatoires pour essayer d'augmenter le stock génétique, toutes les 10 générations par exemple. Le fait de commencer avec une structure complètement aléatoire permettrait de s'assurer que la plupart des possibilités sont envisagées.

Ah je vois, ok je viens de découvrir comment utiliser le réseau après sa formation, la fonction sim apparemment... oh les joies des fichiers d'aide Vous devrez pardonner mon ignorance, je suis assez nouveau dans le travail avec les NNs. J'aurais été déçu si j'avais résolu le problème aussi facilement. C'est censé être ce que je vais faire pendant les vacances d'été et travailler.

Edit : J'ai entraîné le réseau sur les données des 7 premières années et ensuite simulé ses performances sur les données des dernières années. L'erreur moyenne en pips était de 40, mais si vous regardez le tracé du graphique, il obtient les 1500 premiers points assez bien, puis il le perd et commence à se tromper sur le prix, mais la direction est en grande partie correcte. Puis il atteint environ 10000 et il le reprend (juste à temps pour le grand crash). Jetez un coup d'oeil à ceci et dites-moi ce que vous en pensez. Le bleu foncé est la sortie de l'objectif bleu clair. En fait, je n'ai pas fourni au réseau les cibles qui ont été superposées pour l'analyse.

Dossiers :
gbpjpy60-4.jpg  40 kb
gbpjpy60-8.jpg  55 kb
 

Je ne peux rien dire en regardant les photos car il pourrait y avoir un "effet d'ombre" et les photos sont trop petites pour le dire.

Mais je peux vous dire comment vérifier si le NN est correct. Exportez (il y a un assistant d'exportation et d'importation dans Matlab) la sortie du test dans un fichier XLS ou CSV (fichier Excel). Ensuite, mettez les valeurs réelles à côté de la sortie du NN et dans la colonne suivante, mettez une formule qui vérifie si le NN a prédit la bonne direction du mouvement des prix.

En comptant combien de "1" vous obtenez, vous connaîtrez la précision du réseau.

Vous pouvez aussi écrire une formule qui calcule les profits et les pertes pour chaque étape. Regardez l'image ci-dessous /J'utilise la version polonaise d'Excel, donc je ne sais pas si j'ai bien écrit les formules /. Laissez tomber le spread pour l'instant.

Dossiers :
 

Salut Kazam,

İs-il possible d'implémenter ce paquet NN à Metatrader ?

Dossiers :
example.zip  106 kb
 

J'ai exécuté la formule dans le tableur d' Open Office et j'ai obtenu une précision de 73 % sur la direction des transactions. J'ai encore quelques entrées à donner au réseau qui, je pense, amélioreront la précision. Voici la feuille de calcul, je l'ai enregistrée au format xls, vous devriez pouvoir la lire.

Dossiers :
gj60.rar  831 kb
 

Dans l'échantillon, hors de l'échantillon

mrwobbles:
Il semble que ça pourrait être bon, j'ai exécuté la formule à travers le tableur Open Office et il a retourné 73% de précision sur la direction du commerce. J'ai encore quelques entrées à donner au réseau qui, je pense, amélioreront la précision. Voici la feuille de calcul, je l'ai enregistrée au format xls, vous devriez pouvoir la lire.

Bien... Dans l'échantillon ou hors de l'échantillon ?

Il y a une grande différence dans votre compte, 73% dans l'échantillon est un tueur de compte, 73% hors échantillon est un peut-être...

Essayez de ne croire que les résultats hors échantillon, et moins vous avez d'entrées, moins vous aurez d'overfitting... donc, si vous ajoutez de nouvelles entrées, pensez à supprimer certaines des anciennes... ou élargissez l'ensemble de données hors échantillon sur lequel vous allez forger vos croyances...

En règle générale : Moins d'entrées, moins de connexions, plus de points hors échantillon... meilleure généralisation.

Salutations

Simba

 

biddick

C'est une DLL, regardez ici :

http://www.metatrader.info/node/150[/CODE]

There's an example of how to use DLL functions in Metatrader.

mrwobbles

It's either the training data or you got something wrong - the results are to good .

If one could get an accuracy of 73% with a simple back propagation network no one would give a shit about more complicated stuff

SIMBA

You're right. Choosing the proper input is a the most important thing in the process of creating a NN /there's a rule "trash goes in, trash comes out" /.

But you can always use data mining tools to analyze many different variables and choose those that affect the one you want to predict.

There's a nice book about data minig /and about genetic algorithms, Bayesian classification etc./ - "Data Mining Methods and Models." by Daniel T. Larose. It also shows how to use WEKA /a free, open source software for machine learning/.

My preferred way is to use GA - for the propose of time series prediction I usually allow them to choose from 15-40 previous steps.

PS

I've mentioned using Bayesian probability for the classification tasks but it can also be used for time series prediction

[CODE]http://www.cis.hut.fi/juha/papers/ESTSPfinal.pdf
Raison: