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

 

阵列 X的维度

> dim(X1)
[1] 7000    8
X <- array( c(X1,X2), dim=c(7000, 8, 2) )

在你的情况下,它将是

X <- array( c(X1,...X100), dim=c(7000, 8, 100) )
#или, что равнозначно
X <- array( c(X1,...X100), dim=c(dim(X1), 100) )

当然,如果例子的数量是7000个,转换长度=8。

 

这个 "rnn "包与其说是使用的产品,不如说是一种编程练习。参见软件包 "RSNNS"。

现在有一些递归网络。嗯,更深入的,PyBrain,Ruthon的Keras

祝好运

 
谢谢你!我会研究的
 

我在对训练好的模型进行交叉验证时遇到了一些奇怪的问题。或者说,事实证明一直都有问题,只是我没有注意到。

我的行动大致如下。eurusd在今年有不同的指标。我按照70%/15%/15%的比例将数据按行随机划分,用于训练/验证/确认。

此外,这个数据包含9000个预测因子。我通过他们的变体进行遗传搜索,根据每个预测因子的子集训练一个PCA模型。我在一个训练样本上训练模型,确定误差。在两个验证样本上测试同一个模型,确定对它们的误差。

我以如下方式计算一个健身函数的最终结果。
max(error_train,error_validate1,error_validate2) - min(error_train,error_validate1,error_validate2)
关键是最小和最大误差之间的差异应该尽可能小(所谓的 "Fomenko标准":) )。

一切似乎都很好,该模型在所有三个样本上实现了约25%的误差。但是,在前面的测试中,误差突然上升到40%。我想了一下,改变了生成字符串(不是预测器,只是字符串)样本的random.seed,对于之前定义的一组预测器(最好的一个),得到了训练/验证/确认错误25%/35%/35%,而不是25%/25%/25%,同样的,fronttest也是40%。验证样本的误差增加了+10%,非常糟糕。

因此,事实证明,遗传学为特定的训练和特定的验证样本找到了最佳版本的预测器。如果我们以不同的顺序将行散布在样本上,训练好的预测模型在相同的预测因素下就不再能充分工作。

是否有任何标准的方法来处理这个问题,从而使训练好的模型对任何样本上的行的分布都给出大致相同的误差?这是一个严重的问题。例如,我可以在每一代遗传学中重新生成训练和验证样本。或者做两组不同的行样本,对它们训练两个PCA模型,并取最差的结果作为健身函数。这有意义吗?

 
Dr.Trader:

我在对训练好的模型进行交叉验证时遇到了一些奇怪的问题。更准确地说,事实证明一直都有问题,只是我没有注意到。

(所谓的 "Fomenko标准":) )。

我非常喜欢这个标准。谢谢你。

但这并不是完全由你说的。

我的标准必须包括fronttest。如果你看一下我所有的帖子,我总是准确地写到fronttest,根据我的想法,它应该在一片观察上进行,这些观察按时间(按指数)与前三组分开。

我早在拨浪鼓中就遇到了这个问题,它像你一样划分了所提供的一套。你得到了很好的数据,我的三个样本都不到10%,然后你拿一个新的文件,你的40%的误差仍然是一个好的结果!我有过更糟的情况。

因此,我对过度训练的标准是。

1.我们将原始集合分成两部分,没有任何随机的技巧,纯粹是机械性的,按照升序索引的顺序。

2.我们通过任何一种随机方法将第一部分分为三个部分:学习测试和验证。

3. 如果这三个部分的误差大致相等,则进入第4步

4.在第二部分上运行训练好的模型。误差又应该是大致相等的。这是最基本的,因为在交易时,我们总是在训练样本之外进行交易,并得到一个又一个稳定的(而不是随机的)条形。

如果我们在所有4个点上得到大致相同的误差,那么模型就不会被重新训练。

如果有明显的差异,则对模型进行重新训练。我没有在R中找到任何工具来消除噪音。我有自己的自制的,这里有另一篇关于PCA的文章。

 
mytarmailS:

安东-兹维列夫

我们不要进行这样的对话,在这里学习和分享经验的人都愿意互相帮助,而你的立场是你很笨,我什么都知道)你最好帮助我了解你的想法和你知道的正确做法。

我同意你的观点,仅仅给出BP是不够的,你需要压缩信息,摒弃那些妨碍做出好的决定的不必要的东西,最好是把那些买入/卖出的信息变成0或1,即如果我们有10个指标(我不相信),我们过滤掉其中的9个,只留下RSI,这将是不够的,因为该指标有一个范围,事实证明它对-70到70的值不起作用,所以我们需要压缩它们,等等。.问题是如何做到这一点?

我有这方面的想法,但还没有足够的知识来实现这样一个选择器。

我的第一次尝试是在很久以前,我从当前的价格回溯,搜索过去几乎相同的情况,然后将这些情况按结果排序,它们的结果如何,例如,我有一个当前的情况,为它找到10个类似物,在过去8个类似物变成了价格上涨,2个以下跌结束,所以它将增长...但可怕的是))结果却恰恰相反,在这些情况下,价格经常强烈下跌,有强烈的买入倾向,然后经常逐点回测......

