Машинное обучение в трейдинге: теория, модели, практика и алготорговля - страница 1260

 
Посмотрел доки xgboost. У него не кросс энтропия на выходе, а
error - Binary classification error rate. It is calculated as (# wrong cases) / (# all cases).
By default, it uses the 0.5 threshold for predicted values to define negative and positive instances.
Different threshold (e.g., 0.) could be specified as "error@0."
 
elibrarius:
Посмотрел доки xgboost. У него не кросс энтропия на выходе, а
error - Binary classification error rate. It is calculated as (# wrong cases) / (# all cases).
By default, it uses the 0.5 threshold for predicted values to define negative and positive instances.
Different threshold (e.g., 0.) could be specified as "error@0."

ну да, а здесь ошибка классификации используется по дефолту, видимо

но надо различать, бустинг использует ошибку для останова, а лес просто постфактум выдает, и деревья на всю глубину простраивает
 
Maxim Dmitrievsky:

нет, бустинг же по другому строится, он наращивает кол-во деревьев пока энтропия падает, когда начинает расти на протяжении n-итераций то останавлвается, что бы не переусложнять модель

дает энтропию и любую кастомную метрику, но строится по энтропии

на англ. версии сайта алглиб выложен новый, более быстрый лес, кстати.. хотел разобраться-переписать, но руки не доходят )

А где новый алглиб - на форуме где-то искать? Интересно сравнить код этой функции

 
elibrarius:

А где новый алглиб - на форуме где-то искать? Интересно сравнить код этой функции

не, там на c++ ли c#

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

  • improved random forests construction algorithm, which is from 2x to 10x faster than previous version and produces orders of magnitude smaller forests.
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:

не, там на c++ ли c#

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

  • improved random forests construction algorithm, which is from 2x to 10x faster than previous version and produces orders of magnitude smaller forests.

Спасибо!

 
elibrarius:

Спасибо!

Если будете разбираться-сравнивать, пишите :) так то можно было бы переписать, если там не сильно много гемора. Файлы текущего леса слишком большие получаются, уменьшить было бы неплохо. Да и ускорение тоже бонус

 

Благодаря инициативе Максима меня разбанили! Спасибо Максим.

Пока был в бане запустил советник на листьях, тот о котором писал перед НГ - пока результат негативный, но я думаю, что нужно дать ему больше времени - сейчас на Si как раз флэты начались после сильных новогодних движений, которые не пришлись на время  начала работы советника.

Тесты провожу пока минимальным лотом, на счете с богатой историей и плачевным опытом, поэтому публичного сигнала не будет, отчет опубликую позже - когда накопится статистика. Делаю это для того, кому, интересно будет тот мой подход прибыльным или нет.

Относительна CatBoost'a, так-как у меня модели очень маленькие, по 1-30 деревьев примерно, то столкнулся с ситуацией, когда тестовая(на которой происходит отбор модели) и экзаменационная (на которой происходит независимое тестирование) выборка могут показывать очень хорошие финансовые результаты, но на учебной выборке результаты очень слабые. Поэтому теперь проверяю модель на всех трех выборках, и если она меня устраивает, то произвожу отбор. Поэтому рекомендую заглядывать и на выборку обучения, я этого не делал так-как ожидал тот же эффект, как от листьев дерева (альтернативный мой подход, когда выбираются только листья) или лесов, что на тестовой выборке модель уж точно будет хорошо себя вести, но оказалось, что это не всегда так.

Пока для меня открыт вопрос критериев для отбора модели, после тестов на выборке для обучения хороших моделей (по ряду финансовых показателей и критериев модели) из 100к остается не более 10-30 штук, что маловато конечно. Толи занижать критерии, то ли создавать больше моделей. У кэтбуста много разных параметров, поэтому моделей можно клепать очень много.

С другой стороны, очень надеялся на обучения с помощью видеокарт, а оказалось, что толку от 1060 очень мало - пока эксперименты показывают что на обучение 200 моделей ушло 20 минут, в то время как на процессоре G3900 (фактически самый шлак под LGA1151) на это ушло всего 6 минут! При этом процессор грузится постоянно на процентов 50-60, что делает невозможном применять сразу более 2х видеокарт, а у меня были сильные надежды на риг из 6ти видеокарт. Вот и не знаю, почему так происходит, когда в теории все должно быть быстро. Самым узким местом в вычислениях на GPU является переброс модели из ОЗУ в графическую память и обратно, но уж очень медленно у меня это все работает, возможно переброс происходит после каждой итерации и из-за этого тормоза. Кто-то ещё пробовал запускать на GPU?

 
Maxim Dmitrievsky:

Если будете разбираться-сравнивать, пишите :) так то можно было бы переписать, если там не сильно много гемора. Файлы текущего леса слишком большие получаются, уменьшить было бы неплохо. Да и ускорение тоже бонус

Сравнил, там такой же неиспользуемый ниже кусок кода: (подписао 2009 годом, т.е. правок не было в этой части)


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

 
elibrarius:

Сравнил, там такой же неиспользуемый ниже кусок кода: (подписао 2009 годом, т.е. правок не было в этой части)

ну рудимент какой-то.. открыл исходники cpp и шарп, резко глаза разбежались что с чем сравнивать, где изменения искать.. опять отложил )

 
Maxim Dmitrievsky:

ну рудимент какой-то.. открыл исходники cpp и шарп, резко глаза разбежались что с чем сравнивать, где изменения искать.. опять отложил )

Тоже глянул. Код построения леса и дерева совсем другой. Его больше.
Причина обращения: