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

 
Maxim Dmitrievsky:
mit katbust - es kehrt normal, in der Regel > 0,5 auf den Test... wie üblich

Haben Sie den Wald von 1 Baum in catbust überprüft? Und gibt catbust die Kreuzentropie aus oder einen anderen Fehler?

Alglib gibt 5 verschiedene Fehler an: (hier ist mein Beispiel mit 1 Baum)

Warnung: Bericht über die Fehlerschätzung des Trainingssatzes: relclserror=0,267; avgce=184,207; rmserror=0,516; avgerror=0,267; avgrelerror=0,267;

 

Nein, das Boosting ist anders aufgebaut, es erhöht die Anzahl der Bäume, während die Entropie abnimmt, und wenn sie während n Iterationen zu wachsen beginnt, hört es auf, um das Modell nicht zu kompliziert zu machen.

es gibt Entropie und jede beliebige benutzerdefinierte Metrik, aber es baut auf Entropie auf

die englische Version der alglib Seite hat übrigens einen neuen, schnelleren Wald... ich wollte ihn neu schreiben, kann ihn aber nicht finden )

 
Ich habe einen Blick in die xgboost-Dokumente geworfen. Es handelt sich nicht um eine Kreuzentropie-Ausgabe, sondern um
error - Binary classification error rate. Sie wird berechnet als (# falsche Fälle) / (# alle Fälle).
Standardmäßig wird der Schwellenwert von 0,5 für vorhergesagte Werte verwendet, um negative und positive Instanzen zu definieren.
Ein anderer Schwellenwert (z. B. 0) könnte als "Fehler@0" angegeben werden.
 
elibrarius:
Ich habe einen Blick in die xgboost-Dokumente geworfen. Es hat keine Kreuzentropie-Ausgabe, aber
error - Fehlerquote bei der binären Klassifizierung. Sie wird berechnet als (# falsche Fälle) / (# alle Fälle).
Standardmäßig wird der Schwellenwert von 0,5 für vorhergesagte Werte verwendet, um negative und positive Instanzen zu definieren.
Ein anderer Schwellenwert (z. B. 0) könnte als "Fehler@0" angegeben werden.

Ja, und hier wird anscheinend standardmäßig der Klassifizierungsfehler verwendet

aber man muss unterscheiden, Boosting nutzt Fehler zu stoppen, während der Wald nur post-facto gibt, und Bäume in voller Tiefe
 
Maxim Dmitrievsky:

Nein, das Boosting ist anders aufgebaut, es erhöht die Anzahl der Bäume, während die Entropie abnimmt, und wenn sie während n Iterationen zu wachsen beginnt, hört es auf, um das Modell nicht zu kompliziert zu machen.

es gibt Entropie und jede beliebige benutzerdefinierte Metrik, aber es baut auf Entropie auf

auf der englischen Version der alglib Seite habe ich übrigens einen neuen, schnelleren Wald gepostet... ich wollte ihn neu schreiben, aber ich kann ihn nicht finden )

Wo ist die neue Alglib - kann ich sie irgendwo im Forum suchen? Es ist interessant, den Code dieser Funktion zu vergleichen

 
elibrarius:

Wo ist das neue Alliglib - ist es im Forum irgendwo zu finden? Interessant ist der Vergleich des Codes dieser Funktion

Nein, es ist in C++ oder C#

http://www.alglib.net/arcnews.php#date_16_06_2018

  • verbesserter Algorithmus zur Erstellung von Zufallswäldern, der 2- bis 10-mal schneller ist als die vorherige Version und um Größenordnungen kleinere Wälder erzeugt.
NEWS Archive
  • www.alglib.net
The news archive contains the list of all news, 44 in total. The latest news are at the news page.
 
Maxim Dmitrievsky:

Nein, es ist in C++ oder C#

http://www.alglib.net/arcnews.php#date_16_06_2018

  • verbesserter Algorithmus zur Erstellung von Zufallswäldern, der 2- bis 10-mal schneller ist als die vorherige Version und um Größenordnungen kleinere Wälder erzeugt.

Danke!

 
elibrarius:

Ich danke Ihnen!

Wenn du es herausfindest und vergleichst, lass es mich wissen :) du könntest es auf diese Weise umschreiben, wenn es nicht zu viel Mühe macht. Die Dateien des aktuellen Waldes sind zu groß, es wäre schön, sie zu reduzieren. Und auch die Beschleunigung ist ein Pluspunkt.

 

Dank Maxim's Initiative bin ich wieder zugelassen worden! Danke, Maxim.

Ich war jetzt eine Weile in der Sauna und habe meinen EA auf Blättern laufen lassen, über den ich vor Neujahr geschrieben habe. Bis jetzt ist das Ergebnis negativ, aber ich denke, ich muss ihm mehr Zeit geben, denn Si ist jetzt nach den starken Neujahrsbewegungen, die nicht stattgefunden haben, als der EA gestartet wurde, in Flat.

Die Tests wurden mit minimalem Volumen auf dem Konto mit reicher Geschichte und schlechten Erfahrungen durchgeführt, daher wird es kein öffentliches Signal geben, ich werde den Bericht später veröffentlichen, wenn die Statistiken verfügbar sind. Ich tue es für diejenigen, die daran interessiert sind, ob mein Ansatz profitabel ist oder nicht.

In Bezug auf CatBoost'a, weil ich sehr kleine Modelle, 1-30 Bäume oder so, dann mit einer Situation konfrontiert, wo der Test (auf dem die Auswahl Modell) und Prüfung (auf dem unabhängigen Testen) Probe kann sehr gute finanzielle Ergebnisse zeigen, aber auf die Ausbildung Probe Ergebnisse sind sehr schwach. Jetzt teste ich das Modell an allen drei Proben, und wenn ich damit zufrieden bin, wähle ich es aus. Ich empfehle daher, auch die Trainingsstichprobe zu betrachten. Ich habe dies nicht getan, da ich den gleichen Effekt wie bei den Baumblättern (mein alternativer Ansatz, bei dem nur die Blätter ausgewählt werden) oder dem Gerüst erwartet habe, dass sich das Modell in der Teststichprobe definitiv gut verhält, aber es hat sich herausgestellt, dass dies nicht immer der Fall ist.

Bisher ist die Frage der Kriterien für die Auswahl eines Modells offen für mich, nach Tests auf einer Stichprobe für die Ausbildung guter Modelle (für eine Reihe von Finanzindikatoren und Kriterien Modelle) aus 100k ist nicht mehr als 10-30 Stück, was natürlich nicht genug ist. Wir sollten entweder die Kriterien senken oder mehr Modelle schaffen. Catbust verfügt über eine Vielzahl von Parametern, so dass Sie eine Vielzahl von Modellen vernieten können.

Auf der anderen Seite hatte ich wirklich gehofft, über Grafikkarten trainieren zu können, aber es stellte sich heraus, dass die 1060 nur sehr wenig Nutzen bringt - bisherige Experimente zeigen, dass es 20 Minuten dauerte, 200 Modelle zu trainieren, während es auf einem G3900-Prozessor (eigentlich die Schlacke unter LGA1151) nur 6 Minuten dauerte! Gleichzeitig ist der Prozessor ständig zu 50% bis 60% ausgelastet, was es unmöglich macht, mehr als 2 Grafikkarten gleichzeitig zu verwenden, obwohl ich große Hoffnungen in ein 6-Karten-Rig gesetzt hatte. Ich weiß nicht, warum das passiert, wenn theoretisch alles schnell gehen sollte. Der größte Engpass bei GPU-Berechnungen ist die Übertragung des Modells vom RAM zur GPU und zurück, aber das ist mir zu langsam, vielleicht erfolgt die Übertragung nach jeder Iteration und das ist der Grund für die Verzögerungen. Hat schon jemand versucht, es auf der GPU laufen zu lassen?

 
Maxim Dmitrievsky:

Wenn du es herausfindest und vergleichst, lass es mich wissen :) du könntest es auf diese Weise umschreiben, wenn es nicht zu viel Mühe macht. Die Dateien des aktuellen Waldes sind zu groß, es wäre schön, sie zu reduzieren. Ja, und die Beschleunigung ist auch ein Bonus.

Ich habe es verglichen, und es gibt das gleiche ungenutzte Stück Code unten: (unterzeichnet im Jahr 2009, d.h. dieser Teil wurde nicht mehr geändert)


             Copyright 16.02.2009 by Bochkanov Sergey
        *************************************************************************/
        public static double dfavgce(decisionforest df,
            double[,] xy,
            int npoints,
            alglib.xparams _params)
        {
            double result = 0;
            double[] x = new double[0];
            double[] y = new double[0];
            int i = 0;
            int j = 0;
            int k = 0;
            int tmpi = 0;
            int i_ = 0;

            x = new double[df.nvars-1+1];
            y = new double[df.nclasses-1+1];
            result = 0;
            for(i=0; i<=npoints-1; i++)
            {
                for(i_=0; i_<=df.nvars-1;i_++)
                {
                    x[i_] = xy[i,i_];
                }
                dfprocess(df, x, ref y, _params);
                if( df.nclasses>1 )
                {
                   
                    //
                    // classification-specific code
                    //
                    k = (int)Math.Round(xy[i,df.nvars]);
                    tmpi = 0;
                    for(j=1; j<=df.nclasses-1; j++)
                    {
                        if( (double)(y[j])>(double)(y[tmpi]) )
                        {
                            tmpi = j;
                        }
                    }

                    if( (double)(y[k])!=(double)(0) )
                    {
                        result = result-Math.Log(y[k]);
                    }
                    else
                    {
                        result = result-Math.Log(math.minrealnumber);
                    }
                }
            }
            result = result/npoints;
            return result;
        }