Ticarette makine öğrenimi: teori, pratik, ticaret ve daha fazlası - sayfa 516

 
elibrarius :

Ayrıca iskeleyi de kontrol ettim - NS'den çok daha hızlı (4 dk.) Ve sonuç aşağı yukarı aynı. Ve ilginç bir şekilde, lineer regresyon aynı sonuçlarla daha da hızlı hesaplar.
Birinin burada yazdığı gibi - her şey özelliklerle ilgili.


Neyse asıl mesele bu ve farklı model ve çantalarla oynamak büyük bir artış sağlamaz :)

 
Maksim Dmitrievski :

Orada anladığım kadarıyla 1-2 dönem ayarlayabilirsiniz, çünkü neredeyse her zaman ilk seferde yakınsar.. Bunda bir eksiklik mi var? uzun zamandır kullanmamama rağmen kafam karıştı

Hiçbir yerde çağlarda herhangi bir kısıtlama görmedim
 
elibrarius :
Hiçbir yerde çağlarda herhangi bir kısıtlama görmedim

mlptrainlm işlevi

/******************************************************** **** ******************************* Kesin olarak değiştirilmiş Levenberg-Marquardt kullanarak sinir ağı eğitimi Hessian hesaplama ve düzenleme. Altyordam sinir ağını eğitiyor rastgele konumlardan yeniden başlatmalarla. Algoritma küçük için çok uygundur ve orta ölçekli problemler (yüzlerce ağırlık). GİRİŞ PARAMETRELERİ: Ağ - başlatılmış geometriye sahip sinir ağı XY eğitim seti NPoints - eğitim seti boyutu Çürüme - ağırlık azalma sabiti, >=0,001 Decay terimi 'Decay*||Weights||^2' hataya eklendi işlev. Hangi Decay'i seçeceğinizi bilmiyorsanız, 0.001'i kullanın. Yeniden başlatmalar - rastgele konumdan yeniden başlatma sayısı, >0. Hangi Yeniden Başlatma seçeneğini seçeceğinizi bilmiyorsanız, 2'yi kullanın.
bence
 
Maksim Dmitrievski :

Neyse asıl mesele bu ve farklı model ve çantalarla oynamak büyük bir artış sağlamaz :)

Bence NN'nin avantajı doğrusal olmayan bağımlılıkları bulmak ve kullanmak.
Vladimir'in son makalesinde bunlardan 2 tane var.

Aksine, lineer regresyonu kötüleştireceklerdir.

 
Maksim Dmitrievski :

mlptrainlm işlevi

Bu sadece önerilen bir değerdir, kimse en az 1000 ayarlamakla uğraşmaz, ancak uzun zaman alacak ... Koda baktım - sadece dönem sayısı üzerinde bir döngü var (bu arada, ben de kullandım 2).
 
elibrarius :
Bence NN'nin avantajı doğrusal olmayan bağımlılıkları bulmak ve kullanmak.
Vladimir'in son makalesinde bunlardan 2 tane var.

Aksine, lineer regresyonu kötüleştireceklerdir.


ormanlar ayrıca yalnızca doğrusal olmayan desenler için kullanılır, doğrusal olanlar üzerinde çalışmazlar

 
elibrarius :
Bu sadece önerilen bir değerdir, kimse en az 1000 ayarlamakla uğraşmaz, ancak uzun zaman alacak ... Koda baktım - sadece dönem sayısı üzerinde bir döngü var (bu arada, ben de kullandım 2).
6 pufta 1500'e kadar yapılmıştır. Evet, uzun bir süre - yaklaşık 32 saat, ancak öncelikle sonuç beklentileri aşıyor. İkincisi, elle tasarlamaya kıyasla tamamen ve uzun sürmez.) Ve MLP ile - standart bir yapı ve ne istersen öğret.))
 
Maksim Dmitrievski :

ormanlar ayrıca yalnızca doğrusal olmayan desenler için kullanılır, doğrusal olanlar üzerinde çalışmazlar

Belki de bu yüzden doğrulama alanındaki orman, doğrusal regresyondan %0.4 kadar daha iyidir ))). Eğitim süresi sırasıyla 36 ve 3 dakikadır (265 girdi ile). Doğrusal regresyonu sevdiğim bir şey.
 

Belki biri şımartmak ister - ormanlar artışlarla eğitilir, 1 bar ilerisi için bir tahminde bulunurlar. Ayarlar, eğitim derinliğini, artışlar için gecikmeyi ve giriş sayısını ayarlar (her yeni giriş 1 bar geriye doğru kaydırılır). Daha sonra tahmin değeri cari fiyatlardan çıkarılır. Histogram sadece her yeni çubuk için çizilir, görselleştiriciye baktım.

 //+------------------------------------------------------------------+
//|                                          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_buffers 2
#property indicator_plots    1
//--- plot Label1
#property indicator_label1    "Tensor non-linear predictor"
#property indicator_type1    DRAW_COLOR_HISTOGRAM
#property indicator_color1    clrOrangeRed , clrOrange
#property indicator_style1    STYLE_SOLID
#property indicator_width1    1
//--- подключим библиотеку 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 it
double RFout[ 1 ], vector[];                                     //Arrays for calculate result of RF
CMatrixDouble RMmatrix;
int retcode= 0 ;

//--- input parameters
input int              last_bars= 500 ;
input int              lag= 5 ; 
input int              bars_seria = 100 ;

//--- indicator buffers
double          SpreadBuffer[];
double          ColorsBuffer[];

//--- время открытия предыдущего бара
static datetime last_time= 0 ;
int needToLearn= 0 ;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
//--- indicator buffers mapping
   SetIndexBuffer ( 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 );
  }
 
int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const datetime &time[],
                 const double &open[],
                 const double &high[],
                 const double &low[],
                 const double &close[],
                 const long &tick_volume[],
                 const long &volume[],
                 const int &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 :
Belki de bu yüzden doğrulama alanındaki ormanın doğrusal regresyondan %0,4 kadar daha iyi olması ))). Eğitim süresi sırasıyla 36 ve 3 dakikadır (265 giriş ile). Doğrusal regresyonu sevdiğim bir şey.

Ben de karşılaştırdım - VR otoregresyonu yaptım ve aynısını ormanda da yaptım - farklar çok az :) Özünde bu, orada veya orada normal bir model olmadığı anlamına geliyor