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

 
fxsaber #:

Dies ist der Kern der zeilenweisen Berechnung der Matrix.

Ich frage mich, was passiert, wenn wir eine Matrix und die gleiche Matrix mit dem schnellen Algibov-Algorithmus PearsonCorrM berechnen. Wer wird schneller sein?
PearsonCorrM ist 40-50 mal schneller als Algibovs zeilenweiser Algorithmus, wahrscheinlich wird selbst ein schnelles selbstgemachtes Tool einen solchen Geschwindigkeitsunterschied nicht überwinden.
 
Forester #:
Ich frage mich, was passiert, wenn eine Matrix berechnet wird und die gleiche Matrix mit dem schnellen Algibov-Algorithmus PearsonCorrM berechnet wird. Wer wäre schneller?
PearsonCorrM ist 40-50 mal schneller als Algibovs zeilenweiser Algorithmus, wahrscheinlich wird auch ein schneller selbst entwickelter Algorithmus einen solchen Geschwindigkeitsunterschied nicht überwinden.

Hier ist der doppelte Rückstand des hausgemachten Algorithmus von PearsonCorrM.

 

Ich habe die Geschwindigkeit des CatBoost-Trainings in Python und über die Kommandozeile verglichen:

- 20% schneller vom Start bis zum Speichern der Modelle, einschließlich des Lesens der Proben

- 12% schneller der Lernprozess selbst

Getestet mit demselben Modell - das Trainingsergebnis ist identisch.

Natürlich ist die Kommandozeile schneller.

 
Aleksey Vyazmikin CatBoost-Trainings in Python und über die Kommandozeile verglichen:

- 20% schneller vom Start bis zum Speichern der Modelle, einschließlich des Lesens von Beispielen

- 12% schneller der Lernprozess selbst

Getestet mit demselben Modell - das Trainingsergebnis ist identisch.

Natürlich ist die Kommandozeile schneller.

Benutzen Sie noch die Kommandozeile, um EXEs auszuführen?
Sie können sie über WinExec ausführen und sogar im Tester optimieren.

#import "kernel32.dll"
   int WinExec(uchar &Path[],int Flag);
   int SleepEx(int msec, bool Alertable=false);//SleepEx(1000,false); - для простого таймера
#import 
...
string CommonPath = TerminalInfoString(TERMINAL_COMMONDATA_PATH)+ "\\Files\\";
string RAM_dir="RAM\\";//использую диск в памяти для скорости
string agent_dir=RAM_dir+"0000";//при запуске в терминале
string p=MQLInfoString(MQL_PROGRAM_PATH);// C:\Users\User\AppData\Roaming\MetaQuotes\Tester\ххххххххххххххххххххххх\Agent-127.0.0.1-3000\MQL5\Experts\testEXE.ex5
int agent_pos=StringFind(p,"Agent-");// при оптимизации запустится в папке с номером агента
if(agent_pos!=-1){agent_pos=StringFind(p,"-",agent_pos+6);agent_dir = RAM_dir+StringSubstr(p,agent_pos+1,4);}//выдаст 3001, 3002... по номеру папки в котором тестер запустился
FolderCreate(agent_dir,FILE_COMMON);
...
sinput string PathExe="С:\\your.exe";//path to exe file
uchar ucha[];
StringToCharArray(PathExe_+" --dir "+CommonPath+agent_dir+"\\",ucha);//string to train
int visible=0;
FileDelete(agent_dir+"\\model.bin",FILE_COMMON); //сначала удалить старый
int x=WinExec(ucha,visible); //visible=0 - work in hidden window, 1 - work in opened exe window - can be closed by user. Better to use 0, to run proces up to finish.
while(true){if(FileIsExist(agent_dir+"\\model.bin",FILE_COMMON)){break;}SleepEx(1000);}// используем SleepEx из DLL (Sleep() от MQL не работает в оптимизаторе, будет грузить проц на 100% проверками файла. Через DLL 1%.). Файл с моделью появился - расчет закончен.
//модель обучена, читаем файл модели и используем

Ich habe Catboost nicht ausprobiert, aber ich denke, man kann etwas machen.
Das Schwierigste ist, den Zeitpunkt zu bestimmen, an dem das Training beendet ist. Ich tue das, indem ich das Erscheinen der Modelldatei im Ordner agent_dir+"\model.bin" 1 Mal pro Sekunde überprüfe. Wo Catboost die Modelldatei ablegt, weiß ich nicht, vielleicht muss ich sie woanders suchen.

Ein weiteres mögliches Problem: Wenn die Modelldatei sehr groß ist, kann das Schreiben sehr lange dauern, d.h. die Datei ist bereits vorhanden, aber noch nicht zu Ende geschrieben. Es kann notwendig sein, die Datei anzuhalten oder zu überprüfen, dass die Datei nicht durch den Schreibvorgang geschlossen wird....
 
Forester #:

Verwenden Sie immer noch die Befehlszeile, um EXEs auszuführen?
Sie können sie über WinExec ausführen und sogar im Tester optimieren.

Ich führe bat-Dateien aus - bisher ist das die bequemste Option für die aktuellen Aufgaben.

Bislang gibt es nur eine Aufgabe für den automatischen Start des Trainings nach dem Erhalt einer Probe - die Erkundung. Ich plane, später eine automatische Bat-Datei dafür zu erstellen.

Forester #:

Ich habe Catboost noch nicht ausprobiert, aber ich denke, wir können uns etwas einfallen lassen.

Am schwierigsten ist es, den Zeitpunkt des Trainingsendes zu bestimmen. Ich tue das, indem ich das Erscheinen der Modelldatei im Ordner agent_dir+"\model.bin" 1 Mal pro Sekunde überprüfe. Wo Catboost die Modelldatei ablegt, weiß ich nicht, vielleicht muss ich sie woanders suchen.

Ein weiteres mögliches Problem: Wenn die Modelldatei sehr groß ist, kann das Schreiben sehr lange dauern, d.h. die Datei ist bereits vorhanden, aber noch nicht zu Ende geschrieben. Möglicherweise müssen Sie die Datei anhalten oder prüfen, ob sie nicht durch den Schreibprozess geschlossen wurde....

Ihre Lösung ist interessant - ich werde sie mir ansehen und vielleicht zur Anwendung bringen.

Aber ich denke, es gibt eine Möglichkeit, eine Antwort vom ausführbaren Programm zu erhalten - ich wollte diesen Ansatz verwenden.

Option mit Dateien - wenn man einen Bootnik laufen lässt, dann wiederum - man kann einfach eine neue Datei am Ende der Aufgabe erstellen.

 
Aleksey Vyazmikin #:

Vielleicht ist die relative Erfolgsrate der -1 und 0 Varianten in der Stichprobengröße des Zuges, und sie sollte reduziert werden? Im Allgemeinen scheint es, dass Recall auf dies reagiert.

Sollten Ihrer Meinung nach die Ergebnisse solcher Kombinationen in unserem Fall miteinander vergleichbar sein? Oder sind die Daten unwiederbringlich veraltet?

Ich habe die Zugstichprobe in drei Teile aufgeteilt, drei Sätze für Variante -1 und Variante 0 trainiert und auch nur den ursprünglichen Zug als drei Stichproben trainiert.

Das ist das Ergebnis.

Ich habe diese Generalisierung PR=(Precision-0.5)*Recall

Es scheint, dass das Training auf Kosten des 2. und 3. Teils der Zugstichprobe geht - jetzt habe ich sie kombiniert und das Training durchgeführt - mal sehen, was passiert.

Es sieht jedoch so aus, als wäre dies keine schlechte Methode, um die Zufälligkeit des Trainings abzuschätzen. Idealerweise sollte das Training in jedem Segment relativ erfolgreich sein, da es sonst keine Garantie dafür gibt, dass das Modell morgen einfach nicht mehr funktioniert.

 
Aleksey Vyazmikin #:

