文章 "如何在 MQL5 中使用 ONNX 模型" - 页 2

 
Quantum #:

在视频的第一条评论中,请注意您需要明确指定 tensorflow 版本为 2.10.0

谢谢,我是说

马克西姆-德米特里耶夫斯基(Maxim Dmitrievsky #:
在这里做实验没有意义,因为这样的预测与天真的预测(将前一个收盘价的值作为预测值)没有区别。在这种情况下,你真的会得到几乎最小的学习误差(均方根),这对模型的预测能力没有任何意义。相反,这是 ONNX 上的一个教育性例子,说明即使是复杂的架构也可以很容易地转移到终端上。我不知道那篇关于研究用于时间序列预测的神经网络架构的文章的作者在抽什么烟:)这里要么需要正确的估计,要么需要分类而不是回归。

请解释一下图片中涉及另外 20% 测试烛光的例子。它是正向的吗?为什么预测结果与实际价格几乎完全吻合(从图片上看,就像两根蜡烛图,只是其中一根移动了一格),但测试者却有点伤心?

 
Ivan Butko #:

请解释一下图片中涉及另外 20% 测试蜡烛的例子。这是远期吗?为什么预测几乎与实际价格完全吻合(从图片上看,就像两根蜡烛图,只是其中一根移动了一格),但在测试器中却有一些遗憾?

你已经回答了自己的问题,即你得到了一个滞后的 MA 作为预测(通常有一个回档)。在通过标准指标进行训练时,这是一个众所周知的窍门,其结果是将标准指标最小化。

我在上面添加了一个链接,可以阅读其他指标。
 

https://stackoverflow.com/questions/65316205/implementation-os-nmae-as-metric-with-keras

from keras import backend as K
def NMSE_metric(y_true, y_pred):
    nmse = K.square(y_true - y_pred)/K.square(y_true+1 e-8)
    return nmse
#define the model
model = Sequential()
model.add(Conv1D(filters=256, kernel_size=2,activation='relu',padding = 'same',input_shape=(120,1)))
model.add(MaxPooling1D(pool_size=2))
model.add(LSTM(100, return_sequences = True))
model.add(Dropout(0.3))
model.add(LSTM(100, return_sequences = False))
model.add(Dropout(0.3))
model.add(Dense(units=1, activation = 'sigmoid'))
model.compile(optimizer='adam', loss= 'mse' , metrics = [NMSE_metric])


Implementation os NMAE as metric with Keras
Implementation os NMAE as metric with Keras
  • 2020.12.16
  • Patrick Luiz Patrick Luiz 1
  • stackoverflow.com
To do so, I'm trying with this code: The NNet I'm building is this: The problem is that NMSE_metric just gave inf. Any hint?
 
Maxim Dmitrievsky #:

你回答了自己的问题,即你得到了一个滞后的 MA 作为预测值(通常是单向后移)。在通过标准指标进行训练时,这是一个众所周知的窍门,其结果是将标准指标最小化。

我在上面添加了一个链接,可以阅读其他指标。

我们需要一篇关于此主题的文章。

 
Quantum #:

我们需要一篇关于这个主题的文章。

显然,能量指标也不适合:)我不知道有什么好的解决方案,所以我改用了分类法。
 
Maxim Dmitrievsky #:
显然,能源行业的指标也不适合:)我不知道有什么好的解决方案,所以我转向了分类。

在谷歌搜索最佳预测指标 时,出现了 MAPE (平均绝对百分比误差)。

人们还会问
预测准确性最常用的指标是什么
MAPE:平均绝对百分比误差(Mean Absolute Percentage Error)是检查预测准确性最常用的指标。 它属于百分比误差,与尺度无关,可用于比较不同尺度的序列

要在优化 keras 模型时明确使用指标,应将其明确指定为损失函数,而不是#13

在这里 可以找到 100 多个回归指标在 Python 中的实现(阿凯克信息准则、艾奇逊距离、阿米尼亚调整 R 方、阿米尼亚预测准则、古普塔给出的偏差、贝叶斯信息准则、布赖尔得分、皮尔逊相关系数、居中均方根(RMS)差、小林和萨拉姆开发的分解 MSE......)。

MAPE 指标优化示例(由于张量的原因,应使用 keras 而不是 numpy 数学函数)。

# example from https://github.com/AtrCheema/SeqMetrics/blob/master/SeqMetrics/_rgr.py
# Mean Absolute Percentage Error (MAPE)
# The MAPE is often used when the quantity to predict is known to remain way above zero_.
# It is useful when the size or size of a prediction variable is significant in evaluating the accuracy of a prediction_.
# It has advantages f scale-independency and interpretability.
# However, it has the significant disadvantage that it produces infinite or undefined values for zero or close-to-zero actual values_.
# .. _zero:
# https://doi.org/10.1016/j.neucom.2015.12.114 // Mean Absolute Percentage Error for regression models
# .. _prediction:
# https://doi.org/10.1088/1742-6596/930/1/012002 // Forecasting Error Calculation with Mean Absolute Deviation and Mean Absolute Percentage Error
# .. _values:
# https://doi.org/10.1016/j.ijforecast.2015.12.003 // A new metric of absolute percentage error for intermittent demand forecasts

