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

 
Dr. Trader:

les tableaux peuvent être réunis à l'aide de la fonction rbind().
MLP1 <- rbind(Train1, Test)

Qu'est-ce que Test(Train2) ? Et pourquoi le tableau de formation et le tableau de test devraient-ils être combinés ? Le test doit être séparé, afin de tester le modèle entraîné sur celui-ci.

Tout ne se passera pas aussi facilement et rapidement que vous le souhaitez. En effet, dans le modèle de Reshetov, il suffit de fournir les données et le modèle se charge lui-même de trier les prédicteurs, de déterminer les poids, le nombre de neurones, etc. Mais vous ne pouvez pas le faire avec un neurone ordinaire, vous devez sélectionner les paramètres du neurone par validation croisée, par exemple comme dans l'exemple que j'ai écrit ici aujourd'hui, ou comme dans les articles de Vladimir Perervenko.


Regardez à nouveau ce que j'ai écrit là -https://www.mql5.com/ru/forum/86386/page753#comment_6821981
Il suffit de coller vos données dans ce code comme décrit, et de l'exécuter. Si tous les prédicteurs sont pris un par un et non éliminés, dès la première fois, ce sera probablement trop mauvais. Après avoir exécuté le code, exécutez la commandemax(gaResult@fitness) en plus, cela montrera le score R2 du meilleur modèle trouvé par la génétique. Si l'estimation est proche de 1 ou un peu moins, c'est bien, si elle est proche de 0 ou même négative, c'est mauvais.

Ensuite, dansPREDICTOR_COLUMNS, spécifiez le nombre exact de colonnes que vous avez identifiées comme bonnes, et exécutez à nouveau le code, le modèle sera entraîné sur ces prédicteurs uniquement. Idéalement, la meilleure évaluation du modèle par la génétique devrait être proche de 1 et la précision sur la table d'entraînement et de test devrait être de 1,00.

Le tableau de test doit être chronométré strictement après les données d'entraînement, comme si ce modèle était déjà en train de négocier sur le marché.

Si rien de bon ne se produit avec ce code (même avecKFOLDS=10) - alors il n'est pas bon. Si cela fonctionne, alors il y a une bonne alternative au modèle de Reshetov et nous pouvons continuer à traiter ce code et porter le modèle à mql.

En fait, il n'y a que deux sections Train1 et Test1

Le réseau A apprend de Train1 et est échantillonné par Test1.

NetB apprend de Test1 et est échantillonné sur Train1

Quand on additionne les deux parcelles. NetworkA apprend Test1, NetworkB apprend Trine1, nous obtiendrons les résultats d'apprentissage pour l'ensemble du graphe d'apprentissage, mais ce graphe sera un graphe de test. C'est le point de vue de Reshetov. Je ne sais pas, comme vous m'avez suggéré de vérifier sur ...... kFold divise les parcelles d'une manière ou d'une autre : ..... pas clair.....

 

Je ne veux pas répéter le résultat de Reshetov, je veux organiser l'IA comme la sienne. La façon dont il forme le comité. Il est clair que la formation elle-même sera des moyens déjà disponibles, mais l'organisation, peut jouer un rôle important.....

Je vais essayer d'exécuter votre script sur mes données, voir ce qu'il en ressort...

 

Je vois, c'est presque la même chose. Dans l'exemple de Reshetov, les lignes sont prises une par une (formation sur les lignes paires, test sur les lignes impaires), mais dans mon exemple, les lignes sont divisées en groupes dans une rangée (formation sur les lignes 1-100, test sur les lignes 101-200). C'est mieux pour le forex, au moins une vérification du fait que le modèle peut fonctionner dans un autre intervalle de temps, inconnu de lui.

Un partitionnement de type Reshetov peut également être effectué, alors dans la fonctionelemnn_kfold erase

split2 <- function(x,n) split(x, cut(seq_along(x), n, labels = FALSE)) #функция  которая поделит строки таблицы на число кусков согласно KFOLDS
folds <- split2(1:nrow(x), KFOLDS) #номера  строк для обучения в каждом фолде

et insérer à la place

folds <- list()
folds[[1]] <- c(which(y==1)[c(T,F)], which(y==0)[c(T,F)])
folds[[2]] <- c(which(y==1)[c(F,T)], which(y==0)[c(F,T)])

et assurez-vous de changer le nombre de plis à 2 -KFOLDS=2, sinon des erreurs apparaîtront.

 

