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

 
马克西姆-德米特里耶夫斯基
所以我不知道这辈子该相信什么......一切都要反复检查

+1 - 我一开始没有去除离群值,在数据的中心(或零点)得到了强烈的偏移。在去除离群值后,一切都变得更加稳定。

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

所以它终于不是jPredictor了?:)


究竟为什么与他....它建立的模型比图书馆更好,等等。因为它对数据进行了彻底的摇动...

 
Mihail Marchukajtes:

为什么他正是....它建立的模型比图书馆更好,等等。因为它对数据进行了彻底的摇动...


但它需要很长的时间...:)

 
elibrarius

+1 - 我最初在没有去除异常值的情况下做了这个工作,结果在中心(或零点)得到了强烈的偏移。在去除离群值后,一切都变得更加稳定。


好吧,有时会因为归一化而出现移位问题,所以我通过增量的对数对所有的输入,如果需要归一化的话,中心将永远在零点。

但总的来说,尖峰被移除的原因更多的是为了使尺度在异常点上不发生太大的变化......而且,比如说脚手架,根本就不关心它们。

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

但它需要很长的时间...:)


这就是为什么我在统计上减少了输入的数量,训练在时间上变得充分。在一个工作日内,我已经完成了模型+4级的提升。现在我再做一个反弹模型,应该可以用上几个星期。至少我希望如此...

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

好吧,有时会因为归一化而出现移位问题,所以我通过增量的对数对所有的输入,如果需要归一化的话,中心将永远在零点。

但一般来说,删除尖峰更多的是为了使NS不会在异常点上严重转移权重......例如,脚手架根本不关心它们。

好吧,事实上对数也做了类似的事情,只是它没有丢弃,而且带来了,强烈的排放。然而我并没有把它们也抛弃,而是把它们等同于最大。如果(v>max){v=max;}。

一般来说,我想事先为每个预测器定义一个可接受的范围,并在这个范围内进行我的所有实验。因为即使用我的方法和对数法,我也会有一些数据从样本到样本的转变。

 
elibrarius
事实上,对数也做了类似的事情,只是它不丢弃,而是近似于强尖峰。然而,我也不抛弃它们,而是把它们等同于最大限度。如果(v>max){v=max;}。

哦,是的,这是对的......我想)

我首先取一些序列,如log(close[0]/close[n])。

然后

void NormalizeArrays(double &a[]) //нормируем от -1 до 1
  { 
   double multiplier;
   double x_min=MathAbs(a[ArrayMinimum(a)]);
   double x_max=MathAbs(a[ArrayMaximum(a)]);
   if(x_min>=x_max) multiplier = x_min;
     else multiplier = x_max;
   for(int i=0;i<ArraySize(a);i++)
     {
      a[i]=a[i]/multiplier;
     }
  }
而如果你采取小样本,那么你可以在大样本上初步 定义它,所以它不会改变。
 
马克西姆-德米特里耶夫斯基

哦,是的,这是对的......我想)

我首先取一些序列,如log(close[0]/close[n])。

然后

如果最小值和最大值不是镜像的(例如-100和90),那么你将有一个正常化,例如从-1到0.9。但中心将永远在0处。在偏移方面,这是一个有趣的方法。

而且显然你需要采取

a[i]=a[i]/Abs(multiplier);

否则,一个负面的迷你会把一切都颠倒过来。

 
埃利布留斯

如果最小值和最大值不是镜像的(例如-100和90),你将有一个例如-1到0.9的标准化。但中心将永远在0处。在打击偏移方面的一个有趣的方法。

而且显然我们应该这样做。

否则,一个负的迷你会把一切都颠倒过来。


是的,重要的是中心不转移。

已经有了最大和最小的深渊。

double x_min=MathAbs(a[ArrayMinimum(a)]);
double x_max=MathAbs(a[ArrayMaximum(a)]);
 
马克西姆-德米特里耶夫斯基

最大和最小的深渊已经在上面了

错过了)

还有一件事,如果你不取0,而是取0.5--即使用你的方法,它也会在各个样本之间 "浮动"。

唯一有帮助的方法是硬性地手动设置每个输入的范围。但不清楚如何确定它。例如,你可以运行一年的数据,拒绝1-5%的异常值。并在这一年中与他们一起工作。虽然他们在一年内会有变化。