Обсуждение статьи "Random Decision Forest в обучении с подкреплением" - страница 3

 
mov:

Спасибо за статью, познавательно и в прикладном плане есть что взять (по крайней мере мне).

Как я понимаю, нечеткая логика была взята как пример для статьи. Нет запретов напрямую получать значение ts (реализовал, особых расхождений по эффективности не заметил - лес полностью подменяет нечеткую логику.). Это можно считать другим способом вознаграждения объекта. Как мне кажется (не могу подтвердить программой), увеличение числа оптимизируемых функций принадлежности не даст прироста, уже сейчас лес забивает нечеткую логику. Попробовал усреднять  результаты лесов (включая и fuzzy как в статье), результат улучшился, после нейронных сетей из AlgLIB удивила скорость обучения на значениях за несколько лет. Для задания явных отличий использовал вторую форму создания леса с явным указанием использования разного числа индикаторов (ну уж поиграться с составом индикаторов это даже не обсуждаю):

Подскажите, какие еще формы вознаграждения можно попробовать? Интересует создание ансамбля из лесов с разными формами вознаграждения, кстати, ансамблем названо усреднение? или специальная формула объединения результата? вроде в AlgLIB нет ансамблей лесов?

Может кому пригодится, при нескольких лесах хранить данные в куче файлов неудобно, решил так:

Структура описывается любая, т. к. её длина фиксирована, получается в файле хранить и её и лес (структура обязательно вначале). Один лес - один файл.

 

Еще раз спасибо за статью, благодаря ей всерьез занялся AlgLIB.

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

Можно попробовать вознаграждение в виде текущего Sharpe Ratio или R^2 по сделкам. Или же оценивать вообще не результаты сделок а, например, состояния рынка - если купили и тренд рос какое-то время то сигнал подходит. Вроде такого.

Под ансамблем я подразумевал простое усреднение результатов, да. Но для каждого леса можно задать свои предикторы и\или целевые.

Планирую дописать дополнительную статью как раз с ансамблем Агентов + еще некоторые плюшки, в виде класса. Наверное скоро допишу.

Еще один важный не затронутый момент в этой статье - оценка ошибок классификации леса на тренировочной и тестовой выборках (oob), тоже будет описан этот момент.

За примеры кода спасибо, есть еще вариант сохранения через сериализацию

 
Maxim Dmitrievsky: + еще некоторые плюшки, в виде класса. Наверное скоро допишу.

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

 
mov:

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

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

 
Maxim Dmitrievsky:

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

Не сочтите за наглость, если вы все равно пишете новый класс, используйте что-то типа такого:

numberOfsamples++;
fuzzyRDFpolisyMatrix.Resize(numberOfsamples,iNeuronEntra+2);
for(int i=0;i<iNeuronEntra;i++)
     fuzzyRDFpolisyMatrix[numberOfsamples-1].Set(i,ValueIndic(fila, i));
fuzzyRDFpolisyMatrix[numberOfsamples-1].Set(iNeuronEntra,action_fuzzy);
fuzzyRDFpolisyMatrix[numberOfsamples-1].Set(iNeuronEntra+1,1-action_fuzzy);

for(int i=0;i<numRDF;i++)
      {
         FileOpen(NameFile+"_"+IntegerToString(i)+".txt",FILE_WRITE|FILE_BIN|FILE_COMMON);
         FileWriteArray(filehnd,RDF[i].m_trees); //запись дерева
         FileClose(filehnd);
      }
Число индикаторов и число деревьев заданы переменными - ну очень упрощает жизнь при последующих играх с разным количеством. Это не главное, так мелкая поблажка себе любимому чтобы поменьше допиливать, а пробовать буду однозначно.
 
mov:

Не сочтите за наглость, если вы все равно пишете новый класс, используйте что-то типа такого:

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

примерно так и сделано, эта часть уже имеется

 
Замолкаю и с нетерпением буду ожидать появление.
 

Если не сложно, еще один вопрос.

В порядке бреда: первые проходы  обучается 1 лес, вторая часть проходов - 2 и т.д. Имеем ансамбль лесов с разной степенью обученности, первый - возможно переобучение, последний - недообучен.  Имеет ли смысл по вашему мнению заморачиваться в эту сторону?

 
mov:

Если не сложно, еще один вопрос.

В порядке бреда: первые проходы  обучается 1 лес, вторая часть проходов - 2 и т.д. Имеем ансамбль лесов с разной степенью обученности, первый - возможно переобучение, последний - недообучен.  Имеет ли смысл по вашему мнению заморачиваться в эту сторону?

Для этого нужно представлять механику почему это должно работать. Если нет представления то пальцем в небо

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

 

Добрый день (ночь), извините мою назойливость, но тему леса деревьев подняли Вы, не обессудьте...

Попробовал посмотреть реализацию леса в AlgLib. Функция обучения инициализирует массивы и передает управление спец.функции, которая собственно и проводит обучение. Сравнительно легко организовывается дообучение реал-тайм, но в данной реализации нет (насколько я могу судить, разбор слабо документированного в части алгоритма чужого кода то еще удовольствие) отсечения ветвей подобно алгоритму построения деревьев CART. Встанет проблема переобучения. Т.е. обучаем сеть, в реале дообучается как бы продлевая срок своей эффективности, потом новая оптимизация. Реализация отсечения для возможности полного дообучения затратна по времени и если только в перспективе заинтересует разработчиков МТ5(взяли же библиотеку в комплект поставки). И традиционно: имеется ли смысл в подобном дообучении ограниченном во времени?

 
mov:

Добрый день (ночь), извините мою назойливость, но тему леса деревьев подняли Вы, не обессудьте...

Попробовал посмотреть реализацию леса в AlgLib. Функция обучения инициализирует массивы и передает управление спец.функции, которая собственно и проводит обучение. Сравнительно легко организовывается дообучение реал-тайм, но в данной реализации нет (насколько я могу судить, разбор слабо документированного в части алгоритма чужого кода то еще удовольствие) отсечения ветвей подобно алгоритму построения деревьев CART. Встанет проблема переобучения. Т.е. обучаем сеть, в реале дообучается как бы продлевая срок своей эффективности, потом новая оптимизация. Реализация отсечения для возможности полного дообучения затратна по времени и если только в перспективе заинтересует разработчиков МТ5(взяли же библиотеку в комплект поставки). И традиционно: имеется ли смысл в подобном дообучении ограниченном во времени?

Прунинг сам по себе интересен, но его тут нет, да. Дообучение леса не знаю насколько полезная идея, потому что его и переобучить полностью недолго. Если только дообучение планируется проводить очень часто - но тогда получается что алгоритм изначально не способен работать продолжительное время.. палка о 2-х концах.