Ticarette makine öğrenimi: teori, pratik, ticaret ve daha fazlası - sayfa 2953

 

LightGBM' de eğitilen ONNX modelinden MT5'e çıktı çalışmıyor. Parametrelerin biçimini ayarlarken 5808 ve 5805 hataları. Ancak sorun parametre boyutlarının tanımıyla ilgili gibi görünüyor - negatif değerler elde ediliyor (kodda vurgulanmıştır). Belki de bir şeyleri karıştırmışımdır. Python 3.10'da her şey normal görünüyor.

MQL5 çıktısı:

void OnStart()
  {
   long h = OnnxCreate("model.onnx", FILE_COMMON);
   
   //Print(OnnxGetInputCount(h));
   //Print(OnnxGetOutputCount(h));
   //Print(OnnxGetInputName(h, 0));
   //Print(OnnxGetOutputName(h, 0));
   OnnxTypeInfo otype;
   OnnxGetInputTypeInfo(h, 0, otype);
   ArrayPrint(otype.dimensions);                   // -1 8
   //Print(otype.element_type, " ", otype.type);
   OnnxGetOutputTypeInfo(h, 0, otype);
   ArrayPrint(otype.dimensions);                   // -1 1
   //Print(otype.element_type, " ", otype.type);
   
   matrix mx={{8.32520000 e+00, 4.10000000 e+01, 6.98412698 e+00, 1.02380952 e+00,
               3.22000000 e+02, 2.55555556 e+00, 3.78800000 e+01,-1.22230000 e+02},
              {8.30140000 e+00, 2.10000000 e+01, 6.23813708 e+00, 9.71880492 e-01,
               2.40100000 e+03, 2.10984183 e+00, 3.78600000 e+01,-1.22220000 e+02},
              {7.25740000 e+00, 5.20000000 e+01, 8.28813559 e+00, 1.07344633 e+00,
               4.96000000 e+02, 2.80225989 e+00, 3.78500000 e+01,-1.22240000 e+02},
              {5.64310000 e+00, 5.20000000 e+01, 5.81735160 e+00, 1.07305936 e+00,
               5.58000000 e+02, 2.54794521 e+00, 3.78500000 e+01,-1.22250000 e+02},
              {3.84620000 e+00, 5.20000000 e+01, 6.28185328 e+00, 1.08108108 e+00,
               5.65000000 e+02, 2.18146718 e+00, 3.78500000 e+01,-1.22250000 e+02}};
   matrix my={{0.0},{0.0},{0.0},{0.0},{0.0}};   
   
   const long  ExtInputShape [] = {1,5,8};
   const long  ExtOutputShape[] = {1,5};
   Print(OnnxSetInputShape(h,0,ExtInputShape));
   Print(GetLastError());                            // 5808
   ResetLastError();
   Print(OnnxSetOutputShape(h,0,ExtOutputShape));
   Print(GetLastError());                            // 5805
   
   OnnxRun(h, ONNX_DEBUG_LOGS | ONNX_NO_CONVERSION, mx, my);
   //Print(mx);
   //Print(my);
   OnnxRelease(h);
  }

Python'da öğrenme:

from lightgbm import LGBMRegressor
from sklearn.datasets import fetch_california_housing
import onnxmltools
from onnxconverter_common import *

housing = fetch_california_housing()
X, Y = housing.data, housing.target

model = LGBMRegressor()
model.fit(X, Y)
Yreal, Ypredict = Y[:5], model.predict(X[:5])
print(Yreal)
print(Ypredict)

initial_type = [('input', FloatTensorType([None, len(X[0])]))]
onnx_model = onnxmltools.convert_lightgbm(model, name='LightGBM', initial_types=initial_type)
onnxmltools.utils.save_model(onnx_model, 'model.onnx')

Python'da Çıktı:

import numpy as np
import onnxruntime as ort
from sklearn.datasets import fetch_california_housing

housing = fetch_california_housing()
X, Y = housing.data, housing.target
Xtest, Yreal = X[:5], Y[:5]

sess = ort.InferenceSession("model.onnx", providers=ort.get_available_providers())
input_name = sess.get_inputs()[0].name
Ypredict = sess.run(None, {input_name: Xtest.astype(np.float32)})[0]

print(Xtest)
print(Yreal)
print(Ypredict)
 
Python'a geçmek için biraz erken gibi görünüyor. LightGBM' nin CLI sürümünü öğrenmek ve modelleri C'de if-else biçiminde kaydetmek daha iyidir. Evrensel değil, ama ucuz ve suratsız)
 
Günün saati gibi döngüsel işaretlerle ilgili tartışmayı hatırladım. IMHO, bunları düzenli olanlara çevirmeliyiz, sadece olası modelde en güçlü değişikliğin meydana geldiği başlangıç noktasını seçerek. Piyasa değerlendirmelerini (bu durumda seans programı) veya buna benzer bir şeyi kullanabilir ya da bir ağaç modeli eğitebilir ve bu özellikteki ilk bölünme noktasını alabilirsiniz.
Один из методов псевдо-адаптации.
Один из методов псевдо-адаптации.
  • 2023.01.30
  • www.mql5.com
Любой скальпер знает, что круглосуточная торговля - глупость. Есть интервалы, где достигается высокая и стабильная прибыльность, поэтому различными способами находят эти интервалы. Например, при
 
