Vérifié et échafaudage - beaucoup plus rapide que NS (4 min.), et le résultat est à peu près le même. Et ce qui est intéressant, c'est que la régression linéaire compte encore plus vite, avec les mêmes résultats. Comme quelqu'un l'a écrit ici - tout est question de fonctionnalités.
Eh bien, c'est l'essentiel, et le jeu avec différents modèles et sacs ne donnera pas une grande augmentation :)
Là, d'après ce que j'ai compris, vous pouvez définir 1-2 époques, parce qu'il converge presque toujours la première fois... peut-être que c'était une omission ? bien que je ne l'ai pas utilisé depuis longtemps, je pourrais être confus.
elibrarius: Je n'ai pas vu de limite nulle part depuis des millénaires.
fonction mlptrainlm
/************************************************************************* Entraînement de réseaux neuronaux à l'aide de Levenberg-Marquardt modifié avec calcul exact du hessien et régularisation. La sous-routine entraîne le réseau neuronal avec des redémarrages à partir de positions aléatoires. L'algorithme est bien adapté aux problèmes de petite et moyenne échelle (centaines de poids). PARAMÈTRES D'ENTRÉE : Réseau - réseau neuronal avec géométrie initialisée XY - ensemble de formation NPoints - taille de l'ensemble de formation Decay - constante de décroissance des poids, >=0.001 Le terme Decay 'Decay*|||Weights||^2' est ajouté à la fonction d'erreur. Si vous ne savez pas quel Decay choisir, utilisez 0.001. Restarts - nombre de redémarrages à partir d'une position aléatoire, >0. Si vous ne savez pas quel Restart choisir, utilisez 2.
Il s'agit juste d'une valeur recommandée, personne ne s'arrête à au moins 1000, mais cela prendra beaucoup de temps... J'ai regardé dans le code - il y a juste une boucle sur le nombre d'époques (j'ai aussi utilisé 2, d'ailleurs).
elibrarius: Je pense que l'avantage de NS est de trouver des dépendances non linéaires et de les utiliser. Le dernier article de Vladimir en compte deux.
La régression linéaire sera, au contraire, dégradée par eux.
L'échafaudage est également utilisé exclusivement pour les modèles non linéaires à l'avance, il ne fonctionne pas sur les modèles linéaires.
elibrarius: C'est juste une valeur recommandée, personne ne vous empêche de mettre 1000, mais cela prendra beaucoup de temps... J'ai regardé dans le code - il y a juste une boucle sur le nombre d'époques (j'ai aussi utilisé 2, d'ailleurs).
Je l'ai fait jusqu'à 1500 sur un 6 plis. Oui, long - environ 32 heures, mais, tout d'abord, le résultat dépasse les attentes. Deuxièmement, pas long du tout, comparé à la projection à la main). Et avec MLP - structure standard, et enseignez ce que vous voulez.))
L'échafaudage est également utilisé exclusivement pour les modèles non linéaires à l'avance, il ne fonctionne pas sur les modèles linéaires.
C'est peut-être pour cela que la forêt sur le graphique de validation est meilleure de 0,4 % que la régression linéaire))). Le temps d'apprentissage est de 36 et 3 minutes respectivement (à 265 entrées). Je commence à aimer la régression linéaire.
Si quelqu'un veut jouer avec, l'échafaudage apprend des incréments et donne une prédiction d'une mesure à l'avance. Dans les paramètres, réglez la profondeur d'apprentissage, le décalage des incréments et le nombre d'entrées (chaque nouvelle entrée est un décalage d'une mesure en arrière). Ensuite, la valeur prévisionnelle est déduite des prix actuels. L'histogramme est dessiné seulement pour chaque nouvelle barre, je l'ai vu dans le visualiseur.
//+------------------------------------------------------------------+//| NonLinearPredictor.mql5 |//| Dmitrievsky Max |//| https://www.mql5.com/ru/users/dmitrievsky |//+------------------------------------------------------------------+#property copyright"Dmitrievsky Max."#property link"https://www.mql5.com/ru/users/dmitrievsky"#property version"1.00"#property indicator_separate_window#property indicator_buffers2#property indicator_plots1//--- plot Label1#property indicator_label1"Tensor non-linear predictor"#property indicator_type1DRAW_COLOR_HISTOGRAM#property indicator_color1clrOrangeRed,clrOrange#property indicator_style1STYLE_SOLID#property indicator_width11//--- подключим библиотеку Alglib#include <Math\Alglib\alglib.mqh>
//RDF system. Here we create all RF objects.
CDecisionForest RDF; //Random forest object
CDFReport RDF_report; //RF return errors in this object, then we can check itdouble RFout[1], vector[]; //Arrays for calculate result of RF
CMatrixDouble RMmatrix;
int retcode=0;
//--- input parametersinputint last_bars=500;
inputint lag=5;
inputint bars_seria = 100;
//--- indicator buffersdouble SpreadBuffer[];
double ColorsBuffer[];
//--- время открытия предыдущего бараstaticdatetime last_time=0;
int needToLearn=0;
//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+intOnInit()
{
//--- indicator buffers mappingSetIndexBuffer(0,SpreadBuffer,INDICATOR_DATA);
SetIndexBuffer(1,ColorsBuffer,INDICATOR_COLOR_INDEX);
//--- установим индексацию как в таймсерии - от настоящего в прошлоеArraySetAsSeries(SpreadBuffer,true);
ArraySetAsSeries(ColorsBuffer,true);
RMmatrix.Resize(last_bars,bars_seria);
ArrayResize(vector,bars_seria-1);
//---IndicatorSetString(INDICATOR_SHORTNAME,StringFormat("Non-linear predictor (%s, %s, %s)",_Symbol,(string)last_bars, (string)lag));
IndicatorSetInteger(INDICATOR_DIGITS,5);
return(INIT_SUCCEEDED);
}
intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
//---ArraySetAsSeries(close,true);
if(prev_calculated==0 || needToLearn>last_bars/5)
{
for(int i=0;i<last_bars;i++)
{
for(int l=0;l<ArraySize(vector);l++)
{
RMmatrix[i].Set(l,MathLog(close[i+1+l]/close[i+lag+1+l]));
}
RMmatrix[i].Set(bars_seria-1,MathLog(close[i]/close[i+lag]));
}
CDForest::DFBuildRandomDecisionForest(RMmatrix,last_bars,bars_seria-1,1,100,0.95,retcode,RDF,RDF_report);
needToLearn=0;
}
if(isNewBar())
{
if(retcode==1)
{
for(int i=0;i<ArraySize(vector);i++)
{
vector[i]=MathLog(close[i]/close[i+lag]);
}
CDForest::DFProcess(RDF,vector,RFout);
SpreadBuffer[0]=MathLog(close[0]/close[0+lag])-RFout[0];
ColorsBuffer[0]=(SpreadBuffer[0]>0?0:1);
}
needToLearn++;
}
return(rates_total);
}
//+------------------------------------------------------------------+//| возвращает true при появлении нового бара |//+------------------------------------------------------------------+bool isNewBar()
{
datetime lastbar_time=datetime(SeriesInfoInteger(Symbol(),_Period,SERIES_LASTBAR_DATE));
if(last_time==0)
{
last_time=lastbar_time;
return(false);
}
if(last_time!=lastbar_time)
{
last_time=lastbar_time;
return(true);
}
return(false);
}
elibrarius: C'est peut-être la raison pour laquelle la forêt dans le graphique de validation est supérieure de 0,4 % à la régression linéaire)). Temps d'apprentissage 36 et 3 min respectivement (à 265 entrées). Je commence à aimer la régression linéaire.
J'ai également comparé - j'ai fait une autorégression BP et j'ai fait la même chose à travers la forêt - les différences sont minimes :) En substance, cela signifie qu'il n'y a pas de modèle normal à cet endroit ou aux alentours.
Si vous n'avez pas de compte, veuillez vous inscrire
Autorisez l'utilisation de cookies pour vous connecter au site Web MQL5.com.
Veuillez activer les paramètres nécessaires dans votre navigateur, sinon vous ne pourrez pas vous connecter.
Vous êtes connecté. L'authentification à deux facteurs a été désactivée. Configurez-la à nouveau et scannez un nouveau code QR, ou continuez avec l'authentification à deux facteurs désactivée.
Vérifié et échafaudage - beaucoup plus rapide que NS (4 min.), et le résultat est à peu près le même. Et ce qui est intéressant, c'est que la régression linéaire compte encore plus vite, avec les mêmes résultats.
Comme quelqu'un l'a écrit ici - tout est question de fonctionnalités.
Eh bien, c'est l'essentiel, et le jeu avec différents modèles et sacs ne donnera pas une grande augmentation :)
Là, d'après ce que j'ai compris, vous pouvez définir 1-2 époques, parce qu'il converge presque toujours la première fois... peut-être que c'était une omission ? bien que je ne l'ai pas utilisé depuis longtemps, je pourrais être confus.
Je n'ai pas vu de limite nulle part depuis des millénaires.
fonction mlptrainlm
C'est l'essentiel, et jouer avec différents modèles et sacs ne vous donnera pas un grand coup de pouce :)
Il y en a 2 dans le dernier article de Vladimir.
Régression linéaire, ils vont au contraire s'aggraver.
fonction mlptrainlm
Je pense que l'avantage de NS est de trouver des dépendances non linéaires et de les utiliser.
Le dernier article de Vladimir en compte deux.
La régression linéaire sera, au contraire, dégradée par eux.
L'échafaudage est également utilisé exclusivement pour les modèles non linéaires à l'avance, il ne fonctionne pas sur les modèles linéaires.
C'est juste une valeur recommandée, personne ne vous empêche de mettre 1000, mais cela prendra beaucoup de temps... J'ai regardé dans le code - il y a juste une boucle sur le nombre d'époques (j'ai aussi utilisé 2, d'ailleurs).
L'échafaudage est également utilisé exclusivement pour les modèles non linéaires à l'avance, il ne fonctionne pas sur les modèles linéaires.
Si quelqu'un veut jouer avec, l'échafaudage apprend des incréments et donne une prédiction d'une mesure à l'avance. Dans les paramètres, réglez la profondeur d'apprentissage, le décalage des incréments et le nombre d'entrées (chaque nouvelle entrée est un décalage d'une mesure en arrière). Ensuite, la valeur prévisionnelle est déduite des prix actuels. L'histogramme est dessiné seulement pour chaque nouvelle barre, je l'ai vu dans le visualiseur.
C'est peut-être la raison pour laquelle la forêt dans le graphique de validation est supérieure de 0,4 % à la régression linéaire)). Temps d'apprentissage 36 et 3 min respectivement (à 265 entrées). Je commence à aimer la régression linéaire.
J'ai également comparé - j'ai fait une autorégression BP et j'ai fait la même chose à travers la forêt - les différences sont minimes :) En substance, cela signifie qu'il n'y a pas de modèle normal à cet endroit ou aux alentours.