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

 
Aleksey Vyazmikin #:

Ihr Skript läuft bereits seit mehr als einem Tag und hat noch keine einzige Datei auf der Grundlage der Ergebnisse des Screenings erstellt. Ich weiß nicht, vielleicht ist es an der Zeit, es abzuschalten?

Das hängt von der Zhekez und der Stichprobengröße ab. Wenn Ihr Prozessor über mehrere Kerne verfügt, parallelisieren Sie die Ausführung. Unten sehen Sie eine Variante der parallelen Ausführung

##----parallel--------------------------
library("doFuture")
registerDoFuture()
plan(multisession)
require(foreach)
bench::bench_time(
foreach(i = 1:length(cor.test.range))%dopar%{
    get.findCor(dt, cor.coef = cor.test.range[i])
}-> res
)
#  process     real
# 140.62 ms    2.95 m
#
 bench::bench_time(
for(i in 1:length(cor.test.range)){
    paste0("train1_" , cor.test.range[i]*10 , ".csv") %>%
        paste0(patch , .) %>% fwrite(res[[i]], .)
}
)
#  process    real
# 156 ms   157 ms

Viermal schneller als die serielle Ausführung. Hardware und Software

sessionInfo()
#  AMD FX-8370 Eight-Core Processor
#  R version 4.1.3 (2022-03-10)
#  Platform: x86_64-w64-mingw32/x64 (64-bit)
#  Running under: Windows 10 x64 (build 19044)
#
#  Matrix products: default
#
#  locale:
#     [1] LC_COLLATE=Russian_Russia.1251  LC_CTYPE=Russian_Russia.1251    LC_MONETARY=Russian_Russia.1251
# [4] LC_NUMERIC=C                    LC_TIME=Russian_Russia.1251
#
#  attached base packages:
#     [1] stats     graphics  grDevices utils     datasets  methods   base
#
#  other attached packages:
#     [1] doFuture_0.12.2 future_1.28.0   foreach_1.5.2   fstcore_0.9.12  tidyft_0.4.5
#
#  loaded via a namespace (and not attached):
#     [1] Rcpp_1.0.9        codetools_0.2-18  listenv_0.8.0     digest_0.6.30     parallelly_1.32.1 magrittr_2.0.3
# [7] bench_1.1.2       stringi_1.7.8     data.table_1.14.4 fst_0.9.8         iterators_1.0.14  tools_4.1.3
# [13] stringr_1.4.1     import_1.3.0.9003 parallel_4.1.3    compiler_4.1.3    globals_0.16.1

Viel Glück

 
Maxim Dmitrievsky #:

es ist alles da. Die Geschwindigkeit wird katastrophal beeinträchtigt sein. Dataframes sind die langsamsten Biester mit großem Overhead.

Es geht nicht um Videokarten, sondern darum, dass man versteht, dass solche Dinge in einem nüchternen Zustand nicht durch Datenframes zählen.

Was ist mit "Datenrahmen" gemeint - erklären Sie es den Unwissenden in dieser Sprache.

 
mytarmailS #:

Tipp: Ist es notwendig, Vektoren mit 100.000 Beobachtungen zu verwenden, um die Korrelation zwischen ihnen zu sehen?

Ich suche nach hoch korrelierten Vektoren, d. h. mit einer Korrelation von mehr als 0,9.

Ich weiß nicht, ob das notwendig ist oder nicht - Sie sollten experimentieren. Die Stichprobe ist nicht stationär - für die Hälfte der Stichprobe gab es keine Korrelation, und dann peng, und dann erschien sie.

Außerdem habe ich alle Koeffizienten in Schritten von 0,1 ausprobiert.

mytarmailS #:
Gern geschehen.

Ist das der Schrei der Seele?

 
Vladimir Perervenko #:

Hängt von Zhekez und Stichprobengröße ab. Wenn der Prozessor mehrere Kerne hat, parallelisieren Sie die Ausführung. Im Folgenden wird eine Variante der parallelen Ausführung vorgestellt

Sie ist 4 Mal schneller als die serielle Ausführung. Hardware und Software

Viel Glück

Die Parallelität erhöht also nicht den RAM-Verbrauch?

Obwohl der Code von mytarmailS RAM-hungriger ist, ist er 50 Mal schneller, vielleicht gibt es einige Einschränkungen der verwendeten Bibliotheken - das Skript hat mehr als 30 Stunden gearbeitet und keine einzige Datei erstellt.

Vielen Dank für die komplizierten Code-Beispiele - in R bin ich eher ein Konsument, ich kann nicht herausfinden, was ich im Hauptskript korrigieren muss.

 
mytarmailS #:
Meinen Sie, dass es für jeden Datentyp eine Methode zur Berechnung von corr geben sollte?

Matrix ist ein Datentyp, der in R eingebaut ist, es gibt so etwas wie matrix.corr() vector.

 
Aleksey Vyazmikin #:

Was ist mit "Datenrahmen" gemeint - erklären Sie den Unwissenden diese Sprache.

Es war eher eine Nachricht an R-Autoren :) dies sind Tabellen für bequeme Anzeige von Daten und einige typische Manipulationen mit ihnen wie Extrahieren von Teilproben (wie in Sql).

Sie sind nicht dafür gedacht, sie in Schleifen über so große Daten wie Sie sie haben, laufen zu lassen, das wird 20-100 mal langsamer sein als Arrays. Durch den Speicher haben Sie bereits von selbst verstanden.

Ich denke, es ist hier in Ordnung:

#  чтобы прочитать как работает функция и примеры  ?caret::findCorrelation
#  находим колонки которые не коррелированы с порогом корреляции 0,9    "cutoff = 0.9"
not_corr_colums <- caret::findCorrelation(as.matrix(df), cutoff = 0.9, exact = F,names = F)

Ich weiß nicht, wie schnell der eingebaute Typ "Matrix" ist, aber er verwendet ein Caret, was auch langsamer sein kann. Der eingebaute Typ hat keine Vektor-Operation zur Berechnung der Korrelation oder so.

 
Woher kommen diese Gedanken?
 
mytarmailS #:
Woher kommen diese Gedanken?

warum bremst man einen eingebauten Typ mit dem linken Lappen, der seine eigene Korr-Berechnung haben sollte, so schnell wie möglich aus

 
Maxim Dmitrievsky #:

warum verlangsamen Sie einen eingebauten Typ, der seine eigene Korr-Berechnung haben sollte, die so schnell wie möglich für ihn ist?

Berücksichtigt die Bibliothek nicht den Typ? Ein Datentyp ist wie Daten für die billigsten Berechnungen. Die gleiche Matrix sollte für Berechnungen entworfen werden.

 
mytarmailS #:
Wie kann man in Zukunft klüger werden, ohne in der Vergangenheit dümmer zu werden? Algorithmisch... ohne Terabytes an Wissen zu schaffen.

Das tun Sie nicht.