トレーディングにおける機械学習:理論、モデル、実践、アルゴトレーディング - ページ 516

 
エリブラリウス

チェックと足場 - NSよりはるかに速く(4分)、結果はほぼ同じです。そして興味深いのは、線形回帰は さらに高速にカウントされ、同じ結果が得られることです。
誰かがここで書いていたように、機能が重要なのです。


まあ、これは本末転倒で、モデルやバッグが違うゲームでは、大きな増加は望めません :)

 
マキシム・ドミトリエフスキー

そこで、私が理解した限りでは、1回目でほとんど収束するので、1-2回のエポックを設定することができます...もしかしたら、それが省略されていたのでしょうか?長い間使っていないので、混乱しているかもしれませんが。

エポック数の制限はどこにもない
 
エリブラリウス
エポック時代のどこにも制限を見たことがない

mlptrainlm関数

/******************************************* 正確なヘシアン計算と正則化を用いた修正レーベンベルグ・マルカールトによる ニューラルネットワークのトレーニング。サブルーチンでは、ランダムな位置から再スタートしてニューラルネットワークを学習します。このアルゴリズムは、小中規模の問題(数百の重み)に適しています。 INPUT PARAMETERS: Network - 初期化された形状を持つニューラルネットワーク XY - トレーニングセット NPoints - トレーニングセットサイズ Decay - 重みの減衰定数、>=0。001 Decay term 'Decay*|||Weights||^2' がエラー関数に追加されます。 どのような Decay を選択すればよいかわからない場合は、0.001 を使用します。 Restarts - ランダム位置からの再スタートの数、>0。 どのような Restarts を選択すればよいかわからない場合は、2 を使用します
これだと思うんです。
 
マキシム・ドミトリエフスキー

まあ、それがメインで、いろいろなモデルやバッグで遊んでも、あまり効果はないんですけどね :)

NSの利点は、非線形の依存関係を見つけ、それを利用することだと思います。
ウラジミールさんの前回の記事には 2つありますね。

線形回帰は、逆に悪化する。

 
マキシム・ドミトリエフスキー

mlptrainlm関数

これはあくまで推奨値で、最低でも1000は誰も止めないが、時間がかかるだろう...。コードを見てみると、エポック数のループがあるだけです(ちなみに私も2を使っています)。
 
エリブラリウス
NSの利点は、非線形の依存関係を見つけ、それを利用することだと思います。
ウラジミールさんの前回の記事には 2つあります。

線形回帰は逆に、それらによって劣化してしまう。


また、スキャフォールドはあらかじめ非線形パターンに対してのみ使用され、線形パターンに対しては機能しない

 
elibrarius:
これはあくまで推奨値で、1000を入れることを誰も止めはしませんが、時間がかかるでしょう...。コードを見てみると、エポック数によるサイクルがあるだけです(ちなみに私も2を使っています)。
6プライで1500までやりました。そう、約32時間という長丁場ですが、まず、期待以上の仕上がりです。第二に、手で投影する のに比べれば、全然長くない)。そしてMLPでは-標準的な構成で、好きなことを教えます。)
 
マキシム・ドミトリエフスキー

また、スキャフォールドはあらかじめ非線形パターンに対してのみ使用され、線形パターンに対しては機能しない

そのためか、検証プロットでのforestは、線形回帰よりも 0.4%も優れています)) 。)学習時間はそれぞれ36分と3分です(265入力時)。線形回帰が 好きになりそうです。
 

足場は1小節単位で学習し、1小節先まで予測することができます。設定で、学習深度、増分のラグ、エントリ数(新しいエントリごとに1小節分後ろにシフト)を設定します。そして、現在の価格から 予測値を差し引きます。ヒストグラムは新しいバーごとにのみ描画されることをビジュアライザーで確認しました。

//+------------------------------------------------------------------+
//|                                          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);
  
  }
 
エリブラリウス
そのためか、検証プロットのforestは、線形回帰より 0.4%も優れている))。学習時間はそれぞれ36分と3分(265入力時)。線形回帰が 好きになってきた。

BPの自己回帰とforestの自己回帰を比較したところ、差はほとんどありませんでした。)要するにこれは、そこそこの正常なパターンがないことを意味する

理由: