L'apprendimento automatico nel trading: teoria, modelli, pratica e algo-trading - pagina 1260

 
Maxim Dmitrievsky:
con katbust - ritorna normale, di solito > 0,5 sul test... come al solito

Hai controllato la foresta di 1 albero in katbust? E katbust dà un output di cross-entropia o qualche altro errore?

Alglib dà 5 errori diversi: (ecco il mio esempio con 1 albero)

Allarme: rapporto di stima degli errori del set di allenamento: relclserror=0.267; avgce=184.207; rmserror=0.516; avgerror=0.267; avgrelerror=0.267;

 

No, il boosting è costruito in modo diverso, aumenta il numero di alberi mentre l'entropia diminuisce, quando inizia a crescere durante n iterazioni, si ferma, in modo da non complicare troppo il modello

dà l'entropia e qualsiasi metrica personalizzata, ma si basa sull'entropia

la versione inglese del sito alglib ha una nuova foresta più veloce, a proposito... volevo riscriverla, ma non riesco a trovarla )

 
Ho dato un'occhiata ai documenti di xgboost. Non è l'output dell'entropia incrociata, ma
error - Binary classification error rate. Si calcola come (# casi sbagliati) / (# tutti i casi).
Per impostazione predefinita, utilizza la soglia di 0,5 per i valori predetti per definire le istanze negative e positive.
Una soglia diversa (per esempio, 0.) potrebbe essere specificata come "error@0".
 
elibrario:
Ho dato un'occhiata ai documenti di xgboost. Non ha un output di entropia incrociata, ma
errore - Tasso di errore di classificazione binaria. Si calcola come (# casi sbagliati) / (# tutti i casi).
Per impostazione predefinita, utilizza la soglia di 0,5 per i valori predetti per definire le istanze negative e positive.
Una soglia diversa (per esempio, 0.) potrebbe essere specificata come "error@0".

Sì, e qui l'errore di classificazione è usato di default, apparentemente

ma bisogna distinguere, il boosting usa l'errore per fermarsi, mentre la foresta dà solo post-facto, e gli alberi di profondità completa
 
Maxim Dmitrievsky:

No, il boosting è costruito in modo diverso, aumenta il numero di alberi mentre l'entropia diminuisce, quando inizia a crescere durante n iterazioni, si ferma, in modo da non complicare troppo il modello

dà l'entropia e qualsiasi metrica personalizzata, ma si basa sull'entropia

sulla versione inglese del sito di alglib ho postato una nuova foresta più veloce, a proposito... volevo riscriverla, ma non riesco a trovarla)

Dov'è il nuovo alglib - posso cercarlo sul forum da qualche parte? È interessante confrontare il codice di questa funzione

 
elibrario:

Dov'è il nuovo alliglib - è sul forum da qualche parte a guardare? È interessante confrontare il codice di questa funzione

no, è in c++ o c#

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

  • algoritmo di costruzione delle foreste casuali migliorato, che è da 2x a 10x più veloce della versione precedente e produce foreste di ordini di grandezza inferiori.
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:

No, è in c++ o c#

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

  • algoritmo di costruzione delle foreste casuali migliorato, che è da 2x a 10x più veloce della versione precedente e produce foreste di ordini di grandezza inferiori.

Grazie!

 
elibrario:

Grazie!

Se lo capisci e lo confronti, fammi sapere :) potresti riscriverlo in questo modo, se non è troppo complicato. I file della foresta attuale sono troppo grandi, sarebbe bello ridurli. E l'accelerazione è anche un bonus.

 

Grazie all'iniziativa di Maxim, sono stato riabilitato! Grazie Maxim.

Sono stato nella sauna per un po' e ho eseguito il mio EA su foglie, quello di cui ho scritto prima di Capodanno. Finora il risultato è negativo, ma penso che devo dargli più tempo, perché Si è in piatto ora dopo le forti mosse di Capodanno, che non sono accadute quando l'EA è stato avviato.

I test sono stati fatti con un volume minimo sull'account con una ricca storia e una cattiva esperienza, quindi non ci sarà un segnale pubblico, posterò il rapporto più tardi quando le statistiche saranno disponibili. Lo faccio per coloro che sono interessati a sapere se il mio approccio è redditizio o meno.

Per quanto riguarda CatBoost'a, perché ho modelli molto piccoli, 1-30 alberi o giù di lì, poi di fronte a una situazione in cui il test (su cui il modello di selezione) e l'esame (su cui test indipendente) campione può mostrare risultati finanziari molto buoni, ma sul campione di formazione risultati sono molto deboli. Così ora provo il modello su tutti e tre i campioni, e se ne sono soddisfatto, lo seleziono. Raccomando quindi di guardare anche il campione di allenamento, non l'ho fatto perché mi aspettavo lo stesso effetto delle foglie dell'albero (il mio approccio alternativo in cui si selezionano solo le foglie) o dello scaffolding, che il modello si sarebbe sicuramente comportato bene sul campione di test, ma si scopre che non è sempre così.

Finora la questione dei criteri di selezione di un modello è aperta per me, dopo i test su un campione per la formazione di buoni modelli (per un certo numero di indicatori finanziari e modelli di criteri) su 100k non è più di 10-30 pezzi, che non è abbastanza naturalmente. Dovremmo abbassare i criteri o creare più modelli. Catbust ha un sacco di parametri diversi, quindi puoi rivettare un sacco di modelli.

D'altra parte, speravo davvero nell'addestramento tramite le schede grafiche, ma si è rivelato molto poco utile per la 1060 - finora gli esperimenti mostrano che ci sono voluti 20 minuti per addestrare 200 modelli, mentre sul processore G3900 (in realtà le scorie sotto LGA1151) ci sono voluti solo 6 minuti! Allo stesso tempo il processore carica sempre dal 50% al 60%, il che rende impossibile utilizzare più di 2 schede video contemporaneamente, mentre avevo grandi speranze per un impianto a 6 schede. Non so perché questo accade quando in teoria tutto dovrebbe essere veloce. Il più grande collo di bottiglia nei calcoli della GPU è il trasferimento del modello dalla RAM alla GPU e viceversa, ma è troppo lento per me, forse il trasferimento avviene dopo ogni iterazione e questa è la ragione dei lag. Qualcun altro ha provato a farlo girare su GPU?

 
Maxim Dmitrievsky:

Se lo capisci e lo confronti, fammi sapere :) potresti riscriverlo in questo modo, se non è troppo complicato. I file della foresta attuale sono troppo grandi, sarebbe bello ridurli. Sì, e l'accelerazione è anche un bonus.

L'ho confrontato, c'è lo stesso pezzo di codice inutilizzato qui sotto: (firmato nel 2009, quindi non sono state fatte modifiche in questa parte)


             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;
        }