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

 
桑桑尼茨-弗门科

训练、再训练和过度训练从根本上说是不同的事情。

所有这些关于每个新酒吧的培训,在这个论坛上和TA内部都被嚼烂了,嚼烂了。

在反对过度训练(overfitting)的斗争中,我知道两种方法。

1.从与目标变量无关的预测器中清理预测器集--从输入的预测器集的噪声中清理。这个主题的前100个帖子详细地讨论了这个问题。

2.在对预测因子集进行清理后,我们开始用训练样本拟合模型,然后用测试和验证样本,这些样本是来自一个文件的随机样本。所有三组的误差应该大致相同。

3.然后取一个与前一个文件分开的文件,在其上运行模型。同样,误差应该与之前的差不多。

4.如果定期进行这些检查,"20%的下滑是重新训练的信号 "的问题就根本不会被问到,因为前三个步骤的结果是下滑作为一个模型参数,超过这个参数就说明模型不工作了,一切都应该重新开始。


嗯,这都是一般的情况,是的。而在每一种情况下,你都需要与每个特定的TS进行更多的合作,然后当它被训练得很好时,当它被重新训练时,当它有时期时,理解就会到来。例如,买入/卖出比率应大致相同,训练样本应包含上升趋势、下降趋势和平坦,否则就是单向抽样。在这种情况下,最主要的是不要 "过度训练 "自己 :)

另外,季节性因素、危机因素和其他许多不同的规律性因素也需要考虑到。

 
桑桑尼茨-弗门科

1.清理预测器集合中与目标变量无关的预测器--清理输入预测器集合中的噪音。在这个主题的前100个里程碑中,这个问题得到了非常详细的讨论

最终出现了什么解决方案--如何识别与输出指令无关的预测因子?
 
elibrarius
最后的解决方案是什么--如何识别与输出指令无关的预测因子?
如何?- 这一切都取决于具体细节。我花了2天时间来解决一个简单的问题。现在,解决方案似乎显而易见了))。
 
尤里-阿索连科
如何?- 这一切都取决于具体细节。我花了两天时间来解决一个简单的问题。现在,解决方案似乎很明显))。
我想,也有一般的、普遍的原则?了解你的具体例子也很有意思。
 
埃利布留斯
我假设也有一般的、普遍的原则?好吧,知道你的特殊例子也很有意思。

在我的博客上查一查。

这些原则,是的,是普遍的。但没有一般的解决方案。除了某些类别的任务。

 

对前一百页的总结 :)

神经元和几乎所有其他流行的模型都离人工智能很远。他们可以简单地找到这样的预测值组合,以达到所需的学习精度,在未来的预测中,他们对过去的结果进行插值(或外推),以获得新的预测。

这意味着,如果我们以Ma、Rci和Stochastic为预测因子,并以人字形反转作为训练目标来训练神经网络--我们会对神经网络说 "这三个预测因子可以预测反转。而神经网络本身也不会知道这些预测因素是否真的适合。它将以可接受的精确度记住这些数据,在交易中,我们希望在反转之前保存Ma、Rci和随机指数的相同组合。但他们不会,而且会失败。

一个基于无用预测因子的模型将会失败,无论它是gbm、神经元还是回归。你甚至可以生成随机数列并将其作为预测器,神经元会在其中找到重复的组合并记住它们。
选择预测器和训练的目的,使用其他工具,这是人类数据挖掘者的任务。而训练模型(神经元)是倒数第二步的小事。

预测器必须与训练数据上的目标保持相关性,包括过去和未来。这就是为什么SanSanych谈到要在不同的文件上测试模型,只是为了确保找到的依赖关系不会因为新的数据而消失。
也就是说,我们仔细研究并收集预测因素和目标,训练模型并测试它。然后我们在模型的全新数据上进行测试。如果这两种情况下的预测准确率不一致,那么预测者或目标就不合适。我们应该寻找其他的。


SanSanych Fomenko:

NS可以预测非平稳序列吗?如果是这样,哪些类型的非平稳性?

在我看来,神经元学完全不适合于用价格来预测非平稳的时间序列。价格行为不断变化,发现的模式在下班后停止工作,一切都很混乱。然后有人拿着一个神经元库,给它几个月的价格,要求找到这段时间内重复的依赖关系。但没有重复的依赖性,神经元能找到并记住的东西将只是一个100%的随机巧合。

如果我们要使用一个神经元,那么我们应该只给它处理过的价格(而不是纯粹的ohlc),比如说指标。

 

谢谢你的总结,我没心情读100页...)

人工选择预测因子的过程,例如3的组合将需要很长的时间。在MT5中,有38个标准技术指标。3的组合--巨大的数字。此外,我们需要选择时期、价格类型和其他输入参数。而如果我们加入有趣的非标准指标,测试的数量将增加更多。