Es sieht so aus, als ginge das Training auf Kosten des 2. und 3. Teils des Musterzuges - ich habe sie jetzt kombiniert und das Training laufen lassen - mal sehen, was passiert.

Es sieht jedoch so aus, als wäre dies keine schlechte Methode, um die Zufälligkeit des Trainings zu beurteilen. Idealerweise sollte das Training in jedem Segment relativ erfolgreich sein, da es sonst keine Garantie dafür gibt, dass das Modell morgen einfach nicht mehr funktioniert.

Und hier sind die Ergebnisse - die letzten beiden Spalten

Die Ergebnisse haben sich in der Tat verbessert. Wir können davon ausgehen, dass das Trainingsergebnis umso besser ist, je größer die Stichprobe ist.

Wir sollten versuchen, mit dem ersten und zweiten Teil der Trainingsstichprobe zu trainieren - und wenn die Ergebnisse nicht viel schlechter sind als mit dem zweiten und dritten Teil, dann kann der Faktor der Probenfrische als weniger bedeutsam angesehen werden als das Volumen.

 

Ich habe schon oft über die "Vorhersagekraft von Prädiktoren" geschrieben, die als Abstand zwischen zwei Vektoren berechnet wird.

Ich bin auf eine Liste von Tools zur Berechnung des Abstands gestoßen:

library(proxy)
pr_DB$get_entry_names()
##  [1] "Jaccard"         "Kulczynski1"    
##  [3] "Kulczynski2"     "Mountford"      
##  [5] "Fager"           "Russel"         
##  [7] "simple matching" "Hamman"         
##  [9] "Faith"           "Tanimoto"       
## [11] "Dice"            "Phi"            
## [13] "Stiles"          "Michael"        
## [15] "Mozley"          "Yule"           
## [17] "Yule2"           "Ochiai"         
## [19] "Simpson"         "Braun-Blanquet" 
## [21] "cosine"          "angular"        
## [23] "eJaccard"        "eDice"          
## [25] "correlation"     "Chi-squared"    
## [27] "Phi-squared"     "Tschuprow"      
## [29] "Cramer"          "Pearson"        
## [31] "Gower"           "Euclidean"      
## [33] "Mahalanobis"     "Bhjattacharyya" 
## [35] "Manhattan"       "supremum"       
## [37] "Minkowski"       "Canberra"       
## [39] "Wave"            "divergence"     
## [41] "Kullback"        "Bray"           
## [43] "Soergel"         "Levenshtein"    
## [45] "Podani"          "Chord"          
## [47] "Geodesic"        "Whittaker"      
## [49] "Hellinger"       "fJaccard"

Dies ist neben dem Standard, der seine eigene Reihe von Abständen hat

stats::dist() 
 
Aleksey Vyazmikin #:

Und hier ist das Ergebnis - die letzten beiden Spalten

Die Ergebnisse haben sich in der Tat verbessert. Wir können davon ausgehen, dass das Trainingsergebnis umso besser ist, je größer die Stichprobe ist.

Man muss versuchen, auf 1 und 2 Teilen der Trainingsstichprobe zu trainieren - und wenn die Ergebnisse nicht viel schlechter sind als auf 2 und 3 Teilen, dann kann der Faktor der Probenfrische als weniger bedeutend angesehen werden als das Volumen.

Cuto, wieder sind wir in Unkenntnis der Mattenstatistik gefangen.
Ich habe eine Idee, wie man die Matstat monetarisieren kann, indem man sie von verschiedenen Seiten angreift.
 
СанСаныч Фоменко #:

Ich habe bereits mehrfach über die "Vorhersagekraft von Prädiktoren" geschrieben, die als Abstand zwischen zwei Vektoren berechnet wird.

Ich bin auf eine Liste von Tools zur Berechnung des Abstands gestoßen:

Dies ist neben dem Standard, der seine eigene Reihe von Abständen hat

Können Sie mir ein Beispiel zeigen, wie man es benutzt?