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

 
mytarmailS #:
Und es wird sowieso leer sein.

Nun, ja, wenn Sie nicht wollen.

 
mytarmailS #:
Es ist traurig, dass maschinelles Lernen mit Targeting nicht funktioniert und One-Shot-Learning nicht funktioniert....

Entfernen Sie symmetrische Merkmale, um Verzerrungen zu reduzieren.

Ersetzen Sie zum Beispiel Inkremente durch absolute Inkremente (Volatilität).

Hilft manchmal

 
Maxim Dmitrievsky #:

symmetrische Merkmale entfernen, um die Verzerrung zu verringern

z. B. Inkremente durch absolute Inkremente ersetzen (Volatilität)

Manchmal hilft das.

Nein, es ist viel komplizierter als das.
 
Aleksey Vyazmikin #:

Meine Idee ist es, ein Modell zu entwickeln, das stabile Quantensegmente anhand einer Reihe von statistischen Merkmalen auswählt. Jeder ist willkommen, sich an diesem Projekt zu beteiligen.

Warum sind Sie so besessen von diesen Quanten?...?

Sie haben nichts Intellektuelles an sich. Einfach z.B. 10000 Zeilen in 100 Stücke aufteilen, d.h. sortieren und von unten nach oben 100 Zeilen zählen, wenn die folgenden mit der hundertsten Zeile übereinstimmen (d.h. Wiederholungen), dann verweisen wir sie alle auf das erste Stück. Duplikate sind über Beginn der Eingabe von Zeilen in der zweiten Quantum - die nächsten 100 + Duplikate, wenn es welche gibt. Und so weiter, bis wir keine Zeilen mehr haben.

Selbst ein Baum enthält um Größenordnungen mehr nützliche Informationen (weil er auf Daten trainiert ist) als diese Quantumsegmente (nur 100 sortierte Strings mit Duplikaten).

 
Forester #:

Warum sind Sie so versessen auf diese Quanten? ....

Sie haben überhaupt nichts Intellektuelles an sich. Einfach z.B. 10000 Zeilen in 100 Stücke aufteilen, d.h. sortieren und von unten nach oben 100 Zeilen zählen, wenn die nächsten mit der hundertsten Zeile übereinstimmen (d.h. Wiederholungen), dann verweisen wir sie alle auf das erste Stück. Duplikate sind über Beginn der Eingabe von Zeilen in der zweiten Quantum - die nächsten 100 + Duplikate, wenn es welche gibt. Und so weiter, bis wir keine Zeilen mehr haben.

Selbst ein Baum enthält um Größenordnungen mehr nützliche Informationen (weil er auf Daten trainiert ist) als diese Quantensegmente (nur 100 sortierte Zeilen mit Duplikaten).

Quantensegmente sind die Bausteine, aus denen das CatBoost-Modell aufgebaut ist. Ursprünglich, so habe ich es verstanden, wurde auf diese Weise die Frage der Speichereinsparung und allgemein der Beschleunigung von Berechnungen gelöst. Ein Nebeneffekt ist die Verringerung der Varianten von Kombinationen von Prädiktorindikatoren, ein Schritt zur Verringerung der Multikollinearität, was im Allgemeinen zur Geschwindigkeit und Qualität des Trainings beiträgt. Außerdem wird das Problem der Datendrift zum Teil gelöst.

Ich sehe noch einen weiteren Ansatzpunkt - die Erforschung des Potenzials probabilistischer Schätzungen in Quantensegmentdaten. Nimmt man die von Ihnen vorgeschlagene Methode der Quantisierung (eigentlich ist es besser, sich vorzustellen, dass der Zweck des Prozesses darin besteht, homogene Gruppen auszusieben - analog zum Clustering) und teilt die Daten entsprechend der Anzahl der Beispiele in 20 gleiche Quantensegmente auf, so stellt sich heraus, dass in jedem Quantensegment nur 5 % der Daten übrig sind. CatBoost erstellt standardmäßig 254 Trennzeichen - 255 Segmente. Aus diesen Segmenten werden dann Bäume gebildet. Es wird davon ausgegangen, dass alle Quantensegmente gleich nützlich sind, und ihre Einfügung sollte durch die Partitionierung der Gruppe in Untergruppen bestimmt werden, durch die Methode des Aufbaus eines Entscheidungsbaums. Die Partitionierung erfolgt sowohl nach der Wurzel als auch nach anderen Prädiktoren. Selbst wenn wir einen Baum nehmen, wie viele der ursprünglichen Beispiele der Positivklasse "1" werden nach 6 Teilungen in der endgültigen Liste verbleiben? Wir müssen berücksichtigen, dass die Auswahl der Aufteilung auf der Metrik der kumulativen Anzahl von Quantensplits basiert. Berücksichtigt man die Baumkonstruktionsmethode selbst, so wird deutlich, dass je qualitativer die Aufteilung des Prädiktors in Quantensegmente erfolgt, desto weniger Splits erforderlich sind, um die gleiche Genauigkeit im Blatt zu erreichen. Ich weise darauf hin, dass jeder Split eine Hypothese ist, und nicht alle Hypothesen wahr sein können. Wenn wir also die Aufteilung unter Berücksichtigung des Potenzials eines Quantensegments, eher zu einer der Klassen zu gehören, vornehmen, reduzieren wir die Anzahl der Aufteilungen, um eine ähnliche Genauigkeit zu erreichen, und somit auch die Anzahl der potenziell falschen Hypothesen (Aufteilungen). Wenn wir außerdem den Prädiktor sofort in drei globale Regionen aufteilen können - zwei für die Klassenzugehörigkeit und eine für die Ungewissheit -, dann werden die Modelle im Durchschnitt kleiner sein und eine bessere statistische Leistung aufweisen - ich erwarte auch eine höhere Robustheit.

