記事「MQL5でONNXモデルを使用する方法」についてのディスカッション - ページ 2

 
Quantum #:

ビデオの最初のコメントでは、tensorflowのバージョン2.10.0を明示的に指定する必要があることに注意してください。

ありがとう、つまり

Maxim Dmitrievsky#:
そのような予測は素朴な予測(前回の終値の値を予測として用いる)と変わらないので、そこで実験する意味はない。この場合、学習誤差(RMS)はほとんど最小となり、モデルの予測能力については何も語らない。むしろ、ONNXの教育的な例であり、複雑なアーキテクチャーでも簡単に端末に転送できる。時系列予測のためのニューラルネットワーク・アーキテクチャの研究に関する論文の著者が何を吸っていたのかは分かりませんが :) ここでは推定が正しく必要なのか、回帰の代わりに分類が必要なのかのどちらかです。

残りの20%のテストローソクが関与している写真の例を説明してください。それは順張りですか?なぜ予測は実際の価格とほぼ完全に一致しているのに(写真から判断すると、2本のローソク足のように見えますが、1本だけバーがずれています)、テスターは少し悲しいのでしょうか?

削除済み  
Ivan Butko #:

残りの20%のテストキャンドルが関与している写真の例を説明してください。フォワードですか?なぜ予測は実際の価格とほぼ完全に一致している(写真から判断すると、2本のローソク足のように見え、1本だけバーがずれている)が、テスターでは若干の悲しみがあるのでしょうか?

あなたは自分の質問に答えました、あなたは予測として遅行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を予測値として得るということです(通常、1回の後方シフトを伴います)。これは、標準的なメトリクスを使ってトレーニングするときのよく知られたトリックで、この結果で最小化されます。

上に、他のメトリクスについて読むためのリンクを追加しました。

このトピックに関する記事が必要です。

削除済み  
Quantum #:

このトピックに関する記事が必要だ。

どうやらエネルギーからのメトリクスも適していないようだ。
 
Maxim Dmitrievsky #:
どうやらエネルギー業界の指標も当てはまらないようだ。

グーグルで最適な予測指標を 検索すると、MAPE (平均絶対誤差率)が出てきます。

また、
予測精度に使われる最も一般的な指標は何
ですか?
MAPE:Mean Absolute Percentage Error(平均絶対誤差)は、予測精度をチェックするために最も広く使用されている指標です。 これは、スケールに依存しないパーセンテージ誤差であり、異なるスケールの系列を比較するために使用することが できます。

kerasモデルの最適化でメトリクスを明示的に使用するには、#13の ようにではなく、損失関数として明示的に指定する必要があります。

Pythonでの100以上の回帰メトリクスの実装はこちら(Akaike Information Criterion、Aitchison distance、Amemiya's Adjusted R-squared、Amemiya's Prediction Criterion、Bias as and given by Gupta、Bayesian Information Criterion、Brier score、Pearson correlation coefficient、Centered root-mean-square (RMS) difference、Decomposed MSE developed by Kobayashi and Salam...)。

MAPEメトリックの最適化の例(テンソルのため、numpyの数学関数の代わりにkerasを使用する必要があります)。

# 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以上の回帰メトリクスの実装はこちら(Akaike Information Criterion、Aitchison distance、Amemiya's Adjusted R-squared、Amemiya's Prediction Criterion、Bias as and given by Gupta、Bayesian Information Criterion、Brier score、Pearson correlation coefficient、Centered root-mean-square (RMS) difference、Decomposed MSE developed by Kobayashi and Salam...)。

しかし、MAPEを最適化プロセスに使用すると、ここでもシフトが得られた。

おそらく、メトリクスの積という形で、より複雑な最適化の方向性を検討する必要があるのだろう。

このテーマについては、詳細な研究が必要である。

IMHOは、問題は常にメトリクスにあるのではなく、予測のために選択されたデータの構造にあると考えます。例えば、埋め込み空間を通してベクトルをサンプリングしてみてください(系列の自己相関が消えるステップでサンプルを取ってください)。

ニュースの背景がない系列の一部を切り出してつなぎ合わせれば、結果は受け入れられるはずです。

 
Stanislav Korotky #:

IMHOでは、問題は常にメトリックにあるのではなく、予測のために選択されたデータの構造にある。例えば、埋め込み空間を通してベクトルをサンプリングしてみてください(系列の自己相関が消失するステップでサンプルを取る) - より実際の予測に近い予測が得られるでしょう - これはMAのような遅延がないことを意味するだけでなく、時には非常に間違っていることも意味します ;-)。

これはMA的な遅延がないことを意味するだけでなく、時には間違っていることを意味する。ここでは、データ間の関係(市場には複雑なものがある)の性質に大きく依存するようだ。

私が理解する限り、新しい情報がない場合(あるいは線形変換の意味でその役割が重要でない場合)、最適 な予測は過去の値になります(ただし、正しく考慮されていれば、実験は必要ですが、それほど間違ってはいないはずです)。

メトリックス(ネットワーク重みの最適化の「方向性」)については、(金融時系列については)私が理解する必要があると思うので、この問題は別の記事が必要である。

皆さんの経験を共有してください。

削除済み  
インクリメント/インクリメントのログを取る必要がある。自己相関/サイクル/ボラティリティのクラスタリングを 取り除く。そうすれば、標準的な測定基準は正しく機能するはずだが、誤差はそれに応じて大きくなる。
 

どんな機械学習プロジェクトも、3つの段階から構成される:

  • 前処理
  • モデル選択、トレーニング、最適化など
  • 実装

μlでONNXモデルを使用することで、実装の問題が解決される。すべてのモデルではなく、かなり簡単ではないことは事実である。

モデルのトレーニングと最適化は、Pythonの別プロセスで解決する。

しかし上記の中でも、最初の段階は最も時間がかかり、創造性が高く、最も重要である。そして、それをµl上で実現することは不可能である。私たちはプリミティブ・スケーリングを前処理とは考えていない。そして、「Garbage in - rubbish out(ゴミを入れればゴミは出ていく)」という民間の知恵がある。MCLだけでMOをフル活用するためには、MCLで追加開発・実装すべきことが多すぎる。特に、MOは常に拡大し続けているため、膨大なものを受け入れることはできない。

したがって、プリプロセスを実行するには、他の言語(R/Python/Juliaなどをマスターしている人)で作るか、ONNXへの変換を試みる。

これまでのONNX実装の利点は、ONNXモデルの変換、作成、単純化、最適化の方法を学べることである。将来役に立つかもしれない。