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

 
Dr.Trader:

评价标签上的 "CSV文件 "和 "R数据集 "只是指定数据源的不同方式。如果你向它们输入相同的数据,在测试模型时你会得到相同的结果。

如果在拨浪鼓之前执行

那么这个dataset_validate现在将作为R数据集在evaluation标签中可用。但模型检查的结果最终将是相同的,因为如果你只是选择csv文件选项并指定文件C:/dummy_set_validation.csv,两种情况下测试的数据将是相同的。

训练本身是在一个不同的文件上进行的,即dummy_set_features.csv,所以在这里向前看是不可能的,因为两个文件中的数据是不同的,而且完全不受时间影响(但受公式影响)。我认为神经元做得很好,找到了决定结果的6个输入,减少了其他输入的影响,并以自己的一些神经逻辑描述了所需的公式。

为了以防万一,我检查了这两个文件,以找到重复的字符串,如果有的话。以下是R语言的代码。

如果这是在 rattle 之前完成的,那么dataset_train 和dataset_validate 表都可以用于训练和模型检查,而且不会有任何重复。荣耀R.

模型验证文件包含23个重复的训练样本,但除此之外,它还有3000个独特的行,所以模型评估不可能受到很大影响。

显然,我没有能力解释我想要什么。

1.你能不能给出两个文件的开始和结束日期?

2.从dataset_validate 文件中不能删除任何东西,因为这个文件模拟了一个又一个柱状物的到来

 

今天早上我又想了一下这个问题,这真的不是那么简单。

根据你的公式,只有2^6=64种输入组合在使用。如果学习算法以某种方式确定了这6个输入的重要性,那么它很可能会记住所有64个组合。然后,验证样本中的所有输入的组合是唯一的,这并不重要,模型将只采取这6个重要的输入,并确定已经知道的答案。这就是我的神经元的工作方式。我现在已经从训练文件中删除了1,3,5,7,9,11的几个输入组合,但在验证文件中留下了类似的组合。训练期间的误差仍为0%,但在验证期间,这些新组合的误差增加到50%。这很糟糕,在外汇市场上,点差会把存款变成负数。SanSanych是对的,这都是再培训的问题,我承认我错了。

显然,这就是为什么许多模型在外汇中不起作用的原因,它们只是记住了某些组合,但不能应付新的组合。

 
桑桑尼茨-弗门科

显然,我没有能力解释我想要什么。

1.你能不能给出两个文件的开始和结束日期?

2.从dataset_validate 文件中不能删除任何东西,因为这个文件模拟的是一个又一个的条形图 的传入。

不,这就对了,我明白了。你所说的适用于外汇,我同意这一点。但我说的是阿列克谢的文件和对它们进行的模型训练。

https://c.mql5.com/3/96/dummy_set_features.zip - 培训

https://c.mql5.com/3/96/dummy_set_validation.zip - 验证

文件中的结果由公式 "1-mod(sum(input_1 ; input_3 ; input_5 ; input_7 ; input_9 ; input_11);2) "定义。

请给我一个你提到的那些文件的链接,我将尝试用它们来训练神经元。

 
伙计们。

我的想法是对的,森林对所有的数据都进行了过度训练,尽管我已经强调了重要的特征。它需要清除数据并再次训练。

没有数据清洗的NS是否可以学习?

谢谢你
 
Dr.Trader:

不,这就对了,我明白了。你所说的适用于外汇,我同意这一点。但我说的是阿列克谢的文件,以及对它们的模型训练。

https://c.mql5.com/3/96/dummy_set_features.zip - 培训

https://c.mql5.com/3/96/dummy_set_validation.zip - 验证

文件中的结果由公式 "1-mod(sum(input_1 ; input_3 ; input_5 ; input_7 ; input_9 ; input_11);2) "定义。

请给我一个你提到的那些文件的链接,我将尝试在这些文件上训练神经元学。

给你,在档案馆里。

这就是RData。打开R,加载拨浪鼓,从它那里可以得到数据框架

"R1.F1" "R1.F3" "R1.F4" "R1.F5" "R1.F6" - 这是用于训练的,有不同的目标变量,用Fi标记。

"R2.F1" "R2.F3" "R2.F4" "R2.F5" "R2.F6" - 这是用于测试的。

"Rat_DF1" "Rat_DF2" "Rat_DF3 "是包含所有目标变量的文件。

附加的文件:
ALL_cod.zip  3281 kb
 
阿列克谢-伯纳科夫
伙计们。

我的想法是对的,森林对所有的数据都进行了过度训练,尽管我已经强调了重要的特征。它需要清除数据并再次训练。

没有数据清洗的NS是否可以学习?

谢谢你
是的,对于第一个帖子中的这项任务来说,就是这样。但是,如果将NS应用于外汇,那么在垃圾上的NS也会过度训练,在新数据上的效果会更差,所以输入数据的选择也与此有关。
 
Dr.Trader:
是的,对于这个任务来说,从第一个帖子开始就是这样的。但如果你将NS应用于外汇,垃圾上的NS也会过度训练,在新数据上表现更差,所以输入数据的选择也与此有关。

d 测试数据是干净的。因此,在任何地点都有一个模式。在真实的数据上,你不能不把训练样本分成几个部分,在训练模型时控制一个子样本或几个子样本的性能。这是一个简单明了的经验法则。

但为了测试像随机森林 这样的 "开箱即用 "的模型的可再训练性,看到它们直截了当地学习噪音--在验证时完全是一团糟--是很有用的。虽然,他们确实正确地选择了重要的预测因素。

但是,即使在干净的数据上,14个预测器是纯粹的噪音(随机输入的数字,没有联系和输出),森林也开始使用它们进行训练。这是我自己以前遇到过的事情。

还有一个方面,一个非常重要的方面。测试实例包含相互独立的观测值。每一行都不依赖于其他任何一行。在现实中,在一个时间序列上,相邻的观测值会有依赖性。例如,一个挥舞的球的两个相邻的值将高度相关。因此,任何--我强调,任何--方法都会在原始真实数据上失败。理想情况下,为训练准备真实数据的正确方法是选择它,使相邻的观测值没有物理上的联系。对于时间序列来说,这意味着如果你采取的指标的窗口是20,那么训练样本中的相邻观测值应该至少相隔20步。因此,它们之间没有相互关系。然后统计学和适当的模式学习开始发挥作用,而不是类似数据的随机积累。我希望你能理解我的意思。

当我出差回来后,我也会在公开场合用真实的外汇数据做一个实验。而且也许已经在一起做了,以从模式中获利为实际目标。

ǞǞǞ

 
Dr.Trader:

但由于NS就像一个黑匣子,不可能知道解决方案的逻辑。你可以看一下权重,确定每个输入的平均绝对值,并画一个图。并发现1、3、5、7、9、11比其他的更重要。然而,其余的输入也因为某种原因被使用;零权重无处可寻。换句话说,反之亦然,首先我们要学习,然后我们才能确定重要的投入。

尝试某种NS对比算法。该算法可以自我筛选输入(你不必通过 "手动 "浏览来剔除它们)和连接(当然还有隐藏层神经元)。输出将是一个操作逻辑的总结。
 
SanSanych Fomenko:

给你,在档案馆里。

这就是RData。打开R,加载拨浪鼓,从它那里可以得到数据框架

"R1.F1" "R1.F3" "R1.F4" "R1.F5" "R1.F6" - 这是用于训练的,有不同的目标变量,用Fi标记。

"R2.F1" "R2.F3" "R2.F4" "R2.F5" "R2.F6 "用于测试

"Rat_DF1" "Rat_DF2" "Rat_DF3 "是包含所有目标变量的文件。

谢谢,试了一下。看起来你为选择预测器 做了很多工作,因为神经元很容易对它们进行训练,并将结果也存储在检查数据集上。

下面的结果是指关于R1.F3的培训。

1)响声是一个有趣的结果。采用标准配置的HH显示出30%/29%/33%的训练/验证/测试误差。R2.F3的误差为35%。但这一切真的只是一个幸运的案例,在其他配置中,它很容易训练不足或训练过度,在这里它只是幸运。

2)然后我采取了一个简单粗暴的无监督学习方法,200个隐藏的神经元,网络被训练到停止改进。错误训练/验证/测试/R2.F3 - 2%/30%/27%/45%。很明显,网络被重新训练。

3)监督下的学习。这与树木不同,但你应该始终对一个神经元这样做,不要过度训练它。它的本质是偶尔暂停训练,检查训练/验证/测试结果。我不知道结果整理的黄金法则,但很正常的做法是在训练数据集上进行训练,然后在验证和测试数据集中寻找错误,当验证/测试中的错误不再下降时停止训练。这为防止过度训练提供了某种保障。在这整个过程中,R2.F3被认为是不可用的,测试只在训练结束后进行。在这种情况下,训练/验证/测试/R2.F3的误差为27%/30%/31%/37%。这里又有过度训练的情况,但不多。你可以在列车误差明显小于验证/测试误差后提前停止学习过程,但这只是猜测......可能有帮助,也可能没有帮助。

R1.F1 "目标变量有三个值,Rattle不能用神经元做这个,你必须在R中自己写代码,我跳过这个数据集。

"R1.F4""R1.F5""R1.F6 "在Rattle neuronka中对所有4个错误给出了大致相同的结果,我认为用neuronka的适当方法也会得到大致相同的结果,我没有进一步处理它们。

 

关于教学方法。

在此,我介绍了一种通常适用的标准方法,并给出了良好的结果:https://www.mql5.com/ru/blogs/post/661499

让我简单解释一下:将所有数据分为2部分--训练和验证。验证应该是你认为需要的那么大。我做了以下工作。我拿了15年的一分钟报价。我计算了进场和出场,我对数据进行了稀释,以便观察到的数据在物理上是不同的(我通过n个柱子来进行,其中n不小于指标中使用的最大窗口,也不小于最远的滞后)。思考一下为什么这是正确的。数据变得相互独立。

接下来我把训练的部分(最大的部分)--10年最远的过去。我为交叉验证创建了行索引。也就是说,我把数据分成5个相等的块,按日期硬性分开。在交叉验证过程中,模型通过训练参数,如深度、迭代次数等,在四个现货训练块上进行训练,并在五分之一的训练块上测量误差。它这样做了5次,每次从5个测试部分中选择一个不同的测试。它得到五个误差指标(对于一组训练参数)。它们被平均化并作为未参与训练的数据的测试误差值给出。

然后,该模型做了n * m * s * d次这样的工作,其中n,m,s,d是训练参数。这是一个基于网格的枚举。它可以达到数百次的迭代。你可以做一个随机的搜索或一个遗传的搜索。Ez Yu vish。

然后我们得到一个与学习参数集相对应的交叉验证误差指标表。我们应该只取最好的结果和这些参数。然后在这些参数上训练整个训练样本。还将为NS规定一个迭代次数的限制,以便不发生过度训练。

并在最后对5年的报价进行验证,以评估样本外的性能。

总而言之,到目前为止,交叉验证是有效模型训练的最佳选择。我建议你试一试。

R中的包是caret。

再见。

阿列克谢

СОПРОВОЖДЕНИЕ ЭКСПЕРИМЕНТА ПО АНАЛИЗУ ДАННЫХ ФОРЕКСА: первое серьезное обучение модели и результаты
СОПРОВОЖДЕНИЕ ЭКСПЕРИМЕНТА ПО АНАЛИЗУ ДАННЫХ ФОРЕКСА: первое серьезное обучение модели и результаты
  • 2016.02.27
  • Alexey Burnakov
  • www.mql5.com
Начало по ссылкам: https://www.mql5.com/ru/blogs/post/659572 https://www.mql5.com/ru/blogs/post/659929 https://www.mql5.com/ru/blogs/post/660386 https://www.mql5.com/ru/blogs/post/661062