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

 
Dr.Trader:
在使用它做外汇时,保持不信任的重要性。虹膜是非常简单的数据,现有数据和类之间有直接的模式。RF只需找到一个最小的 预测器集合,在此基础上可以定义虹膜类别,就可以了。

在我看来,它对市场不起作用,只是因为预测器很烂,如果有正常的预测器,它就会像虹膜一样发挥作用,误差率为95%。

 

对于虹膜来说,这很简单--如果一个花瓣从某某到某某的长度,那么它就是1级,如果它从某某到某某的宽度,那么它就是2级,等等。射频所做的是找到最符合目标值的预测值区间。

我甚至不需要森林来完成这项任务,一棵树就足以达到90%的精确度。

 Rule number: 2 [Species=setosa cover=33 (31%) prob=1.00]
   Petal.Length< 2.6

 Rule number: 7 [Species=virginica cover=35 (33%) prob=0.00]
   Petal.Length>=2.6
   Petal.Length>=4.85

 Rule number: 6 [Species=versicolor cover=37 (35%) prob=0.00]
   Petal.Length>=2.6
   Petal.Length< 4.85

也就是说,如果某个类别对应于某个预测值 或其组合的范围,并且这些区间不重叠--那么树或森林将100%地解决一切问题。

对外汇的依赖性要复杂得多,一个森林需要几十个预测器来描述目标值。森林肯定会找到描述目标值的这种预测因子及其组合的区间,但它们只是被选中的组合,没有任何逻辑或分析。森林将采取什么决定--噪音,或一个真正重要的预测因素--是一个机会问题。只有在事先剔除不合适的预测因素,只留下必要的预测因素进行学习的情况下,Forest for forex才能正常工作。问题是,必须以某种方式确定或找到必要的预测因素,而森林在这方面没有帮助。

我还没能做到这一点。

大部分时间是在训练表的cov()之后,筛出特征值=0的预测因子(我假设只有特别相关的预测因子才适合)。24小时后,就到了训练ForeCA模型本身的时候了,由于一个错误,它没有训练。

unit-variance: Mean relative difference: 3.520041 e-06
Error in check_whitened(out$score, FALSE) : Data must be whitened:
         Each variable must have variance 1.

该软件包对预测器的要求非常高,有很多各种各样的限制。我甚至不知道最后一个错误是什么意思,我将进一步研究它。

我以后会完成这个任务。
谷歌说你不需要删除预测器。你可以对它们进行转换,使它们不再相关,那么协方差矩阵将具有全等级,这是ForeCA所要求的。对于美白,包装本身有一些功能(不是马上就能用的,你需要弄清楚),加上下面链接中的理论。
要正确使用ForeCA,你需要先了解和学习如何做。
http://stats.stackexchange.com/questions/23420/is-whitening-always-good
http://courses.media.mit.edu/2010fall/mas622j/whiten.pdf

 
Dr.Trader:

1)只有事先筛选出不合适的预测因子,只留下需要的预测因子进行训练,外汇森林才能正确地工作。问题是,需要确定或找到正确的预测因素,而森林在这方面没有任何帮助。

2)该软件包对预测器的要求很高,有很多限制。我甚至不知道最后一个错误是什么意思,我将进一步研究它。

1) 我提出了一个我认为足够好的想法,如何做这样的选择,但没有人感兴趣,我自己也无法实现它。

2)我自己做不到。2)你可能只减少数据量,否则你自己会知道)。

 

我已经发过这个帖子,但没有人反应,我再试试。

我已经发过这个帖子,但没有人响应,我再试一次。 在BP中有这样一个概念,即动态时间扭曲(DTW),在它的帮助下,你可以使价格图表更易读,从而使算法更容易识别。

data_driven_time_warp <- function (y) {
  cbind(
    x = cumsum(c(0, abs(diff(y)))),
    y = y
  )
}

y <- cumsum(rnorm(200))+1000

i <- seq(1,length(y),by=10)
op <- par(mfrow=c(2,1), mar=c(.1,.1,.1,.1))
plot(y, type="l", axes = FALSE)
abline(v=i, col="grey")
lines(y, lwd=3)
box()
d <- data_driven_time_warp(y)
plot(d, type="l", axes=FALSE)
abline(v=d[i,1], col="grey")
lines(d, lwd=3)
box()
par(op)

一切似乎都很酷,但可悲的是,作为这种转换的结果,我们得到两个坐标x和y的时间(合成) 和值

d
                x        y
  [1,]   0.000000 1001.393
  [2,]   1.081118 1002.474
  [3,]   2.799970 1004.193
  [4,]   3.706653 1005.100
  [5,]   3.867351 1005.260
  [6,]   4.654784 1004.473
  [7,]   5.000202 1004.127
  [8,]   6.665623 1005.793
  [9,]   7.415255 1005.043
 [10,]   7.956572 1005.584
 [11,]   8.403185 1005.138
 [12,]   9.352230 1004.189
 [13,]   9.913620 1004.750
 [14,]  10.249985 1004.414

问题是如何将这个转换返回到一个矢量,以便它不会失去其属性

这就是它的样子--上面是普通的,下面是DTW。

DTW

 
mytarmailS:

1)我提出了我认为足够好的想法来进行这样的选择,但没有人感兴趣,我自己也无法实施。

2)只减少数据量或你自己知道)

你有什么建议?事实证明,我已经错过了?我可以重复你的想法吗?
 
桑桑尼茨-弗门科
你有什么建议?事实证明,我错过了什么?我可以重复你的想法吗?
看看我写的关于集群的地方,我很详细地解释了它
 
mytarmailS:

问题是 如何在不失去其属性的情况下将这个变换返回到一个正常的矢量上

那么,对这个问题有什么想法吗?
 

我又用ForeCA做了一个例子,在档案小表里做了测试和代码,用它来工作。
这一次,我已经得到了它的权利。
你可以使用你自己的模型训练数据表,主要是它必须是矩阵,没有因素(用lm训练,你可以只使用回归)。行的数量应该远远多于预测因子的数量,否则ForeCA会有误差。
我有0和1的目标值,其他的精度将无法正确确定,如果是这样,请在RegressionToClasses01(regr)中为你的情况纠正代码,在回归结果被四舍五入到类的地方。
trainData - 用于训练的数据
trainDataFT - 前端测试的数据

结果。
在原始数据上的lm:在训练数据上有75%的准确性,在新数据上有57%的准确性。
在foreCA的所有14个组件上的lm:训练数据上的75%和新数据上的61%。稍微好一点,但在这种情况下,+4%只是+1个正确的结果,表格相当小 :)

也就是说,如果预测器已经预选好了,那么在ForeCA之后应该不会更差,也许还能增加几个百分点的准确性。

我还添加了一个图表,其中显示了精度对ForeCA组件数量的依赖性。看来,组件的数量越多,结果越准确。允许的最大成分数=预测器的数量。


附加的文件:
 

实验的第二部分是。

我有14个先前选定的预测因子,又增加了14个随机值。现在允许的ForeCA组件的最大数量是28个。

在两种情况下(有和没有foreCA),用所有28个组件对训练数据的预测准确率为76%,在两种情况下对新数据的预测准确率为57%。

我不认为foreCA应对了预测器中的垃圾,我没有看到预期的奇迹。

 
mytarmailS:
那又怎样?
它看起来像一个renko图表。在mt5终端中,Rencos是以某种方式绘制在条形上的,你需要一个类似的算法。