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

 
Maxim Dmitrievsky #:

normalleştirilmemiş çapraz korelasyonlar )

çapraz kovaryans.

Pearson'a ihtiyacın var.

 
fxsaber #:

Pearson'a ihtiyacın var.

Nasıl yapacağımı bilmiyorum ve uykum var.

Benzer bir şey.

>>> a = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> b = np.array([1, 2, 3])
>>> a = (a - np.mean(a)) / (np.std(a))
>>> b = (b - np.mean(b)) / (np.std(b))
>>> np.correlate(a, b, 'full')
array([-1.8973666 , -1.42302495,  0.9486833 ,  0.9486833 ,  0.9486833 ,
        0.9486833 ,  0.9486833 ,  0.9486833 ,  0.9486833 , -1.42302495,
       -1.8973666 ])
>>> 
 
Maxim Dmitrievsky #:

Nasıl yapacağımı bilmiyorum ve uykum var.

benzer bir şey

Evet, öyle değil.

 
fxsaber #:

Doğru, yanlış.

Neredeyse bir şey, araştır, ben gidiyorum.

 
fxsaber #:

Uzun bir dizide benzer kısa dizeleri hızlı bir şekilde bulmaya çalışmak.

Alglib aracılığıyla bu tür bir uygulamanın milyonuncu dizede benzer kısa dizeleri (300) araması altı saniyeden fazla sürer.

Hızlandırdım.

#include <fxsaber\Math\Math.mqh> // https://www.mql5.com/ru/code/17982

const vector<double> GetCorr( const double &Array[], const double &Pattern[], const int Step = 1 )
{
  double Corr[];  
  MathCorrelationPearson(Array, Pattern, Corr, Step);
  
  ArrayRemove(Corr, 0, ArraySize(Pattern) - 1);  
  
  vector<double> Res;
  Res.Swap(Corr);
  
  return(Res);
}

#property script_show_inputs

input int inRows = 300; // Длина короткой строки
input int inCols = 1000000; // Длина длинной строки

// Поиск похожей строки в длинной строке.
void OnStart()
{  
  if (inRows < inCols)
  {
    PrintCPU(); // https://www.mql5.com/ru/forum/86386/page3256#comment_49538685
    
    double Array[]; // Длинная строка, где будет искать.
    double Pattern[]; // Короткая строка, с которой будем сравнивать.
    CMatrixDouble Matrix;
    
    FillData(Array, Pattern, Matrix, inRows, inCols); // https://www.mql5.com/ru/forum/86386/page3278#comment_49725614
            
    Print(TOSTRING(inRows) + TOSTRING(inCols));

    vector<double> vPattern;  
    vPattern.Assign(Pattern);

    ulong StartTime, StartMemory; // https://www.mql5.com/ru/forum/86386/page3256#comment_49538685

    BENCH(vector<double> Vector1 = GetCorr(Matrix, vPattern)) // https://www.mql5.com/ru/forum/86386/page3278#comment_4972561 4
    BENCH(vector<double> Vector2 = GetCorr(Array, Pattern))
    BENCH(vector<double> Vector3 = GetCorr(Array, Pattern, -1))
    
    Print(TOSTRING(IsEqual(Vector1, Vector2)));
    Print(TOSTRING(IsEqual(Vector3, Vector2)));
  }      
}


Sonuç.

EX5: 4000 AVX Release.
TerminalInfoString(TERMINAL_CPU_NAME) = Intel Core i7-2700 K  @ 3.50 GHz 
TerminalInfoInteger(TERMINAL_CPU_CORES) = 8 
TerminalInfoString(TERMINAL_CPU_ARCHITECTURE) = AVX 
inRows = 300 inCols = 1000000 
vector<double> Vector1 = GetCorr(Matrix, vPattern) - 7158396 mcs, 8 MB
vector<double> Vector2 = GetCorr(Array, Pattern) - 364131 mcs, 8 MB
vector<double> Vector3 = GetCorr(Array, Pattern, -1) - 323935 mcs, 7 MB
IsEqual(Vector1, Vector2) = true 
IsEqual(Vector3, Vector2) = true 

Şimdi 300 milisaniyede.

 
fxsaber #:

Şimdi 300 milisaniye içinde.

Hiçbir matris bunu yapamazken.

inRows = 30000 inCols = 10000000 
vector<double> Vector2 = GetCorr(Array, Pattern) - 10567928 mcs, 76 MB
vector<double> Vector3 = GetCorr(Array, Pattern, -1) - 3006838 mcs, 77 MB

10M'lik bir dizgide benzer 30K dizgiyi bulmak üç saniye sürer.

 
fxsaber #:

Hiçbir matris bunu halledemediğinde.

10M'lik bir dizide benzer 30K dizileri bulmak üç saniye sürüyor.

Çok havalı ama bir o kadar da işe yaramaz.
Bu bir fft() örneği mi?
 
mytarmailS #:
Bu fft() ile bir örnek mi?

300/1M fft değildir, 30K/10M fft'dir.

 
fxsaber #:

Hiçbir matris bunu halledemediğinde.

10M uzunluğundaki bir dizide 30K uzunluğundaki benzer dizileri bulmak üç saniye sürer.

Etkileyici sonuç!

 

2010'dan 2023'e kadar olan bir örneği (47 bin satır) aldım, kronolojik sırayla 3 parçaya böldüm ve bu parçaları değiştirirsek ne olacağını görmeye karar verdim.

Alt örneklemlerin büyüklüğü eğitim - %60, test - %20 ve sınav - %20.

Bu kombinasyonları (-1) yaptım - bu standart sıralamadır - kronolojik. Her alt örneğin kendi rengi vardır.


Her örnek kümesi için farklı Tohum ile 101 model eğitildi ve aşağıdaki sonuç elde edildi


Tüm metrikler standarttır ve modellerin ortalama kârının (AVR Kârı) yanı sıra eğitime katılmayan son örnekte kârı 3000 puanı aşan modellerin yüzdesini belirlemenin zor olduğu görülebilir.

Belki de -1 ve 0 varyantlarının eğitim örneklem boyutundaki göreceli başarı oranı azaltılmalıdır? Genel olarak, Recall'ın buna tepki verdiği görülüyor.

Sizce bu tür kombinasyonların sonuçları bizim durumumuzda birbirleriyle karşılaştırılabilir mi? Yoksa veriler geri dönüşü olmayan bir şekilde güncelliğini mi yitirdi?