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

 
vladavd #:

在这种情况下,新的东西是一个之字形和一条沿其而建的通道,这就是前卫的工程。

你看到的还不止这些。

这只是允许范围的 5%。)

lynxntech#:

这就像最后一个词和一个汉堡包。)

你总得给自己一个自圆其说的机会。

 

大家好

也许有人能给我一些建议。我正在尝试使用 "DecisionTreeClassifier "模型预测货币对当天的走向(上涨或下跌)。

我只使用 5 个预测因子进行预测,预测结果是上升(1)或下降(-1)趋势。数据集大小:999 行 6 列(数据集附后)。

但我遇到了一个问题,当增加 "max_depth "时,训练样本和测试样本的准确率会同时增加。测试样本的准确率停止增长,在max_depth=22 时变成一个常数 等于 0.780000。不同 max_depth 值下的结果:


1) clf_20=DecisionTreeClassifier(criterion='entropy', max_depth=3)

训练集准确率: 0.539424 测试集准确率: 0.565000

2) clf_20=DecisionTreeClassifier(criterion='entropy', max_depth=5)

训练集上的准确度: 0.579474 测试集中的准确度: 0.585000

3) clf_20=DecisionTreeClassifier(criterion='entropy', max_depth=7)

训练集上的准确度: 0.637046 测试集中的准确度: 0.640000

4) clf_20=DecisionTreeClassifier(criterion='entropy', max_depth=9)

训练集上的 准确度: 0.667084 测试集中 的准确度: 0.700000

5) clf_20=DecisionTreeClassifier(criterion='entropy', max_depth=11)

训练集上的准确度: 0.700876 测试集上的准确度: 0.710000

6) clf_20=DecisionTreeClassifier(criterion='entropy', max_depth=13)

训练集上的准确度: 0.720901 测试集上的准确度: 0.720000

7) clf_20=DecisionTreeClassifier(criterion='entropy', max_depth=15)

训练集上的准确度: 0.734668 测试集上的准确度: 0.740000

8) clf_20=DecisionTreeClassifier(criterion='entropy', max_depth=17)

训练集上的准确度: 0.747184 测试集上的准确度: 0.760000

9) clf_20=DecisionTreeClassifier(criterion='entropy', max_depth=19)

训练集上的准确度: 0.755945 测试集中的准确度: 0.765000

10) clf_20=DecisionTreeClassifier(criterion='entropy', max_depth=22)

训练集上的准确度: 0.760951 测试集上的准确度: 0.780000


这种情况让我非常困惑,因为我听说max_depth 不应超过 3-4,因为可能会出现重新训练的情况。但在重训练时,模型的表现会是这样吗?它看起来更像是一个未充分训练的模型。

我不明白在这种情况下,应该选择什么样深度的决策树,甚至什么样的模型,总之,是否值得在这个方向上继续努力,也许还缺少什么(但数据集不是 100 行),是否有可能添加更多的预测因子,以及在这样大的数据集上可以添加多少预测因子(我想再添加 2-5 个)。

代码很简单,我把它和数据集一起附上:



附加的文件:
 
Elvin Nasirov #:

我对这种情况感到非常困惑,因为我听说max_depth 不应超过 3-4,因为有可能进行再训练。但重新训练后的模型是这样的吗,它看起来更像是一个训练不足的模型。

我不明白在这种情况下,应该选择什么样深度的决策树,或者甚至是什么样的模型,总之,是否值得在这个方向上继续努力,也许缺少了什么(但数据集不是 100 行),是否可以添加更多的预测因子,以及在这样大的数据集中可以添加多少预测因子(我想再添加 2-5 个)。

代码很简单,我把它和数据集一起附上:

您好。

更多的分割数 - 更多的内存 = 学习样本的风险。

我不精通 Python,但是

1.尝试在不混合的情况下分割样本。

2.在我看来,你仍然是在学习整个样本,而不是缩小样本。

 
Aleksey Vyazmikin #:

你好

更多的拆分次数 - 更多的记忆 = 学习样本的风险。

我不精通 Python,但是:

1.尝试在不混合的情况下分割样本。

2.在我看来,您是在整个样本上进行训练,而不是在缩小的样本上。

谢谢!看来你是对的。

我将上述代码中的 "clf_20.fit(X, y) "替换为 "clf_20.fit(X_train, y_train)",结果几乎各占一半。

 
Elvin Nasirov #:

谢谢我想你是对的。

我将上述代码中的 "clf_20.fit(X, y) "替换为 "clf_20.fit(X_train, y_train)",结果几乎各占一半。

出现这样的结果很正常--太好的结果总是让人有理由开始寻找代码中的错误。

 
Aleksey Vyazmikin #:

出现这种结果是正常的--太好的结果总是让人有理由开始寻找代码中的错误。

如果可以的话,我还有一个问题。

事实证明,在 max_depth=1 时结果最好,如下所示:

训练集准确率:0.515021 测试集准确率:0.503333

这似乎非常糟糕,相当于掷硬币的概率。我们是否可以认为这是一个好结果,并得出结论:我们已经找到了一种形式化方法,可以将外汇走势的概率与掷硬币的结果概率持平?

也就是说,现在的情况是,对于每个预测因子的组合,市场走势都有两种等效的变体:上涨或下跌,因此有必要在数据集中补充一些东西,以明确当前组合仍然是上涨或下跌。

 
Elvin Nasirov #:

请允许我提出另一个问题。

结果发现,在 max_depth=1 时效果最好,看起来像这样:

训练集准确率:0.515021 测试集准确率:0.503333

这似乎非常糟糕,相当于掷硬币的概率。我们是否可以认为这是一个很好的结果,并得出结论:我们已经找到了一种形式化的方法,可以将外汇走势的概率与掷硬币的概率持平?

也就是说,现在的情况是,对于每个预测因子的组合来说,市场走势都有两种等效的变体:上涨或下跌,因此有必要对数据集进行补充,以明确当前的组合仍然是上涨或下跌。

首先了解一下评估训练结果的其他指标 - Recall(完整度)和 Precision(准确度),它们与不平衡采样尤其相关。策略可能是在正确和错误结果几率相同的情况下,为分类产生积极的财务结果。

考虑一个更复杂但更合理的目标标记。确定当日开盘时的收盘情况比确定当日开盘时一定百分比的涨跌概率更困难--有可能识别出盘中形态。

对我来说,样本太小了。

想想看,创建能够描述市场的预测器。在我看来,从预测指标中应该可以还原图表上的情况,而无需查看图表。

我建议尝试使用 CatBoost 进行训练 - 它可以快速建立模型,并解决了将模型转化为代码以便在 MT5 中使用的问题,而无需拐杖。

 
Elvin Nasirov #:

结果发现,当 max_depth=1 时,效果最好,看起来像这样:

训练集准确率:0.515021 测试集准确率:0.503333

我还经常发现,最佳结果出现在深度=1 时,这意味着只对其中一个特征进行了一次分割。对树的进一步分割会导致训练集上的过度训练和测试集上更差的结果。

 
elibrarius #:

我还经常发现,最佳结果出现在深度=1 时,这意味着只对其中一个特征进行了一次分割。对树的进一步分割会导致对树的重新训练和测试结果的恶化。

昨天检查了结果,发现所有情况下的模型平均预测结果都是 "1",因此各占一半。你可以不用这个模型--一直说 "向上 "就可以了。

 
作为专业职业交易员进行交易
https://youtu.be/RS9jRVmW1j4

这就是我理解的支撑位和阻力位.....

不是每个人都能理解,但如果他们理解了,那就为他们点赞....

EARNING SEASON KICKS OFF - Trading Futures Live
EARNING SEASON KICKS OFF - Trading Futures Live
  • 2023.01.13
  • www.youtube.com
Join our FREE Discord community https://discord.gg/zhvUwUUhFirst 5 days of January bullish were followed by Full-year gains 83% of the time since 1950.Earnin...