Trouver un ensemble d'indicateurs pour alimenter les entrées du réseau neuronal. Discussion. Un outil d'évaluation des résultats. - page 5

 
joo писал(а) >>

Pourquoi ne peut-on pas les voir ? Les différences sont visibles. Il n'y a pas de sursaturation des neurones lorsque la bonne plage de recherche est choisie. "Tu ne sais juste pas comment les cuisiner."(c) :)

L'optimalité des outils varie en fonction de la complexité des tâches, comme vous l'avez remarqué à juste titre (tournevis).

Sur le sujet de la sélection de la gamme est très discutable. GA est très long, beaucoup plus long que le BGC - un autre inconvénient.

Il est intéressant de connaître votre technique de sélection d'une gamme, ou ce qui vous guide.

joo a écrit >>

Il y aura différents outils optimaux pour différentes complexités, comme vous le soulignez à juste titre (tournevis).

GA n'est pas pour les NS. Car le NS-th a ses propres méthodes d'entraînement (optimisation). Au moins simplement parce que vous ne pouvez pas utiliser le CV comme avec le BGC.

 
rip >> :

Correct, l'algorithme génétique n'utilise pas la fonction d'erreur pour ajuster les poids.

D'après ce que j'ai compris, vous pourriez majorer le m5 du profit maximum qui peut être réalisé sur l'historique et utiliser cette majoration comme fonction de fitness.

C'est exactement à ça que ressemble la fonction par laquelle vous estimez un individu.

>> donc :)

 public double evaluate( IChromosome a_subject) {
        this. NNWeights=new double[ a_subject. size()]; //создаем вектор весов для нейросети
        for (int i=0; i<this. NNWeights. length; i++)
        {
            DoubleGene g= ( DoubleGene) a_subject. getGene( i);
            this. NNWeights[ i]= g. doubleValue(); //заполняем вектор весов для нейросети
        }
        net. SetWeights(this. NNWeights); //устанавливаем веса нейросети
        Trade trade =new Trade();
        for ( int i=0; i<this. csv. CSVInputs. length; i++)
        {
            trade. TradeCurrentSignal( net. ComputeForOneNeuronOutLayer(this. csv. CSVInputs[ i]),this. csv. CSVPrice[ i]);
        }
        
      return 1000000+ trade. Profit; //целевая функция должна быть >0
    }
 
rip >> :

C'est une question d'erreur d'échantillonnage du test. C'est-à-dire que vous prenez le mois suivant après l'échantillon de formation. Vous le marquez en fonction de votre algorithme. Vous envoyez les sorties au réseau formé. Vous comparez les résultats. C'est exactement le graphique de ces erreurs qui nous intéresse.


Vous pouvez également obtenir le graphique d'erreur de l'échantillon d'entraînement et estimer le processus d'apprentissage de votre réseau (ou le développement des générations dans l'algorithme génétique).

Lors de l'entraînement, j'apprends jusqu'à ce que la fonction cible augmente ou jusqu'à ce que je m'ennuie (dans le temps). je m'occupe indirectement du recyclage - l'échantillon d'entraînement est beaucoup plus grand que les poids dans le réseau neuronal. ensuite, je décharge vers .mq4 ( ici, il peut y avoir une erreur...). Je teste ... tout fonctionne correctement) et regarder avec le testeur de stratégie MT4 ce qu'il en résulte.

"comparer le résultat" - c'est la partie de votre pensée que je ne comprends pas... Je ne comprends pas cette partie de votre pensée. Quel est l'intérêt de recycler intentionnellement le réseau et de comparer son résultat avec celui du réseau formé au cours des périodes précédentes ?

 
rip >> :

Montrez le résultat lorsque vous comparez tous les ensembles que vous alimentez aux entrées :) Je pense que tout sera fortement corrélé. Tous les indicateurs donnés utilisent les mêmes données d'entrée pour le calcul.

Je ne compare pas tous les ensembles..... Même passer en revue 200 jeux d'entrées, en fait il y en a plus, est long et n'a guère de sens car vous pourriez manquer quelque chose.

 
iliarr >> :

