Aprendizado de máquina no trading: teoria, prática, negociação e não só - página 1260

 
Maxim Dmitrievsky:
com katbust - retorna normal, normalmente > 0.5 no teste... como de costume

Você verificou floresta de 1 árvore em katbust? E o katbust dá saída de cross-entropy ou algum outro erro?

Alglib dá 5 erros diferentes: (aqui está o meu exemplo com 1 árvore)

Alerta: Relatório de estimativa de erro do conjunto de treinamento: relclserror=0,267; avgce=184,207; rmserror=0,516; avgerror=0,267; avgrelerror=0,267;

 

Não, o impulso é construído de forma diferente, aumenta o número de árvores enquanto a entropia diminui, quando começa a crescer durante as iterações, pára, para não complicar demasiado o modelo.

dá entropia e qualquer métrica personalizada, mas baseia-se na entropia.

a versão inglesa do site alglib tem uma floresta nova e mais rápida, a propósito... eu queria reescrevê-la, mas não consigo encontrá-la )

 
Dei uma vista de olhos nos documentos do xgboost. Não é saída de entropia cruzada, mas sim erro
- Taxa de erro de classificação binária. É calculado como (# casos errados) / (# todos os casos).
Por padrão, ele usa o limite de 0,5 para valores previstos para definir instâncias negativas e positivas.
Diferente limiar (por exemplo, 0.) poderia ser especificado como "error@0".
 
elibrarius:
Dei uma vista de olhos nos documentos do xgboost. Não tem uma saída de entropia cruzada, mas
erro - Taxa de erro de classificação binária. É calculado como (# casos errados) / (# todos os casos).
Por padrão, ele usa o limite de 0,5 para valores previstos para definir instâncias negativas e positivas.
Diferente limiar (por exemplo, 0.) poderia ser especificado como "error@0".

Sim, e aqui o erro de classificação é usado por defeito, aparentemente

mas você tem que distinguir, impulsionando usa o erro para parar, enquanto a floresta só dá pós-facto, e árvores de profundidade total
 
Maxim Dmitrievsky:

Não, o impulso é construído de forma diferente, aumenta o número de árvores enquanto a entropia diminui, quando começa a crescer durante as iterações, pára, para não complicar demasiado o modelo.

dá entropia e qualquer métrica personalizada, mas baseia-se na entropia.

na versão em inglês do site alglib eu postei uma nova e mais rápida floresta, a propósito... eu queria reescrevê-la, mas não consigo encontrá-la )

Onde está a nova algibeira - posso procurá-la em algum lugar no fórum? É interessante comparar o código desta função

 
elibrarius:

Onde está o novo alliglib - está em algum lugar do fórum para procurar? Interessante para comparar o código desta função

não, está em c++ ou c#

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

  • algoritmo melhorado de construção de florestas aleatórias, que é de 2x a 10x mais rápido que a versão anterior e produz ordens de magnitude de florestas menores.
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:

Não, está em c++ ou c#

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

  • algoritmo melhorado de construção de florestas aleatórias, que é de 2x a 10x mais rápido que a versão anterior e produz ordens de magnitude de florestas menores.

Obrigado!

 
elibrarius:

Obrigado!

Se você vai descobrir e comparar, me avise :) você poderia reescrevê-lo dessa maneira, se não for muito incômodo. Os arquivos da floresta atual são muito grandes, seria bom reduzi-los. E a aceleração também é um bónus.

 

Graças à iniciativa do Maxim, fiquei sem banimento! Obrigado, Maxim.

Já estou na sauna há algum tempo e fiz o meu EA de folhas, aquele sobre o qual escrevi antes do Ano Novo. Até agora o resultado é negativo, mas acho que devo dar-lhe mais tempo, porque o Si está no plano agora depois dos fortes movimentos de Ano Novo, que não aconteceram quando o EA foi iniciado.

Os testes foram feitos com um volume mínimo na conta com um longo histórico e má experiência, por isso não haverá um sinal público, vou postar o relatório mais tarde, quando as estatísticas estarão disponíveis. Faço-o para aqueles que estão interessados, se a minha abordagem é ou não rentável.

Em relação ao CatBoost'a, porque tenho modelos muito pequenos, cerca de 1-30 árvores, então enfrento uma situação em que o teste (em que o modelo de selecção) e o exame (em que teste independente) amostra pode mostrar muito bons resultados financeiros, mas no treinamento amostra resultados são muito fracos. Então agora eu testei o modelo nas três amostras, e se eu estou feliz com ele, eu o seleciono. Portanto, recomendo que se olhe também para a amostra de treinamento, eu não fiz isso porque eu esperava o mesmo efeito que as folhas da árvore (minha abordagem alternativa onde apenas as folhas são selecionadas) ou andaimes, que o modelo definitivamente se comportaria bem na amostra de teste, mas acontece que isso nem sempre é o caso.

Até agora a questão dos critérios de seleção de um modelo está aberta para mim, após testes em uma amostra para treinamento de bons modelos (para uma série de indicadores financeiros e modelos de critérios) de 100k não é mais do que 10-30 peças, o que não é suficiente, é claro. Devemos ou baixar os critérios ou criar mais modelos. O Catbust tem muitos parâmetros diferentes, portanto você pode rebitar muitos modelos.

Por outro lado, eu realmente esperava treinar através de placas gráficas, mas acabou por ser muito pouco útil para 1060 - até agora os experimentos mostram que levou 20 minutos para treinar 200 modelos, enquanto no CPU G3900 (na verdade a escória sob LGA1151) levou apenas 6 minutos! Ao mesmo tempo, o processador está constantemente a carregar 50% a 60%, o que torna impossível utilizar mais de 2 placas de vídeo ao mesmo tempo, enquanto eu tinha grandes esperanças para um equipamento de 6 placas. Não sei porque é que isto acontece quando em teoria tudo deve ser rápido. O maior gargalo nos cálculos da GPU é a transferência do modelo da RAM para a GPU e vice-versa, mas é muito lento para mim, talvez a transferência ocorra após cada iteração e essa é a razão dos atrasos. Alguém mais já tentou executá-lo na GPU?

 
Maxim Dmitrievsky:

Se você vai descobrir e comparar, me avise :) você poderia reescrevê-lo dessa maneira, se não for muito incômodo. Os arquivos da floresta atual são muito grandes, seria bom reduzi-los. Sim, e a aceleração também é um bónus.

Eu comparei-o, há o mesmo código não utilizado abaixo: (assinado em 2009, ou seja, não foram feitas edições nesta 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;
        }