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

 
Maxim Dmitrievsky:

нам с вами общаться не о чем, потому что по психотипу вижу что вы либо ребенок, либо просто.. короче проехали

"нам" это вам что ли? барину? Работу себе найдите для начала, стыдно сидеть на шее у родителей в таком возрасте. 

 
Maxim Dmitrievsky:

не совсем, здесь понятнее должно быть

https://habr.com/ru/post/276355/

спектр применения большой, как конкретно будет применяться - тот еще вопрос

Итог из 2 части статьи:
Дропаут можно рассматривать как дешевую версию байесовскости, которая зато очень простая. Идея строится все на той же аналогии с ансамблями, про которую я упоминал в конце прошлого поста: вот представьте, что у вас есть нейронная сеть. Теперь представьте, что вы берете ее, случайно отрываете ей несколько нейронов, и откладываете в сторонку. После ~1000 таких операций вы получаете ансамбль из тысячи сетей, где каждая слегка отличается друг от друга случайным образом. Мы усредняем их предсказания, и получаем, что случайные отклонения местами компенсируют друг друга и дают актуальные предсказания. Теперь представьте, что у вас есть байесовская сеть, и вы тысячу раз достаете набор ее весов из неопределенности, и получаете такой же ансамбль слегка отличающихся друг от друга сетей.

Чем байесовский подход круче — он позволяет использовать эту рандомность контролируемым образом.

....

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

Чем дропаут круче — это тем, что он очень простой, конечно.

Т.е. глубокая НС с дропаутом является аналогом Бейесовской сети. А дропаут есть во многих пакетах, можно вначале с их помощью поискать рыбу на своих предикторах/целях. А потом уже пытаться улучшать результаты Бейесом. В статьях Владимира Перервенко дропаут использовался, можно на их основе поэкспериментировать.

Я экспериментировал, но прорыва на своих предикторах не нашел.
Но я не делал сети настолько глубокими, чтобы из них выкинуть 1000 нейронов. Больше чем  N-100-100-100-100-1 не пробовал (401 нейрон). Т.е. 100 может и удалялась, но не 1000. Для удаления 1000, надо сеть с 4-10 тыс нейронов и она наверное будет долго считать.
Возможно что и леса с 1000 деревьев будут иметь аналогичный результат, при этом посчтаются намного быстрее чем НС.
 
elibrarius:
Больше чем  N-100-100-100-100-1 не пробовал (401 нейрон). 

Таких монстров нормально не обучить. Имхо, проще надо НС. Где-то до 100 нейронов.

 
elibrarius:
Итог из 2 части статьи:

Т.е. глубокая НС с дропаутом является аналогом Бейесовской сети. А дропаут есть во многих пакетах, можно вначале с их помощью поискать рыбу на своих предикторах/целях. А потом уже пытаться улучшать результаты Бейесом. В статьях Владимира Перервенко дропаут использовался, можно на их основе поэкспериментировать.

Я экспериментировал, но прорыва на своих предикторах не нашел.
Но я не делал сети настолько глубокими, чтобы из них выкинуть 1000 нейронов. Больше чем  N-100-100-100-100-1 не пробовал (401 нейрон). Т.е. 100 может и удалялась, но не 1000. Для удаления 1000, надо сеть с 4-10 тыс нейронов и она наверное будет долго считать.
Возможно что и леса с 1000 деревьев будут иметь аналогичный результат, при этом посчтаются намного быстрее чем НС.

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

грубое сравнение Байеса и дропаутов по-моему, но я пока слабо шарю в теме и спорить не буду, может и так

 
Maxim Dmitrievsky:

грубое сравнение Байеса и дропаутов по-моему, но я пока слабо шарю в теме и спорить не буду, может и так

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

 
Maxim Dmitrievsky:

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

ну если лес с 1000 деревьев строить, то наверное в каждое надо подавать по 1% данных, т.е. r=0.01. А не 0,1 ... 0,6 как рекомендовано для лесов с 100 рекокомендованных деревьев.
 

Непонятный код в лесах Alglib-a нашел. Полный код ф-ии расчета кросс этропии из dataanalysis.mqh:

//+------------------------------------------------------------------+
//| Average cross-entropy (in bits per element) on the test set      |
//| INPUT PARAMETERS:                                                |
//|     DF      -   decision forest model                            |
//|     XY      -   test set                                         |
//|     NPoints -   test set size                                    |
//| RESULT:                                                          |
//|     CrossEntropy/(NPoints*LN(2)).                                |
//|     Zero if model solves regression task.                        |
//+------------------------------------------------------------------+
static double CDForest::DFAvgCE(CDecisionForest &df,CMatrixDouble &xy,
                                const int npoints)
  {
//--- create variables
   double result=0;
   int    i=0;
   int    j=0;
   int    k=0;
   int    tmpi=0;
   int    i_=0;
//--- creating arrays
   double x[];
   double y[];
//--- allocation
   ArrayResizeAL(x,df.m_nvars);
   ArrayResizeAL(y,df.m_nclasses);
//--- initialization
   result=0;
   for(i=0;i<=npoints-1;i++)
     {
      for(i_=0;i_<=df.m_nvars-1;i_++)
         x[i_]=xy[i][i_];
      //--- function call
      DFProcess(df,x,y);
      //--- check
      if(df.m_nclasses>1)
        {
         //--- classification-specific code
         k=(int)MathRound(xy[i][df.m_nvars]);
         tmpi=0;
         for(j=1;j<=df.m_nclasses-1;j++)
           {
            //--- check
            if(y[j]>(double)(y[tmpi]))
               tmpi=j;
           }

         //--- check
         if(y[k]!=0.0)
            result=result-MathLog(y[k]);
         else
            result=result-MathLog(CMath::m_minrealnumber);
        }
     }
//--- return result
   return(result/npoints);
  }

Кусок кода выделенный красным считает нечто (tmpi), что ниже по коду никак не используется. Зачем он тогда включен?
Либо что-то не доделали, либо не до конца подчистили код.
А вообще я в этой ф-ии разбираться начал, потому-что захотел 1 дерево поисследовать. И задав кол-во деревьев в лесе = 1 увидел, что все ошибки между 0 и 1, а эта от 100 до 300+ бывает.
Кто-то разбирается в кросс энтропии - код вообще правильный, или что-то недоделали?

По википедии должно быть

 

 

с катбустом сравнивал - нормально возвращает, обычно > 0.5 на тесте.. ну как обычно

сам расчет мб завтра посмотрю, мб отладочный код не убрали

вообще эта метрика здесь ни о чем, т.к. не используется для раннего останова или еще чего-то.. и неинформативная в итоге. Ошибку классификации беру да и все
 
Maxim Dmitrievsky:
с катбустом сравнивал - нормально возвращает, обычно > 0.5 на тесте.. ну как обычно

а лес из 1 дерева в катбусте не проверял? и вообще катбуст кроссэнтропию на выходе дает или какую-то другую ошибку?

Alglib выдает 5 разных ошибок: (вот мой пример с 1 деревом выдал)

Alert: Training set error estimate report: relclserror=0.267; avgce=184.207; rmserror=0.516; avgerror=0.267; avgrelerror=0.267;

 

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

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

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

Причина обращения: