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

 
Slava #:

Я понял. Функции потерь работают с матрицами, как с векторами. В этом месте мы не доделали (не добавили параметр axis)

То есть, конкретно в Вашем примере нужно решать построчно.

Спасибо, что обратили внимание

Хорошо, я понял. Но тут и с векторами вопрос, в частности с LOSS_BCE:

double bce(const vector &truth, vector &pred)
{
   double sum = 0;
   pred.Clip(DBL_EPSILON, 1 - DBL_EPSILON);
   const int n = (int)truth.Size();
   for(int i = 0; i < n; ++i)
   {
      sum += truth[i] * MathLog(pred[i]) + (1 - truth[i]) * MathLog(1 - pred[i]);
   }
   return sum / -n;
}

void OnStart()
{
   vector actual_values = {0, 1, 0, 0, 0, 0};
   vector predicted_values = {.5, .7, .2, .3, .5, .6};     // 0.53984624 - keras (correct answer)
   Print(actual_values.Loss(predicted_values, LOSS_BCE));  // 0.6798329317196582 - mql5 API
   Print(bce(actual_values, predicted_values));            // 0.5398464220309535 - custom
}

Опять не совпадает результат API с ожидаемым.

 
Aleksey Vyazmikin #:

Спасибо за ссылку - очень будет полезно, когда я наконец начну эксперименты на питоне!

Я так понял, это какой то новый стиль изложения книги? Есть ли остальной материал?

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

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

Важность предикторов по оценке сплитов имеется и в CatBoost, но в градиентном бустинге нужно корректировать понимание показателей, так как деревья зависимы и последовательны. Сам показатель довольно спорный, так как оценивает построение деревьев, а принцип жадности не для всех данных работает хорошо. Однако, я использовал усреднение показателей от ста моделей на 8 интервалах выборки для отбора предикторов для моделей CatBoost - в среднем такой метод улучшал результаты обучения. Эксперимент детально публиковался в этой ветке.

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

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

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

Какие то идеи, озвученные там пропустил? Если да, то напишите конкретно - опишу использовал или нет.

Я там не понял про идею кодирования категориальных признаков для использования в нейросети - идет отсылка на прошлый материал.

Это легко автоматизируется и работает без человеческого вмешательства

подобный алгоритм показал в посл. статье.

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

а в первой модели остаются только зерна

То же самое что с правилами дерева, только вид сбоку. Но правила надо грабить все и сопоставлять друг с другом, а там на выходе уже рафинированная ТС

Например, первая итерация отбора зерен от плевел (слева от вертикального пунктира - ООС):

А вот уже 10-я:


 
Maxim Dmitrievsky #:

Это легко автоматизируется и работает без человеческого вмешательства

подобный алгоритм показал в посл. статье.

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

а в первой модели остаются только зерна

То же самое что с правилами дерева, только вид сбоку. Но правила надо грабить все и сопоставлять друг с другом, а там на выходе уже рафинированная ТС

Выше обосновывал, что нельзя отбрасывать ошибки модели.

Хотелось бы поменять свое мнение.

Но для этого надо.

Оценка исходной модели на обучающей выборе и вне ее

Оценка "очищенной" модели вне обучающей выборе, которая НЕ совпадает с двумя предыдущими

Можно?  

 
СанСаныч Фоменко #:

Выше обосновывал, что нельзя отбрасывать ошибки модели.

Хотелось бы поменять свое мнение.

Но для этого надо.

Оценка исходной модели на обучающей выборе и вне ее

Оценка "очищенной" модели вне обучающей выборе, которая НЕ совпадает с двумя предыдущими

Можно?  

выше добавил пару скринов

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

слева от пунктирной линии ООС, который никак не участвует в обучении

обучение на простых признаках типа приращений

желтая кривая - это сам график котировок, на него не смотрите. Но с его помощью можно понять, в каких ситуациях модель работает лучше/хуже
 

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

и ошибка на ООС снижается постепенно, в данном случае увеличивается r^2

Iteration: 0, R^2: 0.10170503363002426
Iteration: 1, R^2: 0.3786110827222656
Iteration: 2, R^2: 0.36326063198923375
Iteration: 3, R^2: 0.4316690005974817
Iteration: 4, R^2: 0.71390099630815
Iteration: 5, R^2: 0.8178962191209952
по сути это аналог bestinterval от fxsaber'а, только здесь сразу приготовление ТС
 
Aleksey Vyazmikin #:

Вроде все перечислили. Это книга Джереми Ховарда, основателя Kaggle и фреймвока fast.ai.

Fast.ai

Книга в оригинале

Книга на русском

Бесплатная версия

 
Maxim Dmitrievsky #:

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

и ошибка на ООС снижается постепенно, в данном случае увеличивается r^2

по сути это аналог bestinterval от fxsaber'а, только здесь сразу приготовление ТС

По мне идет сверх подгонка к котировке.

Где "Вне выборки"?

 
возможно, если поиздеваться так над деревьями, а потом еще вытащить правила, то будет лучше
 
СанСаныч Фоменко #:

По мне идет сверх подгонка к котировке.

Где "Вне выборки"?

это уже не смешно

 
Aleksey Vyazmikin #:

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

если есть идеи сразу что лучше/хуже, правила только лучшие брать или через какие-то фильтры, предлагайте

хочу сравнить, прогнав один датасет через оба подхода. Тогда и поймем ху из ху :)