Maschinelles Lernen im Handel: Theorie, Modelle, Praxis und Algo-Trading - Seite 3269

 
mytarmailS #:
Was ist also das Endziel dieser ganzen Korrelationsgeschichte?

Nun, Sie haben herausgefunden, welche Implementierung schneller ist, welche identische Ergebnisse liefert und welche nicht... Was werden Sie mit diesem Wissen tun?

Ich werde in der Lage sein zu berechnen, was andere aufgrund technischer Beschränkungen nicht können.

 
mytarmailS #:
Auch Tests und Visualisierung und schnelles Handeln, wahrscheinlich

Die abschließende Optimierung ist ebenfalls normal, um die Parameter der Geschäfte zu erfassen

 
fxsaber #:

Zuerst habe ich versucht, die frontale Variante zu machen - jedes Mal alle Zeilen zu zählen. Ich hatte den Eindruck, dass es einen Fehler in Alglib gibt, denn ich konnte ihn in meinem eigenen Programm nicht finden.


Das Ergebnis stimmt oft überein.


Aber in manchen Situationen ist das nicht der Fall.


Wenn es immer so wäre, dann wäre es meine Schuld. Aber irgendetwas ist hier faul an der Sache.

Ich habe
gemacht.

Print(Matrix1);
Print("------------------");
Print(Matrix2);


Matrix2 hat die ersten 5 Übereinstimmungen, dann Nullen.
Ich habe Res.Col(Corr.Row(0), i); in Res.Row(Corr.Row(0), i) geändert;

Die Matrizen wurden ähnlich, aber IsEqual funktioniert immer noch nicht. Irgendetwas anderes irgendwo...
 
Forester #:

Geändert von Res.Col(Corr.Row(0), i); zu Res.Row(Corr.Row(0), i);

Das scheint falsch zu sein.

 
Forester #:
Hergestellt

Print(Matrix1);
Print("------------------");
Print(Matrix2);


Matrix2 hat die ersten 5 Übereinstimmungen, dann Nullen.
Ich habe Res.Col(Corr.Row(0), i); in Res.Row(Corr.Row(0), i) geändert;

Die Matrizen wurden ähnlich, aber IsEqual funktioniert immer noch nicht. Irgendetwas anderes irgendwo...

Ich habe das Problem gefunden

Es sollte wie folgt sein

for (int i = 0; i < (int)Matrix.Cols(); i++)
{
if (i)
Vector.SwapCols(0, i);

CBaseStat::PearsonCorrM2(Vector, MatrixIn, MatrixIn.Rows(), 1, MatrixIn.Cols(), Corr);

Res.Col(Corr.Row(0), i);
}

 
Und PearsonCorrM2 kann um das 2-fache beschleunigt werden, wenn man mit Dreiecken zählt, d.h. vom Ende ausgeht. Zählen Sie 100 Zeile mit allen, dann 99 mit allen 0-99, 99 und 100. bereits gezählt - Sie können einfach kopieren. ...50. Zeile mit allen bis 50. usw. Und zähle nicht mit sich selbst, weil =1.

P.S.
Im Allgemeinen ist dein Code schön und übersichtlich. Ich würde alles in Schleifen machen))))
 
Forester #:
Und PearsonCorrM2 kann um das 2fache beschleunigt werden, wenn man mit Dreiecken zählt, d.h. vom Ende her geht. Zählen Sie 100 Zeilen mit allen, dann 99 mit allen 0-99, 99 und 100. bereits gezählt - Sie können einfach kopieren. ...50. Zeile mit allen bis 50. und so weiter.
Ich habe irgendwo gelesen, dass man die Korrelation durch schnelle Fourier-Transformation schnell berechnen kann... Auch als Option, um schneller zu werden.
 
residuals_a = a_mat - a_mat. column_means residuals_b = b_mat - b_mat. column_means a_residual_sums = residuals_a. column_sums b_residual_sums = residuals_b. column_sums residual_products = dot_product( residuals_a. transpose, residuals_b)
sum_products = sqrt( dot_product( a_residual_sums, b_residual_sums))
Korrelationen = Residuen_Produkte / Summe_Produkte 
 
mytarmailS #:
Ich habe irgendwo gelesen, dass man die Korrelation schnell durch eine schnelle Fourier-Transformation lesen kann... Auch als Option zur Beschleunigung.

Ich habe es getan. Es macht Sinn, wenn die Stringlänge groß ist. Ich zeige es Ihnen mal.

 
Forester #:

Das Problem gefunden

So sollte es sein

Ganz genau, danke! Ich verstehe nicht, warum die falsche Option mit inCols < 100 funktioniert.