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

 
Rorschach:

Für einen Wald gibt es die Option, die Wichtigkeit und die Cluster zu betrachten. In catbust ist es wahrscheinlich plot_tree.

Ich werde die Daten vorbereiten und sie veröffentlichen.

Ich habe eine Testversion für 6 Spalten erstellt, die 11 GB benötigt. Notepad++ konnte sie nicht öffnen, weil die Datei zu groß ist. Der BD Browser für SQLite hängt seit etwa 20 Minuten.

Zeigen Sie ein Bild davon, wie Baumgruppen aussehen, ich weiß noch nicht, was Sie meinen.

Warum öffnen Sie es? :) Ich mache einfach eine Minikopie mit einer ähnlichen Struktur für die Fehlersuche.

 
elibrarius:

Ich frage mich, wie sie Bäume trainieren, ohne alle Daten im Speicher zu haben. Wenn die Tabelle 6 Gigabyte groß ist, sollten etwa 6 Gigabyte Speicher verwendet werden. Der Baum muss jede Spalte als Ganzes sortieren. Wenn wir nicht alles im Speicher ablegen, sondern jedes Mal Daten von der Festplatte lesen, wird es zu langsam.
Die einzige Variante besteht darin, die Daten im Speicher als Float statt als Double zu speichern, was jedoch zu einer geringeren Genauigkeit führt. Für uns mit einer Genauigkeit von 5 Stellen ist das vielleicht nicht so schlimm, aber Catbust ist eine universelle Software, ich denke, die physikalischen und mathematischen Probleme sollten in doppelter Genauigkeit gelöst werden.

Ich habe den Code nicht studiert, aber wenn man logisch darüber nachdenkt, konvertiert CatBoost wahrscheinlich die Beispieldatentabelle und speichert genau die konvertierte Variante, was sich für eine schnelle Komprimierung anbietet.

Die Umwandlung geschieht nach dem Gitter der Quantisierung jedes PrÀdiktors (es gibt 6 Algorithmen), und zum Beispiel bleiben von 1000 verschiedenen Werten der Variablen 32 Varianten (die in den Bereich des Gitters der Quantisierung fallen), und solcher Vektor der Daten wird leicht komprimiert, außer den Zahlen schon nur der ganzen Zahlen (nach den BeschrÀnkungen der Größe des Gitters - des Typs der Daten ushort - 2 Bytes nach der Zahl urteilend), und die Tabelle der Quantisierung liegt einfach im GedÀchtnis und wird schon dann bei der Bildung des Modells im Code verwendet. Jetzt haben wir bereits die Größe reduziert, und es ist weiterhin möglich, den Umfang zu reduzieren, indem man nicht alle Prädiktoren für die Auswertung auswählt, sondern nur einen Teil davon, was bei großen Stichproben empfohlen wird, wobei der Algorithmus des Zufallsgenerators es erlaubt, in anderen Bäumen jene Prädiktoren zu verwenden, die nicht sofort in den "Beutel" gelangt sind, dadurch wird das Training auch schneller, aber es wird mehr Bäume im Modell geben. Sicherlich gibt es noch andere Tricks, aber der wichtigste ist die Quantisierung.

Die Quantisierung sollte gesondert betrachtet werden, idealerweise sollte jeder Prädiktor mit seinem eigenen Raster abgeglichen werden und die Daten sollten zusammen mit dem Raster zum Training eingereicht werden, damit der Algorithmus dies tun kann.

So kann die Probe selbstquantisiert werden und wird gut komprimiert.

 
Aleksey Vyazmikin:

Ich habe den Code nicht studiert, aber wenn man logisch darüber nachdenkt, wandelt CatBoost wahrscheinlich die Musterdatentabelle um und speichert genau die umgewandelten Varianten, die sich für eine schnelle Komprimierung eignen.

