Машинное обучение в трейдинге: теория, модели, практика и алготорговля - страница 3280

 
Maxim Dmitrievsky #:
array([ 3,  8, 14, 20, 26, 32, 38, 44, 50, 26,  9])

Что обозначают эти числа?

 
fxsaber #:

Что обозначают эти числа?

ненормализованные кросс-корреляции )

кросс-ковариации
 
Maxim Dmitrievsky #:

ненормализованные кросс-корреляции )

кросс-ковариации

Ну так Пирсон же нужен.

 
fxsaber #:

Ну так Пирсон же нужен.

не уверен как надо, да и вообще спать охота

нечто похожее

>>> 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 #:

не уверен как надо, да и вообще спать охота

нечто похожее

Точно, не то.

 
fxsaber #:

Точно, не то.

почти что то, поищите как считается, я офф

 
fxsaber #:

Пробую быстро найти похожие короткие строки в длинной.

Больше шести секунд такая реализация через Alglib ищет в миллионной строке похожие на короткую (300).

Ускорил.

#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_49725614
    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)));
  }      
}


Результат.

EX5: 4000 AVX Release.
TerminalInfoString(TERMINAL_CPU_NAME) = Intel Core i7-2700K  @ 3.50GHz 
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 

Теперь за 300 миллисекунд.

 
fxsaber #:

Теперь за 300 миллисекунд.

Когда никакая матрица не справится.

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

За три секунды ищутся похожие строки длиной 30K в строке 10M.

 
fxsaber #:

Когда никакая матрица не справится.

За три секунды ищутся похожие строки длиной 30K в строке 10M.

Очень круто,  но на столько же и бесполезно. 
Это пример с fft()? 
 
mytarmailS #:
Это пример с fft()? 

300/1M - не fft, 30K/10M- fft.

Причина обращения: