交易中的机器学习:理论、模型、实践和算法交易 - 页 516

 
elibrarius

检查和搭架子--比NS快得多(4分钟),结果也差不多。而有趣的是线性回归 的计算速度更快,结果也一样。
正如有人在这里写的那样--这都是关于功能的。


好吧,这是最主要的,有不同型号和包的游戏不会有大的增长:)

 
马克西姆-德米特里耶夫斯基

在那里,据我所知,你可以设置1-2个历时,因为它几乎总是在第一次就收敛......也许这是一个遗漏?尽管我已经很久没有使用它了,我可能被混淆了。

我在任何地方都没有看到一个以纪元为单位的限制
 
elibrarius
我还没有在任何地方看到过纪元的限制

mlptrainlm函数

/************************************************************************* 使用精确Hessian计算和正则化的改良Levenberg-Marquardt的神经网络训练。子程序通过从随机位置重新启动来训练神经网络。该算法非常适用于中小型问题(数百个权重)。 输入参数: 网络 - 具有初始化几何形状的神经网络 XY - 训练集 NPoints - 训练集大小 衰减 - 权重衰减常数,>=0。001 衰减项'Decay*||Weights||^2'被添加到误差函数中。 如果你不知道选择什么样的衰减,使用0.001。 重新启动 - 从随机位置重新启动的次数,>0。如果你不知道选择什么样的重新启动,使用2
我想这就是了。
 
马克西姆-德米特里耶夫斯基

嗯,这是最主要的,玩不同的模型和包不会给你带来多大的提升 :)

我认为NS的优势在于找到非线性的依赖关系并加以利用。
在弗拉基米尔的最后一篇文章 中,有2个这样的例子。

线性回归它们反而会恶化。

 
马克西姆-德米特里耶夫斯基

mlptrainlm函数

这只是一个推荐值,没有人阻止至少1000人,但这需要很长的时间......我看了一下代码--只有一个关于历时数的循环(顺便说一下,我也用了2)。
 
elibrarius
我认为NS的优势在于找到非线性的依赖关系并加以利用。
弗拉基米尔的最后一篇文章 中就有2篇。

相反,线性回归会因为它们而退化。


脚手架也是专门用于非线性模式的提前,它对线性模式不起作用。

 
elibrarius:
这只是一个推荐值,没有人阻止你放1000,但会花很长时间......在代码中看了一下--只有一个关于历时数的循环(顺便说一下,我也用了2)。
在6层的基础上做到了1500。是的,很长--大约32个小时,但是,首先,结果超过了预期。第二,与手工投射 相比,根本不长)。而用MLP--标准的结构,教你喜欢的东西。))
 
马克西姆-德米特里耶夫斯基

脚手架也是专门用于非线性模式的提前,它对线性模式不起作用。

也许这就是为什么验证图上的森林比线性回归 好0.4%之多))。学习时间分别为36和3分钟(在265个输入时)。我开始喜欢线性回归 了。
 

如果有人想玩一玩,脚手架以增量方式学习,并提前预测1小节。在设置中,设置学习深度、增量的滞后和条目数(每一个新条目都是向后移动1个小节)。然后从当前价格 中扣除预测值。直方图只为每一个新的柱状图而画,我在visualizer中看到了它。

//+------------------------------------------------------------------+
//|                                          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
也许这就是为什么验证图中的森林比线性回归 好了0.4%之多))。学习时间分别为36和3分钟(在265个输入时)。我开始喜欢线性回归 了。

我也进行了比较--我做了BP自回归,我也通过森林做了同样的事情--差异很小:)从本质上说,这意味着那里或那里没有正常的模式。