Die Umwandlung geschieht nach dem Gitter der Quantisierung jedes PrÀdiktors (es gibt 6 Algorithmen), und zum Beispiel bleiben von 1000 verschiedenen Werten der Variablen 32 Varianten (die in den Bereich des Gitters der Quantisierung fallen), und solcher Vektor der Daten wird leicht komprimiert, außer den Zahlen schon nur der ganzen Zahlen (nach den BeschrÀnkungen der Größe des Gitters - des Typs der Daten ushort - 2 Bytes nach der Zahl urteilend), und die Tabelle der Quantisierung liegt einfach im GedÀchtnis und wird schon dann bei der Bildung des Modells im Code verwendet. Jetzt haben wir bereits die Größe reduziert, und es ist weiterhin möglich, den Umfang zu reduzieren, indem man nicht alle Prädiktoren für die Auswertung auswählt, sondern nur einen Teil davon, was bei großen Stichproben empfohlen wird, wobei der Algorithmus des Zufallsgenerators es erlaubt, in anderen Bäumen jene Prädiktoren zu verwenden, die nicht sofort in den "Beutel" gelangt sind, dadurch wird das Training auch schneller, aber es wird mehr Bäume im Modell geben. Sicherlich gibt es noch andere Tricks, aber der wichtigste ist die Quantisierung.

Die Quantisierung sollte gesondert betrachtet werden, idealerweise sollte jeder Prädiktor mit seinem eigenen Raster abgeglichen werden und die Daten sollten zusammen mit dem Raster zum Training eingereicht werden, damit der Algorithmus dies tun kann.

Aus diesem Grund kann das Sample selbst quantisiert werden und wird gut komprimiert.

Richtig, ich erinnere mich, ich glaube, es gibt ein Standardraster von 1024 geteilten Varianten. Wenn Sie alle Daten durch geteilte Zahlen ersetzen, können Sie im ushort-Format speichern, das 2 Byte statt 8 Byte umfasst, was einer vierfachen Komprimierung entspricht. Das ist wahrscheinlich der Grund, warum Sie 2gb statt 6gb verwendet haben.
Jetzt weiß ich, wozu dieses Gitter dient: Es dient der Komprimierung. Und es ist schneller zu sortieren.
Документация по MQL5: Основы языка / Типы данных / Целые типы / Типы char, short, int и long
Документация по MQL5: Основы языка / Типы данных / Целые типы / Типы char, short, int и long
  • www.mql5.com
Целый тип char занимает в памяти 1 байт (8 бит) и позволяет выразить в двоичной системе счисления 2^8 значений=256. Тип char может содержать как положительные, так и отрицательные значения. Диапазон изменения значений составляет от -128 до 127. uchar # Целый тип uchar также занимает в памяти 1 байт, как и тип char, но в отличие от него, uchar...
 
elibrarius:
Richtig, ich erinnere mich, es scheint ein Standardraster von 1024 geteilten Varianten zu haben. Wenn Sie alle Daten durch geteilte Zahlen ersetzen, können Sie im ushort-Format speichern, was 2 Bytes statt 8 bedeutet, was eine vierfache Kompression bedeutet. Das ist wahrscheinlich der Grund, warum Sie 2gb statt 6gb hatten und diese genutzt haben.

Der Standardwert ist 254, aber ich weiß nicht mehr, wie viel ich damals eingestellt habe. Wahrscheinlich wurden weniger als 2 GB Speicherplatz verbraucht - ich erinnere mich, dass ich sehr überrascht war, dass es so wenig war.

Auf jeden Fall ermöglicht dieser Ansatz eine erhebliche Komprimierung der Daten, auch bei der Probenahme selbst. Mit neuronalen Netzen ist das nicht möglich.

elibrarius:
Jetzt verstehe ich, wofür dieses Raster verwendet wird, es stellt sich heraus, dass es der Komprimierung dient. Und es ist schneller, sie zu sortieren.
Das Raster ermöglicht auch eine geringere Anpassung, da eine Reihe von Werten verwendet wird. Aber das wird nicht immer gut sein - um theoretische Werte zu erreichen, muss man das Gitter wohl selbst schneiden.
 
Aleksey Vyazmikin:

Der Standardwert ist 254, aber ich weiß nicht mehr, wie viel ich damals eingestellt habe. Wahrscheinlich wurden weniger als 2 GB Speicherplatz verbraucht - ich erinnere mich, dass ich sehr überrascht war, dass es so wenig war.

Sie können dann uchar verwenden, es ist 1 Byte.

Aleksey Vyazmikin:
Grid erlaubt es, weniger einzupassen, da eine Reihe von Werten verwendet wird. Aber das ist nicht immer gut, denn um die theoretischen Werte zu erreichen, muss man das Gitter selbst schneiden.


Der maximale Wert in ushort beträgt 65 Tausend - wenn Sie ein solches Raster einstellen, brauchen Sie sich nicht manuell darum zu kümmern.

 
Maxim Dmitrievsky:

https://www.mql5.com/ru/articles/8385

es ist keine Tatsache, dass es eine gute Umsetzung ist )

Ich verzichte auf das russische Angebot.

Ich habe das gelesen))) es ist voller Fehler in den Berechnungen und das Netzwerk gibt eher zufällige Antworten

 
elibrarius:

Dann können Sie uchar verwenden, es ist 1 Byte.


In ushort ist der maximale Wert 65k - wenn Sie ein solches Raster einstellen, müssen Sie sich nicht manuell darum kümmern

Ihre maximale Größe beträgt65535, aber ich kann die Variablen im Code nicht beeinflussen.

Was die maximale Größe betrifft - nein, sie garantiert nicht das Ergebnis, da sie an den Datenstreifen angepasst werden kann und die Daten in der Nähe davon übersprungen werden können.

Im Allgemeinen ist es gut, einen Lernalgorithmus zu haben, der immer die Angemessenheit der Schlussaufteilung prüft (A>10 && A<=15), aber normalerweise geschieht dies zufällig - es gibt keine solche obligatorische Bedingung, obwohl sie manchmal reproduziert wird.

 
Alexander Alexejewitsch:

Ich habe dies gelesen))) es gibt eine Menge Fehler in den Berechnungen und das Netzwerk gibt eher zufällige Antworten

Möchten Sie das Netzwerk selbst schreiben?

Vod hier ist ein Minimum an Worten und ein Maximum an Code in Python, aber auch Englisch.

https://datascience-enthusiast.com/DL/Building_a_Recurrent_Neural_Network-Step_by_Step_v1.html

Building a Recurrent Neural Network - Step by Step - v1
  • datascience-enthusiast.com
Building your Recurrent Neural Network - Step by Step
 
Maxim Dmitrievsky:

Möchten Sie das Netzwerk selbst schreiben?

Es gibt ein Minimum an Wörtern und ein Maximum an Code in Python, aber auch in Englisch.

https://datascience-enthusiast.com/DL/Building_a_Recurrent_Neural_Network-Step_by_Step_v1.html

Ja, ich will es selbst machen), denn in allen Artikeln und Beispielen werden Aktivierungsfunktionen nicht korrekt gezählt, z. B. wird die Sigmoidfunktion immer als 1/1+exp(-x) angenommen. Ich brauche 1.0/1.0+exp(-x). Es scheint das Gleiche zu sein, aber das Terminal gibt unterschiedliche Berechnungen an) sehen Sie, ob Sie die gleichen Berechnungen haben) daher die Fehler.
 
Alexander Alexejewitsch:
Ja, ich will es selbst machen), weil in allen Artikeln Beispiele Aktivierungsfunktionen falsch gezählt werden) z.B. wird Sigmoid überall als 1/1+exp(-x) gezählt. Ich brauche 1.0/1.0+exp(-x). Es scheint dasselbe zu sein, aber das Terminal gibt unterschiedliche Berechnungen an), um zu sehen, ob Sie die gleichen Berechnungen haben), daher der Fehler.
Das Schreiben neuronaler Netze im Terminal ist überhaupt keine Option. Sie werden feststellen, dass eine Funktion plötzlich anders funktioniert als erwartet. Verwenden Sie ein bereits getestetes Produkt