from keras import backend as K
def MAPE_metric(y_true, y_pred):
    return (K.mean(K.abs((y_true - y_pred) / (y_true+1e-8)) * 100))

#define the model
model = Sequential()
model.add(Conv1D(filters=256, kernel_size=2,activation='relu',padding = 'same',input_shape=(120,1)))
model.add(MaxPooling1D(pool_size=2))
model.add(LSTM(100, return_sequences = True))
model.add(Dropout(0.3))
model.add(LSTM(100, return_sequences = False))
model.add(Dropout(0.3))
model.add(Dense(units=1, activation = 'sigmoid'))
model.compile(optimizer='adam', loss=MAPE_metric , metrics = [MAPE_metric])

其优化过程如下

预测图:


不过,在这里的优化中使用 MAPE 也产生了偏移。

也许我们需要考虑以度量乘积的形式进行更复杂的优化方向。

这个问题需要详细研究。

Обсуждение статьи "Использование ONNX-моделей в MQL5"
Обсуждение статьи "Использование ONNX-моделей в MQL5"
  • 2023.03.29
  • www.mql5.com
Опубликована статья Использование ONNX-моделей в MQL5 : Автор: MetaQuotes...
 
Quantum #:

谷歌的最佳预测指标 显示 MAPE (平均绝对百分比误差)

要在优化 keras 模型时明确使用指标,应将其明确指定为损失函数,而不是#13

Python 中可以找到 100 多个回归度量的实现(阿凯克信息准则、艾奇逊距离、阿梅米亚调整 R 方、阿梅米亚预测准则、古普塔给出的偏差、贝叶斯信息准则、布赖尔得分、皮尔逊相关系数、居中均方根(RMS)差、小林和萨拉姆开发的分解 MSE......)。

然而,在优化过程中使用 MAPE 时,这里也出现了偏移。

也许我们需要考虑以度量乘积的形式进行更复杂的优化。

这个问题需要详细研究。

在我看来,问题始终不在于度量,而在于为预测而选择的数据结构--在本例中,我们选择了一组最 "直接 "的样本。例如,试着在嵌入空间中对向量进行采样(在序列的自相关性消失的步长内采样)--你会得到与真实预测更相似的预测结果--这不仅意味着不存在类似 MA 的延迟,还意味着有时会非常错误;-)。

如果将没有新闻背景的部分序列咬出来并粘合在一起,结果应该是可以接受的。

 
Stanislav Korotky #:

在我看来,问题始终不在于指标,而在于为预测而选择的数据结构--在本例中,我们选择了一组最 "直接 "的样本。例如,试着在嵌入空间中对向量进行采样(在序列的自相关性消失时进行采样)--你会得到与真实预测更相似的预测结果--这不仅意味着不存在类似 MA 的延迟,还意味着有时会非常错误;-)。

这就需要更复杂的数据预处理过程,并需要对该主题进行单独处理。看来,这在很大程度上取决于数据之间关系的性质(市场有复杂的关系)。

据我所知,如果没有新信息(或者从线性变换优化信号处理、1.4 取消相关性、1.5 格兰-施密特正交化的意义上讲,新信息的作用微不足道),那么最佳预测值将是过去的值(但如果正确地考虑到新信息,预测值应该不会有太大错误,尽管这还需要实验)。

关于指标(网络权重优化的 "方向"),我认为有必要了解一下(对于金融时间序列),这个问题需要单独写一篇文章。

我们邀请大家分享经验。

 
需要获取增量/增量的对数。消除自相关/周期/波动聚类。这样,标准指标就能正常工作,但误差也会相应增加。
 

任何机器学习项目 都包括三个阶段:

  • 预处理
  • 模型选择、训练、优化等
  • 实施

在 µl 中使用 ONNX 模型解决了实施问题。诚然,并非所有模型都是如此,也并非十分容易。

模型的训练和优化由 Python 中的单独流程解决。

但在上述所有过程中,第一阶段是最耗时、最具创造性和最重要的。而且不可能在 µl 上实现。我们不认为原始缩放是预处理。民间智慧说:"垃圾进,垃圾出"。要在 MCL 上充分使用 MO,需要在 MCL 上额外开发和实施的东西太多了。尤其是当它在不断扩展时,你就无法拥抱它的巨大。

因此,要执行预处理,要么用其他语言(掌握 R/Python/Julia 等语言的人),要么尝试将其转换为 ONNX。

目前实施 ONNX 的好处是,我们将学习如何转换、创建、简化和优化 ONNX 模型。这在未来可能会很有用。