Lors de l'entraînement, j'apprends jusqu'à ce que la fonction cible augmente ou jusqu'à ce que je me lasse (dans le temps). Je m'occupe indirectement du réentraînement - l'échantillon d'entraînement est beaucoup plus grand que les poids dans le réseau neuronal. ensuite, je décharge vers .mq4 ( ici, peut-être, il y a une erreur... je le teste) et je vois avec le testeur de stratégie MT4 ce que j'obtiens.

"Je ne comprends pas cette partie de ta pensée... Je veux comparer le résultat d'un réseau spécialement réentraîné avec le résultat du réseau que vous avez testé dans les périodes précédentes ?


Pourquoi se recycler ? Il existe un échantillon sur lequel vous formez le réseau. Simulez maintenant son fonctionnement, donnez au réseau un échantillon qui ne lui est pas familier et comparez le résultat obtenu par le réseau avec celui attendu pour l'échantillon test.

 
rip >> :

Pourquoi se recycler ? Il existe un échantillon sur lequel vous formez le réseau. Simulez maintenant son fonctionnement, donnez au réseau un échantillon qui ne lui est pas familier et comparez le résultat obtenu par le réseau avec celui attendu pour l'échantillon test.

ce que vous suggérez déterminera les capacités prédictives du réseau formé, pas la qualité de la formation... et les capacités prédictives d'un réseau ne dépendent pas seulement de la qualité de la formation, mais aussi de la structure du réseau, de la façon dont le réseau interprète ce qu'il produit et des informations qu'il lui fournit.

 
iliarr >> :

Mais dans le Forex, le résultat de ce que vous suggérez détermine les capacités prédictives du réseau formé, et non la qualité de la formation... alors que les capacités prédictives d'un réseau dépendent non seulement de la qualité de la formation, mais aussi de la structure du réseau, de la façon dont vous interprétez sa sortie et des informations que vous alimentez dans le réseau.

Ahem... Qu'est-ce que cela a à voir avec les capacités de prédiction ? Vous avez un réseau, vous avez votre réseau avec une interprétation supposée de ses réponses.

D'après votre code, la classe Trade() simule le processus de négociation d'une manière ou d'une autre. Ouvrir une position, tenir une position, fermer une position.

>>Sur cette base, vous décidez si l'individu en question vous convient. Donc vous avez d'abord établi une sorte de règle

d'interpréter les résultats.

 
iliarr >> :

je ne peux pas comparer tous les ensembles.... Essayer de passer en revue ne serait-ce que 200 jeux d'entrées (en fait, il y en a plus) est long et n'a guère de sens, car vous risquez de manquer quelque chose.

Hm ... L'idée d'un échantillon de formation :(Prochain prédicteur de prix utilisant un réseau neuronal)


ntr - nombre d'ensembles de formation

lb - lastBar


// Remplir les tableaux d'entrée avec des données ; dans cet exemple nout=1
for(i=ntr-1;i>=0;i--)
{
outTarget[i]=(Open[lb+ntr-1-i]/Open[lb+ntr-i]-1.0);
int fd2=0 ;
int fd1=1 ;
for(j=nin-1;j>=0;j--)
{
int fd=fd1+fd2 ; // utiliser Fibonacci : 1,2,3,5,8,13,21,34,55,89,144...
fd2=fd1 ;
fd1=fd ;
inpTrain[i*nin+j]=Open[lb+ntr-i]/Open[lb+ntr-i+fd]-1.0;
}
}

 
rip >> :

Hm ... L'idée d'un échantillon de formation :(Prochain prédicteur de prix utilisant un réseau neuronal)


ntr - nombre d'ensembles de formation

lb - lastBar


// Remplir les tableaux d'entrée avec des données ; dans cet exemple nout=1
for(i=ntr-1;i>=0;i--)
{
outTarget[i]=(Open[lb+ntr-1-i]/Open[lb+ntr-i]-1.0);
int fd2=0 ;
int fd1=1 ;
for(j=nin-1;j>=0;j--)
{
int fd=fd1+fd2 ; // utiliser Fibonacci : 1,2,3,5,8,13,21,34,55,89,144...
fd2=fd1 ;
fd1=fd ;
inpTrain[i*nin+j]=Open[lb+ntr-i]/Open[lb+ntr-i+fd]-1.0;
}
}