Aleksey Nikolayev #:
Günün saati gibi döngüsel işaretlerle ilgili tartışmayı hatırladım. IMHO, bunları düzenli olanlara çevirmeliyiz, sadece olası modelde en güçlü değişikliğin meydana geldiği başlangıç noktasını seçerek. Piyasa değerlendirmelerini (bu durumda seans programı) veya buna benzer bir şeyi kullanabilir ya da bir ağaç modeli eğitebilir ve bu özelliğe dayalı olarak ilk bölünme noktasını alabilirsiniz.
Artışlar yerine volatiliteyi kullanabilirsiniz, bu piyasa döngülerini doğru bir şekilde yansıtır. Ve biri kötü vakaları filtreleyen (son makalede yaptığım gibi) 2 model üzerinden çalıştırın. Sonuçlar bazen iyi olabilir, sadece birkaç kez yeniden eğitmeniz gerekir. Potansiyel olarak bu yaklaşım bestinterval'den daha fazlasını verecektir.

Mac'teki ZY onnx, harika olan örnekten başladı, henüz boustings'i kontrol etmedim
Örneğinizdeki gibi 2 boyutlu bir matris girmek gerekli mi? Öznitelikleri olan tek boyutlu bir dizi kullanmak daha mantıklı görünüyor. Matrisin yanlış formundan şikayet edebilir. Örneğin, tek boyutlu bir dizi yerine, her girdinin 2. boyutta olduğu 2 boyutlu bir dizi vermelisiniz, yani her biri 1 değer içeren iç içe diziler.

Catbust için python'dan mql'e çeviri örneği var, lgbm daha iyi değil gibi görünüyor
 
Maxim Dmitrievsky #:
Mac'teki ZY onnx örnekten başladı, ki bu harika, henüz patlamaları kontrol etmedim
Örneğinizdeki gibi 2 boyutlu bir matris girmek gerekli mi? Öznitelikleri olan tek boyutlu bir dizi kullanmak daha mantıklı görünüyor. Matrisin yanlış formundan şikayet edebilir. Örneğin, tek boyutlu yerine, her girdinin 2. boyutta olduğu 2 boyutlu bir tane vermelisiniz, yani her biri 1 değer içeren iç içe diziler.
.

Python'da eğitim verirken, modeli veri kümesinin ilk beş satırında test ettim. Daha sonra ONNX'i python'da çalıştırırken, çıktıyı da aynı ilk beş satırda test ettim. Nasıl bakarsanız bakın, bu hala bir matris. MT5 varyantında bu aynı beş satırı bir matris olarak kopyaladım. Ve Renat'ın örneğinde, girdi aynı zamanda on satır ve dört sütundan oluşan bir matristir.

Buradaki sorun, IMHO, zaten modeli yüklerken, çünkü boyutlardaki negatif sayılar çıktıdır. Bu arada, Renate'in örneğinde neyin çıktı olacağını görmeliyiz.

OnnxTypeInfo otype;
OnnxGetInputTypeInfo(h, 0, otype);
ArrayPrint(otype.dimensions);                   // -1 8
OnnxGetOutputTypeInfo(h, 0, otype);
ArrayPrint(otype.dimensions);                   // -1 1
 
Maxim Dmitrievsky #:
Artışlar yerine volatiliteyi alabilirsiniz, bu piyasa döngülerini doğru bir şekilde yansıtır. Ve bunu, biri kötü vakaları filtreleyen (son makalede yaptığım gibi) 2 model üzerinden çalıştırın. Sonuçlar bazen iyi olabilir, sadece birkaç kez yeniden eğitmeniz gerekir. Potansiyel olarak bu yaklaşım bestinterval'den daha fazla sonuç verecektir.

Hayır, ben sadece döngüsel değişkenlere yönelik genel yaklaşımdan bahsediyorum. Onları sıradan değişkenlere dönüştürmek için "dilimlenmeleri" gerekir. Ancak bunu farklı şekillerde yapabilirsiniz, resmi sıfırda olması gerekmez.

Günlük zamanın yanı sıra, döngüsel değişkenler, örneğin iki sembolden oluşan bir portföy için ağırlıklar ararken ortaya çıkar.

 
Aleksey Nikolayev LightGBM' nin CLI sürümünü öğrenmek ve modelleri C'de if-else biçiminde kaydetmek daha iyidir. Evrensel değil, ancak ucuz ve surly).
Ayrıca bir intrees paketi var, orada birçok köy modelinden kurallar çekebilirsiniz.
Ormanlar, güçlendirmeler...
 
Maxim Dmitrievsky #:
Catbusta için python'dan mql'ye çevirmenin bir örneği var, lgbm daha iyi değil gibi görünüyor

Yandex'in geleceği hakkında hafif şüpheler var)

Ayrıca, lgbm'nin sysharp ve diğer microsoft kreasyonlarıyla daha iyi entegre olması gerekiyor, eğer aniden alakalı hale gelirse)

 
mytarmailS #:
Ayrıca birçok köy modelinden kurallar çekebileceğiniz intrees paketi de var.
Ormanlar, güçlendirmeler...

Bu işlevselliğe sahip bir komut dosyası gösterebilir misiniz?

 
Aleksey Nikolayev #:

Yandex'in geleceği hakkında hafif şüpheler var)

Neye dayanıyorlar?