기고글 토론 "MQL5에서 ONNX 모델을 사용하는 방법" - 페이지 2

 
Quantum #:

동영상의 첫 번째 댓글에서 텐서플로 버전 2.10.0을 명시적으로 지정해야 한다는 점에 유의하세요.

고마워, 내 말은

막심 드미트리 예프 스키 #:
그러한 예측은 순진한 예측과 다르지 않기 때문에 실험 할 필요가 없습니다 (이전 종가의 가치가 예측으로 간주 됨). 이 경우 모델의 예측 능력에 대해서는 아무 말도하지 않는 거의 가장 작은 학습 오차 (RMS)를 얻습니다. 오히려 복잡한 아키텍처도 쉽게 터미널로 전송할 수 있다는 것을 보여주는 교육적인 예입니다. 시계열 예측을위한 신경망 아키텍처 연구에 관한 그 기사의 저자가 무엇을 피우고 있었는지 모르겠습니다 :) 여기에서는 추정이 올바르게 필요하거나 회귀 대신 분류가 필요합니다.

그림에서 나머지 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 #:
에너지 산업의 지표도 맞지 않는 것 같아서 :) 마땅한 해결책을 몰라서 분류로 전환했습니다.

Google에서 가장 좋은 예측 지표를 검색하면 MAPE (평균 절대 오차율)가 나옵니다.

사람들은 또한
예측 정확도에 가장 많이 사용되는 지표는 무엇인가
요?
MAPE: 평균 절대 백분율 오차는 예측 정확도를 확인하는 데 가장 널리 사용되는 측정값입니다. 오차는 척도에 독립적이며 서로 다른 척도의 계열을 비교하는 데 사용할 수 있는 백분율 오차에 속합니다.

케라스 모델을 최적화하는 데 메트릭을 명시적으로 사용하려면 #13과 같이 손실 함수로 명시적으로 지정해야 합니다.

100개가 넘는 회귀 메트릭의 Python 구현은 여기에서 확인할 수 있습니다(Akaike 정보 기준, Aitchison 거리, Amemiya의 조정된 R-제곱, Amemiya의 예측 기준, 굽타가 제시한 편향, 베이지안 정보 기준, 브리어 점수, 피어슨 상관계수, 중심근평균제곱(RMS) 차이, Kobayashi와 Salam이 개발한 분해된 MSE...).

MAPE 메트릭 최적화의 예(텐서 대신 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 #:

최고의 예측 지표를 위한 Google은 MAPE (평균 절대 오차 비율)를 표시합니다.

케라 모델을 최적화하는 데 메트릭을 명시적으로 사용하려면 #13에서와 같이 손실 함수로 명시적으로 지정해야 합니다.

100개 이상의 회귀 메트릭을 Python으로 구현하는 방법은 여기에서 확인할 수 있습니다(Akaike 정보 기준, Aitchison 거리, Amemiya의 조정된 R-제곱, Amemiya의 예측 기준, 굽타가 제시한 편향, 베이지안 정보 기준, 브리어 점수, 피어슨 상관계수, 중심 평균 제곱근(RMS) 차이, Kobayashi와 Salam이 개발한 분해 MSE... 등 참조).

그러나 최적화 프로세스에서 MAPE를 사용했을 때 여기에서도 변화가 나타났습니다.

아마도 우리는 메트릭의 곱의 형태로 보다 복잡한 최적화 방향을 고려해야 할 것입니다.

이 주제에 대해서는 자세한 연구가 필요합니다.

IMHO의 경우 문제는 항상 지표가 아니라 예측을 위해 선택한 데이터의 구조에 있습니다. 이 예에서는 가장 "간단한" 샘플 세트를 사용했습니다. 예를 들어 임베딩 공간을 통해 벡터를 샘플링 해보십시오 (계열의 자기 상관 관계가 사라지는 단계로 샘플을 채취) - 실제 예측과 더 유사한 예측을 얻을 수 있습니다 - 이는 MA와 같은 지연이 없을뿐만 아니라 때로는 매우 잘못 될 수도 있음을 의미합니다 ;-).

뉴스 배경 없이 시리즈의 일부를 잘라내어 함께 붙이면 결과가 괜찮을 것입니다.

 
Stanislav Korotky #:

IMHO의 경우 문제는 항상 메트릭이 아니라 예측을 위해 선택한 데이터의 구조에 있습니다. 이 예제에서는 가장 "간단한" 샘플 세트를 사용했습니다. 예를 들어 임베딩 공간을 통해 벡터를 샘플링해 보세요(계열의 자기 상관 관계가 사라지는 단계로 샘플을 채취) - 실제 예측과 더 유사한 예측을 얻을 수 있습니다 - 이는 MA와 같은 지연이 없을 뿐만 아니라 때로는 매우 틀릴 수도 있음을 의미합니다 ;-).

이를 위해서는 더 복잡한 데이터 전처리 프로세스와 별도의 주제 처리가 필요합니다. 여기서 많은 것은 데이터 간의 관계의 성격에 달려있는 것 같습니다 (시장에는 복잡한 관계가 있습니다).

내가 이해하는 한, 새로운 정보가 없거나 선형 변환 최적 신호 처리, 1.4 상관 관계 제거 1.5 그램-슈미트 직교화의 의미에서 그 역할이 중요하지 않은 경우 최상의 예측은 과거 값입니다 (그러나 정확하게 고려하면 실험이 필요하지만 많이 틀리지는 않아야합니다).

메트릭 ( 네트워크 가중치 최적화의 "방향")에 대해서는 (재무 시계열의 경우) 이해해야 할 필요가 있다고 생각하며, 질문에는 별도의 기사가 필요합니다.

모두가 자신의 경험을 공유하도록 초대합니다.

 
증분/증분 로그를 취해야 합니다. 자동 상관 관계/주기/변동성 클러스터링을 제거합니다. 그러면 표준 지표가 올바르게 작동해야 하지만 그에 따라 오류가 증가합니다.
 

모든 머신 러닝 프로젝트는 세 단계로 구성됩니다:

  • 전처리(많은 것들)
  • 모델 선택, 훈련, 최적화 등
  • 구현

µl에서 ONNX 모델을 사용하면 구현 문제가 해결됩니다. 모든 모델이 그렇지는 않고 쉽지 않은 것도 사실입니다.

모델의 훈련과 최적화는 파이썬에서 별도의 프로세스를 통해 해결됩니다.

그러나 위의 모든 단계 중에서 첫 번째 단계는 가장 시간이 많이 걸리고 창의성이 요구되며 가장 중요합니다. 그리고 µl에서 이를 실현하는 것은 불가능합니다. 우리는 원시 스케일링을 전처리로 간주하지 않습니다. "쓰레기 투입-쓰레기 배출"이라는 속담이 있습니다. MCL에서만 MO를 완전히 사용하기에는 MCL에서 추가로 개발하고 구현해야 할 것이 너무 많습니다. 특히 지속적으로 확장되고 있기 때문에 그 방대한 양을 모두 수용할 수는 없습니다.

따라서 전처리를 실행하려면 다른 언어(R/Python/Julia 등을 마스터한 사람)로 만들거나 ONNX로 변환해야 합니다.

지금까지 ONNX를 구현함으로써 얻을 수 있는 이점은 ONNX 모델을 변환, 생성, 단순화 및 최적화하는 방법을 배울 수 있다는 것입니다. 향후에 유용할 수 있습니다.