Il faut seulement comprendre que "training" et "test" dans le qufold de validation croisée sont des contrôles imbriqués. Il y a une table de formation, qui est divisée en plusieurs parties, et ces parties seront soit de formation soit de test, et les modèles dans la boucle apprennent d'une partie et prédisent d'autres, pour s'assurer qu'avec ces paramètres le modèle est capable d'apprendre et de prédire quelque chose sur de nouvelles données pour lui.

Et il y a une table de test séparée qui n'est plus impliquée dans cette validation croisée. Il attend simplement que le modèle soit complètement entraîné pour le vérifier, comme un test dans un walk-forward simulant le trading réel.
Et si le roll forward donne des résultats normaux à chaque test lorsque les fenêtres de formation et de test sont décalées dans le temps, alors le dernier modèle formé n'est pas testé sur une table de test séparée, mais va au terminal pour être négocié.

 
C'est ça, un échantillon de contrôle, qui peut être un site OOS. Formé, testé. Jeté dans le commerce. Je le pense personnellement......
 
Mihail Marchukajtes:
C'est ça, un échantillon de contrôle, qui peut être une section OOS. Formé, testé. Ils ont été formés, testés, et ensuite ils les ont lancés dans le commerce. Je le pense personnellement......

Mais cela soulève la question. Comment choisir un modèle sans parcelle de contrôle. Entraîné, reçu des résultats sur la validation croisée, dit que c'est le modèle qui va marquer, le mettre sur le real !!!!!.

J'ai l'habitude de faire une mire en un jour, c'est 3-4 signaux..... en tenant compte de deux semaines de travail, pas une grosse perte.......

 
J'ai exécuté votre script avec les changements ci-dessus. Il ne donne aucune erreur et s'entraîne même, mais il n'affiche aucun graphique pendant l'entraînement. Quoi qu'il en soit, je vois le résultat sous la forme d'une erreur. Je vais refaire mes modèles, puis revenir à ce script. Dès que les ensembles de formation seront formés, nous continuerons à le faire.....
 

À : Dr. Trader.

Je n'ai pas pris la peine d'analyser le scénario en détail, vous l'écrivez de manière très "décousue". Eh bien, chacun a son propre style. Mais voici quelques points importants. L'application ELM comporte un certain nombre de fonctionnalités :

  • plus vous donnez d'exemples à ELM en formation, moins il est sensible au bruit (par expérience, au moins 2000)
  • dans un ensemble de réseaux neuronaux ELM, il faut en avoir plus de 100 pour obtenir un résultat correct (par expérience, il vaut mieux prendre une certaine redondance et la trier plus tard).
  • la fusion appliquée par vous par simple vote donne un résultat pire que la moyenne. C'est à la discrétion du développeur.
  • seet.seed ne fournit pas la répétabilité et la diversité nécessaires lors de l'optimisation des hyperparamètres. Jetez un coup d'œil aux commentaires de l' article. Là, elibrarius a testé cette idée par l'expérience. Ce n'est qu'en forçant le RNG à un état contrôlé à chaque initialisation d'un réseau neuronal que vous obtiendrez de véritables résultats d'optimisation. Pour ma part, il est préférable d'utiliser l'optimisation bayésienne. Donne un bon choix d'hyperparamètres.
Bonne chance

 

Merci pour les commentaires, je les garderai à l'esprit.

J'ai ajouté un lien vers votre dernier article à la fin du texte. Ceux qui veulent avoir une compréhension plus sérieuse de l'OrmNN feraient mieux d'aller directement lire l'article.


Vladimir Perervenko:

La fusion par simple vote que vous utilisez donne de moins bons résultats que le calcul de la moyenne. Bien que ce soit à la discrétion du développeur.

il y a en fait deux façons de faire des prévisions d'ensemble :

1) la fonction elemnn_kfold_predict() - la moyenne arithmétique des résultats de régression de chaque modèle est prise en compte

2) function elemnn_kfold_predict_reshetovstyle() - Je l'ai ajouté pour Mikhail pour ses expériences, cette façon de combiner les résultats d'ensemble est utilisée dans la neuronique de Reshetov. Classification uniquement. Il compare les résultats de tous les modèles, et ne donne une réponse avec une classe particulière que si tous les modèles ont donné la même prédiction. Si au moins un modèle a donné une prédiction différente des autres, la fonction renvoie une prédiction de "ne sait pas".

 
Vous avez déjà obtenu un résultat ? Où est le conseiller ?