然后我做了一个指标,把所有买入价格的累计总和和利润的总和,建立他们的差异,得到一些指数,当我把它与价格比较时,结果是与价格相反,相关性是-0.7到-0.9,所以,简单地说,市场与自己的统计数据相悖,这是值得思考和重新考虑的事情

Dr.Trader 的信

也许这能帮助你理解一点.....

我发现了一个更快、更容易看到这种影响的方法,如果感兴趣,我可以写更多的内容

 
桑桑尼茨-弗门科

4.在第二部分上运行训练好的模型。误差应该再次大致相等。这是最基本的,因为在交易时,我们总是在训练样本之外进行交易,并得到一个又一个稳定的(而不是随机的)条形。

明白了,谢谢。事实证明,验证样本不是2个,而是3个--其中一个是严格取自源文件的最后一个条目,没有随机性。其他样本是随机的。我会试一试的。

我曾经尝试取训练文件的第一部分进行验证,也是严格按照索引进行的,也没有随机性。我们的想法是,如果训练过的模型在训练前的数据上显示出小的误差,那么它在训练后的数据上也会显示出同样的误差。事实证明这是错误的,训练期之前的错误和训练期之后的错误完全没有关联。

mytarmailS:

然后我实现了这样一个指标,把所有买入和卖出预测的累积总和,计算它们的差额,得到一个指数,当我把它与价格进行比较时,它表示几乎与价格相反,相关性为-0.7至-0.9,简单地说,市场的运动与它自己的统计数字相反,这是值得思考和重新考虑的问题

这种方法是否总是对你有效,在任何时间间隔内都是如此?当然,它看起来很奇怪,但最主要的是它是有效的。我对我的未经训练的模型也有类似的观察。有时它给出的预测结果与真实的结果完全相反。但有时它仍能正常工作。在一次很长的测试中,在训练模型并在不同的时间间隔上检查它时,我了解到平均来说,它大约有50%的时间是正确的,所以它没有用,你可以抛硬币来预测,得到同样的结果。在那之后,我检查并正确理解了,这个模型应该给出正确的结果,而不需要任何反转、过滤和许多其他模型的集体解决方案。否则我可能会陷入混乱和随机。

 
Dr.Trader:

这种方法是否总是对你有效,在任何时间范围内?当然,这很奇怪,但最主要的是,它是有效的。我对我的未经训练的模型也有类似的观察。有时它给出的预测结果与真实的结果完全相反。但有时它仍能正常工作。在一次很长的测试中,在训练模型并在不同的时间间隔上检查它时,我了解到平均来说,它大约有50%的时间是正确的,所以它没有用,你可以抛硬币来预测,得到同样的结果。在那之后,我检查并正确理解了,这个模型应该给出正确的结果,而不需要任何反转、过滤和许多其他模型的集体解决方案。否则,你会陷入混乱和随机性统治的陷阱。

是的,总是这样,而且在任何时间段(但取样有细微差别),输出几乎是价格的完全复制,但反过来是相关的。通过这种方法,你可以看到一个神经元组是如何被训练的,以及你能从它那里得到什么,你可以得出几个结论

1)这是最典型的情况--如果一个网络是反相关的,就意味着它被训练过,否则就不会有反相关,对吗?

2)它只是随机的--这意味着网络还没有学到任何东西

3)一个网与市场一起工作(我只在一个相当不标准的目标上成功实现了这一效果)--这意味着一切正常。

4)最重要的结论(这对你很重要,D.操盘手),如果你建立你的网络预测,它将朝着结论1的相反方向发展,没有优化,遗传学,交叉验证和其他魅力将帮助你绝对没有 - 想想吧,这是合乎逻辑和明显的

 
mytarmailS:

1)这是最典型的情况--如果网络是反相关的,这意味着它是被训练过的,否则它就不会是反相关的,对吗?

4) 最重要的结论(这对你D.Trader很重要),如果你做了你的神经网络预测,它将朝着结论1的相反方向发展,没有优化,遗传学,交叉验证和其他魅力将帮助你在绝对没有什么,想想看,这是合乎逻辑和明显的。

1)在不同的训练区间有稳定的反相关,这有点奇怪,但网络已经学到了一些东西,我同意这个结果是好的。

4)我不同意这一条。如果使用二元分类(目标变量为 "0 "或 "1"),那么遗传学家或优化器的健身函数很容易改变,以实现 "反向 "结果,只需从1中减去当前结果即可。
例如,遗传学会挑出某一组预测因素。我对它们进行神经元训练,进行交叉验证并找出平均误差。我得到一个错误,例如0.4。健身函数的 "逆 "结果可以定义为1-0.4 = 0.6。遗传学将尝试把误差从0.6降低到零。它将产生一组健身函数值为0的预测器。但这意味着神经网络的真实误差是0+1=1。也就是说,获得的神经元卡在100%的情况下是错误的,这就是反相关。
一般来说,你可以用同样的遗传算法 和交叉验证来训练一个神经元,这个神经元会给出一个与期望值相反的结果,你会得到它,因为你是故意的。但并不清楚是什么原因。:)

我还想补充一点,在目标变量为 "0 "和 "1 "的二元分类中,最差的误差是0.5。
错误==0是好的。
Error == 1是你的反相关神经元,你可以直接翻转结果,就可以了。但还是要找出原因,这是一个非常不典型的情况。
误差0.5意味着结果完全是随机的,模型根本就没有用。

 

1