Controllato e impalcatura - molto più veloce di NS (4 min.), e il risultato è circa lo stesso. E la cosa interessante è che la regressione lineare conta ancora più velocemente, con gli stessi risultati. Come qualcuno ha scritto qui - è tutta una questione di caratteristiche.
Beh, questa è la cosa principale, e il gioco con diversi modelli e borse non darà un grande aumento :)
Lì, per quanto ho capito, si possono impostare 1-2 epoche, perché converge quasi sempre la prima volta... forse è stata un'omissione? anche se non lo uso da molto tempo, potrei essere confuso.
elibrario: Non ho visto un limite da nessuna parte in epoche
funzione mlptrainlm
/************************************************************************* Addestramento delle reti neurali usando Levenberg-Marquardt modificato con calcolo esatto dell'Hessiano e regolarizzazione. La subroutine allena la rete neurale con ripartenze da posizioni casuali. L'algoritmo è adatto a problemi di piccola e media scala (centinaia di pesi). PARAMETRI INPUT: Network - rete neurale con geometria inizializzata XY - set di allenamento NPoints - dimensione del set di allenamento Decay - costante di decadimento dei pesi, >=0.001 Il termine Decay 'Decay*|||Weights|||^2' viene aggiunto alla funzione di errore. Se non sai quale Decay scegliere, usa 0.001. Restarts - numero di riavvii dalla posizione casuale, >0. Se non sai quale Restarts scegliere, usa 2.
Questo è solo un valore consigliato, nessuno si ferma almeno a 1000, ma ci vorrà molto tempo... Ho guardato nel codice - c'è solo un ciclo sul numero di epoche (ho anche usato 2, a proposito).
elibrarius: Questo è solo un valore consigliato, nessuno ti impedisce di mettere 1000, ma ci vorrà molto tempo... Ho guardato nel codice - c'è solo un ciclo sul numero di epoche (ho anche usato 2, a proposito).
L'ha fatto fino a 1500 su un 6 tele. Sì, lungo - circa 32 ore, ma, in primo luogo, il risultato supera le aspettative. In secondo luogo, non è affatto lungo, rispetto alla proiezione a mano). E con MLP - struttura standard, e insegna quello che vuoi)).
Lo scaffolding è anche usato esclusivamente per i modelli non lineari in anticipo, non funziona su quelli lineari
Forse è per questo che la foresta sulla trama di convalida è migliore dello 0,4% rispetto alla regressione lineare))). Il tempo di apprendimento è di 36 e 3 minuti rispettivamente (a 265 ingressi). Comincia a piacermi la regressione lineare.
Se qualcuno vuole giocare, l'impalcatura impara a incrementi e prevede 1 barra avanti. Nelle impostazioni, impostate la profondità di apprendimento, il ritardo per gli incrementi e il numero di voci (ogni nuova voce è uno spostamento di 1 barra indietro). Poi il valore previsto viene dedotto dai prezzi correnti. L'istogramma è disegnato solo per ogni nuova barra, l'ho visto nel visualizzatore.
//+------------------------------------------------------------------+//| 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);
}
elibrario: Forse è per questo che la foresta nella trama di convalida è migliore dello 0,4% rispetto alla regressione lineare)). Tempo di apprendimento 36 e 3 min rispettivamente (a 265 ingressi). Comincia a piacermi la regressione lineare.
Ho anche confrontato - ho fatto l'autoregressione BP e ho fatto lo stesso attraverso la foresta - le differenze sono minime :) In sostanza questo significa che non c'è uno schema normale lì o lì vicino
Controllato e impalcatura - molto più veloce di NS (4 min.), e il risultato è circa lo stesso. E la cosa interessante è che la regressione lineare conta ancora più velocemente, con gli stessi risultati.
Come qualcuno ha scritto qui - è tutta una questione di caratteristiche.
Beh, questa è la cosa principale, e il gioco con diversi modelli e borse non darà un grande aumento :)
Lì, per quanto ho capito, si possono impostare 1-2 epoche, perché converge quasi sempre la prima volta... forse è stata un'omissione? anche se non lo uso da molto tempo, potrei essere confuso.
Non ho visto un limite da nessuna parte in epoche
funzione mlptrainlm
Beh, questa è la cosa principale, e giocare con diversi modelli e borse non ti darà una grande spinta :)
Ce ne sono 2 nell'ultimo articolo di Vladimir.
La regressione lineare al contrario peggiorerà.
funzione mlptrainlm
Penso che il vantaggio di NS sia quello di trovare dipendenze non lineari e usarle.
L'ultimo articolo di Vladimir ne ha 2.
La regressione lineare sarà, al contrario, degradata da loro.
Lo scaffolding è anche usato esclusivamente per i modelli non lineari in anticipo, non funziona su quelli lineari
Questo è solo un valore consigliato, nessuno ti impedisce di mettere 1000, ma ci vorrà molto tempo... Ho guardato nel codice - c'è solo un ciclo sul numero di epoche (ho anche usato 2, a proposito).
Lo scaffolding è anche usato esclusivamente per i modelli non lineari in anticipo, non funziona su quelli lineari
Se qualcuno vuole giocare, l'impalcatura impara a incrementi e prevede 1 barra avanti. Nelle impostazioni, impostate la profondità di apprendimento, il ritardo per gli incrementi e il numero di voci (ogni nuova voce è uno spostamento di 1 barra indietro). Poi il valore previsto viene dedotto dai prezzi correnti. L'istogramma è disegnato solo per ogni nuova barra, l'ho visto nel visualizzatore.
Forse è per questo che la foresta nella trama di convalida è migliore dello 0,4% rispetto alla regressione lineare)). Tempo di apprendimento 36 e 3 min rispettivamente (a 265 ingressi). Comincia a piacermi la regressione lineare.
Ho anche confrontato - ho fatto l'autoregressione BP e ho fatto lo stesso attraverso la foresta - le differenze sono minime :) In sostanza questo significa che non c'è uno schema normale lì o lì vicino