Nehmen wir zum Beispiel an, dass der Prädiktor der RSI-Oszillator ist - signifikante Aktionen der Marktteilnehmer treten um die Werte 70, 50, 30 auf - alles darüber hinaus, sagen wir, hat keinen Einfluss auf die Entscheidungsfindung der Marktteilnehmer. Dann ist es sinnvoll, eine Quantentabelle so zu erstellen, dass diese 3 Werte vom Rest der Bevölkerung getrennt werden. Andernfalls wird einer der Splits zufällig mehr Beispiele im Quantum-Segment der Klassenzugehörigkeit haben, und Sie erhalten eine falsche Regel für eine falsche Hypothese.

Sie können ein Balkendiagramm mit quantisierten Prädiktorenwerten erstellen und für jede Spalte eine Kurve der Wahrscheinlichkeit der Klassenzugehörigkeit "1" zeichnen. Wenn die Kurve eher eine gerade Linie ist, würde ich einen solchen Prädiktor auf die Bank setzen. Ein guter Prädiktor weist meiner Meinung nach entweder eine schräge Linie oder Spitzen in einigen Spalten auf.

Man kann sagen, dass ich durch die Quantifizierung nach diskreten Ereignissen suche, die die Wahrscheinlichkeit einer Kursbewegung beeinflussen.

 
Die Regel ist genau das, was teilen wird
rsi>69 & rsi<71....
Das ist alles Quantisierung.
Man nimmt eine hölzerne AMO, spaltet sie in Bäume und zieht die richtigen heraus.

Welche Quantisierung? Du bist so ein Nonsens, es ist erbärmlich.

Es ist alles in drei Zeilen Code gelöst...
Und du arbeitest schon seit Jahren mit dieser Quantisierung, wie ein verrückter Professor.
 
mytarmailS #:
Die Regel teilt einfach
rsi>69 & rsi<71....
Das war's mit der Quantisierung...
Du nimmst ein hölzernes AMO, spaltest es in Bäume und ziehst die richtigen heraus...

Welche Quantifizierung? Du redest so einen Blödsinn, das ist erbärmlich.

Es ist alles in drei Zeilen Code gelöst...
Und du bastelst schon seit Jahren an diesem Quantisierungsmedium herum, wie ein verrückter Professor.

Es gibt verschiedene Möglichkeiten, eine Quantentabelle zu erstellen. Ich glaube, man kann es tatsächlich mit einem Standardpaket machen, das Bäume auf einem einzigen Prädiktor mit gegebenen Einschränkungen im Blatt auf den Prozentsatz der Beispiele aufbaut. Was das für ein Paket ist und wie ich die Daten in dem von mir benötigten Format erhalte, weiß ich nicht.

Wichtig ist nicht nur die Partitionierung, sondern die Suche nach Kriterien für die Bewertung dieser Quantenaufteilung, die die Wahrscheinlichkeit erhöhen, dass die Klassenzugehörigkeit in den neuen Daten erhalten bleibt.

Warum ich das tue - weil dies der Schlüssel zum Aufbau eines qualitativen Modells ist.

Warum es so lange dauert - eine Menge Experimente und Testskripte. Ich habe ein wenig Verständnis für OpenCL und der Code ist jetzt teilweise auf einer Videokarte gerechnet - es braucht Zeit - ich muss eine Menge Dinge studieren.

 
Aleksey Vyazmikin #:

Dabei geht es nicht nur um die Partitionierung, sondern auch darum, Kriterien für die Bewertung dieses Quanten-Cutoffs zu finden, die die Wahrscheinlichkeit erhöhen, dass die Klassenzugehörigkeit in den neuen Daten erhalten bleibt.

Haben Sie sich jemals den Code in demselben Catbuster angesehen? Sie verwenden ihn. Es werden keine Pakete von Drittanbietern verwendet. Aber das ist so eine kleine Funktion (sie ist sogar noch einfacher als das, was ich beschrieben habe, sie verschiebt den Trennpunkt nicht um die Anzahl der Duplikate).
Ich habe Kommentare dazu geschrieben, was dabei herauskommt. Die Eingabe ist eine sortierte Spalte.

static THashSet<float> GenerateMedianBorders(
    const TVector<float>& featureValues, const TMaybe<TVector<float>>& initialBorders, int maxBordersCount) {
    THashSet<float> result;
    ui64 total = featureValues.size(); //число строк в столбце
    if (total == 0 || featureValues.front() == featureValues.back()) { // проверки
        return result;
    }

    for (int i = 0; i < maxBordersCount; ++i) { // цикл по числу квантов
        ui64 i1 = (i + 1) * total / (maxBordersCount + 1); // номер строки начала кванта номер i
        i1 = Min(i1, total - 1); // не больше числа строк 
        float val1 = featureValues[i1]; // значение в строке i1
        if (val1 != featureValues[0]) { // если != значению в 0-й строке, чтобы не было дубля с 0-й строкой
            result.insert(RegularBorder(val1, featureValues, initialBorders)); // сохранить значение в массив границ разделяющих кванты (не смотрел, но очевидно, что дубликаты пропустит и не создаст им квант)
        }
    }
    return result;
}

Wie Sie sehen können, ist alles sehr einfach und es gibt hier nichts Intellektuelles - zählen Sie einfach z.B. 100 Zeilen und das ist alles.
Etwas komplexere Varianten können sich nach der Anzahl der Duplikate richten, Sie können auch die Größe der Quanten optimieren (z.B. wenn von 10000 Zeilen 9000 Duplikate sind, wird die einfache Funktion 11 Quanten sein: 10 aus den ersten 1000 Zeilen und in der 11. die restlichen 9000 Duplikate, oder man kann die ersten 1000 Zeilen in 99 Quanten + 1 Quant mit 9000 Duplikaten unterteilen).
Aber sie haben auch nichts Intellektuelles - die gleiche einfache Zählung der erforderlichen Anzahl von Zeichenfolgen ist die Grundlage.

Das Original (es gibt kompliziertere Varianten) https://github.com/catboost/catboost/blob/3cde523d326e08b32caf1b8b138c2c5303dc52e5/library/cpp/grid_creator/binarization.cpp
Studieren Sie die Funktionen dieser Seite eine Woche lang und sparen Sie mehrere Jahre.

P.s. Der Hauptgrund, warum das nächste Quantum nicht genau 100 Strings hat, sondern 315 oder 88 oder 4121, liegt nicht in irgendeiner super-kniffligen Formel (bei der Strings nach der Vorhersagekraft kombiniert werden, mit der man nach Bewertungskriterien für dieses Quantumsegment suchen will), sondern einfach in der Anzahl der Duplikate.
catboost/binarization.cpp at 3cde523d326e08b32caf1b8b138c2c5303dc52e5 · catboost/catboost
catboost/binarization.cpp at 3cde523d326e08b32caf1b8b138c2c5303dc52e5 · catboost/catboost
  • catboost
  • github.com
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
 
Ist es notwendig, einen Menschen zu retten, der offensichtlich am Ertrinken ist, aber seinen Selbstmord genießt?
Wenn Sie ihm eine helfende Hand anbieten, lehnt er sie ab, streitet mit Ihnen, versucht nicht, selbst etwas zu tun, um herauszukommen, und diktiert seine eigenen Bedingungen wie:
"Entweder du rettest mich selbst, trägst mich zu meiner Lieblingsmusik über deinem Kopf aus dem Wasser, oder du tust es nicht.
Und dann hast du überhaupt keine Lust, mich zu retten.


 
Forester #:

Haben Sie sich den Code in denselben Catbusters überhaupt angesehen? Du verwendest ihn. Es werden keine Pakete von Drittanbietern verwendet. Aber das ist so eine kleine Funktion (sie ist sogar einfacher als das, was ich beschrieben habe, sie verschiebt den Trennungspunkt nicht um die Anzahl der Duplikate).
Ich habe Kommentare dazu geschrieben, was dabei herauskommt. Die Eingabe ist eine sortierte Spalte.

Natürlich habe ich mir das angeschaut. Außerdem bin ich bereit, die Arbeit zu bezahlen, um alle Quantisierungsmethoden in MQL5 zu reproduzieren. Bisherige Versuche waren erfolglos, möchten Sie es versuchen?

Förster #:

Wie Sie sehen, ist alles sehr einfach und es gibt hier nichts Intellektuelles - zählen Sie einfach z.B. 100 Zeilen und das war's.

Du hast die einfachste Methode angegeben - ja, es ist nicht schwer.

Außerdem, habe ich geschrieben, dass es ausgeklügelte Quantifizierungsmethoden gibt oder so etwas in der Art? Inwiefern steht das im Widerspruch zu dem, was ich geschrieben habe?