Merci. Je vais regarder.

 

IlyaA писал(а) >>

Le public a besoin de voir une dépendance graphique de l'erreur d'apprentissage en fonction du temps (nombre d'époques).

->

iliarr a écrit(a) >>
nous devons parler de choses différentes... Je n'enseigne pas avec un professeur ( il y a une erreur d'apprentissage dans cette façon d'enseigner)... j'enseigne au maximum de la fonction cible et je ne sais pas quelle est la valeur maximale possible de la fonction cible.

->

rip a écrit >>

Nous parlons d'erreur d'échantillonnage des tests. C'est-à-dire que vous prenez le mois suivant après l'échantillon de formation. Vous l'évaluez, en fonction de votre algorithme. Vous envoyez les sorties au réseau formé. Vous comparez les résultats. C'est le graphique d'erreur qui nous intéresse.

Vous pouvez également obtenir un graphique d'erreur de l'échantillon d'entraînement et estimer la façon dont votre réseau apprend (ou le développement des générations dans l'algorithme de gen. est en cours).

Il semble que rip et IlyaA ne comprennent pas qu'iliarr utilise une méthode d'enseignement sans professeur. De quel type d'erreur d'apprentissage parle-t-on lorsque la fonction cible est le profit ? Ou pensez-vous tous les deux qu'après avoir entraîné le réseau sur l'historique, vous l'exécuterez sur un historique de test et comparerez le bénéfice obtenu ? Le bénéfice sera différent, moins ou plus, mais différent. L'historique des tests est différent. Ne pas confondre avec l'approximation s'il vous plaît, où le critère de la qualité de l'approximation est l'écart-type de la fonction originale et de celle obtenue.


StatBars a écrit : >>

Le BGC, lorsqu'un neurone devient sursaturé, cesse pratiquement de le "former", alors que le GA peut facilement sursaturer un neurone et continuer à augmenter le poids des neurones.

->

StatBars a écrit >>

En ce qui concerne le choix de la gamme, c'est très discutable. GA est très long, beaucoup plus long que le BGC - un autre inconvénient.

->

StatBars a écrit(a) >>

GA n'est pas pour les NS. Pour les SN, il existe leurs propres méthodes de formation (optimisation). Ne serait-ce que parce que vous ne pouvez pas utiliser le CV comme avec le BGC.

Je ne comprends pas, pourquoi une telle insistance ?

Voici quelques liens qui sont apparus lors d'une recherche et qui disent le contraire :

http://alglib.sources.ru/dataanalysis/neuralnetworks.php

http://network-journal.mpei.ac.ru/cgi-bin/main.pl?l=ru&n=13&pa=10&ar=3

http://masters.donntu.edu.ua/2004/fvti/solomka/library/article2.htm

http://www.neuropro.ru/memo314.shtml


Je n'ai pas prétendu et ne prétends pas que l'AG est la seule solution d'optimisation correcte pour tous les problèmes. Elle est tout simplement plus polyvalente que toute autre solution, et souvent plus rapide, s'adaptant facilement à presque toutes les tâches. Une autre question, légitime, est de savoir quel est le nombre minimum d'exécutions d'une fonction de fitness nécessaire pour trouver la solution optimale. C'est de cela qu'il faut parler, et non de la vitesse des algorithmes d'optimisation eux-mêmes. Et ici, GA surpasse la plupart des autres algorithmes.

Je peux ouvrir un fil de discussion séparé, si cela intéresse quelqu'un, où je peux poster des fonctions de test intéressantes pour les algorithmes d'optimisation et les résultats de divers algorithmes. Je pense qu'il sera très utile non seulement pour ceux qui s'occupent de NN, mais aussi pour tous ceux qui veulent obtenir un résultat de leurs efforts optimal à bien des égards.

StatBars a écrit : >>

Intéressant d'entendre votre technique pour choisir une gamme de poids, ou ce qui vous guide.

Dans Maple ou Mathca, je regarde la plage de poids dans laquelle la fonction d'activation fonctionne. Si la portée d'une fonction est [-1;1], quel est l'intérêt de "chercher" par exemple dans une telle plage de variables (-100;100) ?