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

 

Добрый день,

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

1.Мне показалось не совсем верным что допустим при SELL случайное значение задается на всем интервале 0..1, ведь мы уже знаем что продажи убыточны

if(RDFpolisyMatrix[numberOfsamples-1][iNeuronEntra]==1.0)//SELL
   likelyhood = MathRandomUniform(0.0,0.6,unierr);
else
   likelyhood = MathRandomUniform(0.4,1.0,unierr);

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

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

Первая попытка уйти от этого

if(RDFpolisyMatrix[numberOfsamples-1][iNeuronEntra]==1.0)//SELL
      nagrada=MathMin(1.0,0.61+NormalizeDouble(profit/WS.PriceStep()/250,2));

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

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

updatePolicy(0); //для BUY
updatePolicy(1); //для SELL

и по привычке прогнал обучение. Каково было мое удивление, на подобном обучении с огрубленной функцией вознаграждения показал значительное улучшение - на обучаемом участке при прочих равных прибыль за 4 месяца превысила прибыль на 6 старого варианта (я оперирую сравнениями, т.к. конкретные цифры сильно разнятся от условий обучения, пары, кривизны ручек кодера) и что самое интересное, улучшились результаты на контрольном интервале. Загрубление оценочной функции улучшило предсказательность! Наверное для профи-статистика здесь нет ничего нового и он формулами сможет доказать что так и должно быть, но для меня это шок, как говорят с этим необходимо просто сжиться. И встает вопрос о дальнейшем выборе и оценке функций предскаазания.

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

 

а насколько реально этот, любезно предоставленный код автором статьи, обучить простейшим паттернам из 3-5 баров?

ЗЫ: хм, чет под алкоголем пишу как на алиэкспресс китайцу продавцу )))

 
mov:

Добрый день,

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

1.Мне показалось не совсем верным что допустим при SELL случайное значение задается на всем интервале 0..1, ведь мы уже знаем что продажи убыточны

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

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

Первая попытка уйти от этого

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

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

и по привычке прогнал обучение. Каково было мое удивление, на подобном обучении с огрубленной функцией вознаграждения показал значительное улучшение - на обучаемом участке при прочих равных прибыль за 4 месяца превысила прибыль на 6 старого варианта (я оперирую сравнениями, т.к. конкретные цифры сильно разнятся от условий обучения, пары, кривизны ручек кодера) и что самое интересное, улучшились результаты на контрольном интервале. Загрубление оценочной функции улучшило предсказательность! Наверное для профи-статистика здесь нет ничего нового и он формулами сможет доказать что так и должно быть, но для меня это шок, как говорят с этим необходимо просто сжиться. И встает вопрос о дальнейшем выборе и оценке функций предскаазания.

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

Интересные результаты, спасибо. 1-й пункт делал, да, скорость обучения увеличивается. По факту класс, над которым я сейчас работаю, эффективно обучается за 1 итерацию уже. Т.е. это супер эффективный алгоритм  в плане скорости обучения, однако внутренний препроцессинг все еще стоит организовать, что бы модель не сильно переобучалась.

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

 
Igor Makanu:

а насколько реально этот, любезно предоставленный код автором статьи, обучить простейшим паттернам из 3-5 баров?

ЗЫ: хм, чет под алкоголем пишу как на алиэкспресс китайцу продавцу )))

Все реально, подаете на вход паттерны из 3-5 баров

 
Maxim Dmitrievsky:

Все реально, подаете на вход паттерны из 3-5 баров

буду краток.... как?

 
Igor Makanu:

буду краток.... как?

руками )

 
Maxim Dmitrievsky:

По выделенному не понял, что значит загрубить оценку одного дерева? Имеется в виду, что в кач-ве меток классов вы подаете только 0 и 1?

Да, проверка проводилась с одним деревом и метками 0 и 1. (На ансамбле подобных деревьев результат еще выше)
 
mov:
Да, проверка проводилась с одним деревом и метками 0 и 1. (На ансамбле подобных деревьев результат еще выше)
Извините, естественно с одним лесом деревьев (подразумеваю всегда лес, а на бытовом уровне говоря дерево, буду избавляться от этой привычки)
 
mov:
Извините, естественно с одним лесом деревьев (подразумеваю всегда лес, а на бытовом уровне говоря дерево, буду избавляться от этой привычки)

Да, понял. Но лесу тоже можно задать 1 дерево или вытащить ф-ю его построения. Не знаю только зачем надо.

 

Первоначально я пытался увеличить количество деревьев до 500 и 1000. Но я заметил, что все большее количество деревьев не улучшило результаты. Но внутренняя вещь, которую я вижу, превышает 500 деревьев, оптимизация постоянно падает и не создает текстовые файлы Mtrees.

Кроме того, я был протестирован, увеличив число от 50 до 100 и заметил, что лучшие результаты заключаются в итерациях в пределах от 20 до 25 итераций, и ничего больше, чем это не имеет смысла.

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

hnd1 = iRSI (_Symbol, 0,8, PRICE_CLOSE);

hnd2 = iRSI (_Symbol, 0,16, PRICE_CLOSE);

hnd3 = iRSI (_Symbol, 0,24, PRICE_CLOSE);


Поэтому я подумал о добавлении еще одного в MTrees для будущего использования. Но позже было осознано, что EA хранит значения последней итерации. Если так или иначе, если мы сможем изменить период. Я имею в виду, что ЕА должен иметь возможность немедленно переключиться на другой период RSI, если произойдет потеря.

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

Мне просто интересно узнать результаты того, что произойдет с результатами, если мы подадим от 20 до 30 значений индикаторов в качестве входных данных для агента и попросим агента автоматически тренироваться.