因此,我们应该寻找一种自动估计的指标。我在Vladimir Perervenko的 文章中发现了2种常见的方法。

1)去除高度相关的变量--它在R中实现。

2)选择最重要的变量--也是在R中解决的。

我还在直接用MT5写,可能这些问题有现成的解决方案?或者将解决方案从R转移到MT5的方法,至少在简化版....?

如果我们寻找指标的相关性,我们只需寻找每个指标对之间的差异---对每个柱状图进行总结---除以柱状图的数量。(或其他方式?)

随着最重要的--没有完全解决...

也许有一些其他方法可以清除预测器?

 
elibrarius

但我还是直接在MT5上写,也许已经有现成的解决方案来解决这些问题?或者将解决方案从R转移到MT5的方法,至少在一个简化的版本....?

要在MQL中一次写完,但依靠R并不是最好的选择。在R语言中开发一个策略,然后使用这个库https://www.mql5.com/ru/code/17468,从专家顾问中调用R语言代码,并在测试器中进行测试,这样做比较容易。
在创建和测试过程中,很可能会有很多东西被删除和改变,包、模型等的变化,在R本身中改变和测试都比较容易。

最后,当你喜欢它并且一切正常时,你可以尝试用手把代码移植到mql上。
R中使用的许多包实际上是用C/C++编写的,你可以在这里找到标准包的源代码https://cran.r-project.org/web/packages/available_packages_by_name.html。

 
交易员博士

对前一百页的总结 :)

神经元和几乎所有其他流行的模型都离人工智能很远。他们可以简单地找到这样的预测值组合,以达到所需的学习精度,在未来的预测中,他们对过去的结果进行插值(或外推),以获得新的预测。

这意味着,如果我们以Ma、Rci和Stochastic为预测因子,并以人字形反转作为训练目标来训练神经网络--我们会对神经网络说 "这三个预测因子可以预测反转。而神经网络本身也不会知道这些预测因素是否真的适合。它将以可接受的精确度记住这些数据,在交易中,我们希望在反转之前保存Ma、Rci和随机指数的相同组合。但他们不会,而且会失败。

在无用的预测因素上训练的模型会失败,无论是gbm、神经元学还是回归。你甚至可以生成随机数列并将其作为预测器,神经元会在其中找到重复的组合并记住它们。
选择预测器和训练的目的,是人类数据挖掘者的任务,使用其他工具。而训练模型(神经元)是倒数第二步的小事。

预测器必须与训练数据上的目标保持相关性,包括过去和未来。这就是为什么SanSanych谈到要在不同的文件上测试模型,只是为了确保找到的依赖关系不会因为新的数据而消失。
也就是说,我们仔细研究并收集预测因素和目标,训练模型并测试它。然后我们在模型的全新数据上进行测试。如果这两种情况下的预测准确率不一致,那么预测者或目标就不合适。我们应该再找一个。


在我看来,神经元学不适合预测非平稳的时间序列。价格行为不断变化,发现的模式在下班后停止工作,一切都很混乱。然后有人拿着一个神经元库,给它几个月的价格,要求找到这段时间内重复的依赖关系。但没有重复的依赖性,神经元能找到并记住的东西将只是一个100%的随机巧合。

如果我们使用一个神经元,那么我们可以只给它处理过的价格(而不是纯粹的ohlc),比如说指标。

问题不在于神经元本身或其他适用于市场的东西。问题是向DM工具输入了什么。而使用裸价作为输入,纯粹是疯狂的行为。

问题在于预测者,正如CC所说。也就是说,问题在于如何将一个非平稳序列表示为平稳序列。谁最接近解决这个问题,谁就是最好的。

 
交易员博士

用MQL写所有的东西,同时依靠R,这不是最好的解决方案。在R语言中开发策略,然后使用这个库https://www.mql5.com/ru/code/17468, 从专家顾问中调用R语言代码,并在策略测试器中进行测试,这样做比较容易。
在创建和测试时,很可能会有很多东西被删除和改变,包会被替换,模型会被改变等等。

最后,当你喜欢它并且一切正常时,你可以尝试用手把代码移植到mql上。
R中使用的许多包实际上是用C/C++编写的,你可以在这里找到标准包的源代码https://cran.r-project.org/web/packages/available_packages_by_name.html。

这很复杂...这将比理解算法(如上面的K-correlation)和编写算法花费更多时间。我认为尝试所有的输入,计算相关性,并筛选出高度相关的功能将需要几个小时。

我希望使用其他的解决方案来筛选出预测者也同样容易)。

那么,是否有其他的解决方案来寻找不必要的预测因素?

原因: