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

 
Aleksey Vyazmikin:

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

Преобразование происходит по сетке квантования каждого предиктора (доступно 6 алгоритмов), и, к примеру, из 1000 разных значений переменной остается 32 варианта(попадающих в диапазон квантовой сетки) и такой вектор данных легко сжимается, к тому же цифры уже только целые (судя по ограничениям размера сетки - типа данных ushort - 2 байта на число), а таблица квантования просто лежит в памяти и используется уже потом при создании модели в код. Вот уже прилично уменьшили размер, а дальше можно сократить объем за счет выбора не всех предикторов для оценки, а их части, что рекомендуется делать при больших выборках, при этом алгоритм рандомизатора позволяет в других деревьях использовать те предикторы, что сразу не попали в "мешок", за счет этого обучение будет ещё и быстрей, но в моделе будет больше деревьев. Наверняка есть и иные хитрости, но главное - это квантование.

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

Поэтому, выборку можно самому отквантовать и она будет хорошо сжиматься.

Точно, вспомнил, там вроде по умолчанию сетка на 1024 варианта сплитов используется. Если все данные заменить на номера сплита, то в ushort формате можно хранить, а это 2 байта вместо 8, 4-х кратное сжатие. Видимо потому у вас 2 гб вместо 6 и использовалось.
Теперь понял для чего эта сетка используется, оказывается для сжатия. Ну и сортировать ее быстрее.
Документация по MQL5: Основы языка / Типы данных / Целые типы / Типы char, short, int и long
Документация по MQL5: Основы языка / Типы данных / Целые типы / Типы char, short, int и long
  • www.mql5.com
Целый тип char занимает в памяти 1 байт (8 бит) и позволяет выразить в двоичной системе счисления 2^8 значений=256. Тип char может содержать как положительные, так и отрицательные значения. Диапазон изменения значений составляет от -128 до 127. uchar # Целый тип uchar также занимает в памяти 1 байт, как и тип char, но в отличие от него, uchar...
 
elibrarius:
Точно, вспомнил, там вроде по умолчанию сетка на 1024 варианта сплитов используется. Если все данные заменить на номера сплита, то в ushort формате можно хранить, а это 2 байта вместо 8, 4-х кратное сжатие. Видимо потому у вас 2 гб вместо 6 и использовалось.

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

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

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

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

Тогда можно  uchar использовать, это 1 байт.

Aleksey Vyazmikin:
Сетка позволяет и меньше подгоняться, ведь используется диапазон значений. Но не всегда это будет хорошо - для ловли теоретических уровней, думаю, надо самому сетку резать.


В  ushort максимальное значение 65 тыс - если задать такую сетку, то можно вручную не париться

 
Maxim Dmitrievsky:

https://www.mql5.com/ru/articles/8385

не факт, что там хорошая реализация )

на русском я пас

эту я читал))) там куча ошибок в расчетах и сеть выдает скорее случайные ответы

 
elibrarius:

Тогда можно  uchar использовать, это 1 байт.


В  ushort максимальное значение 65 тыс - если задать такую сетку, то можно вручную не париться

Придельный размер у них  65535, но я не могу же влиять на переменные в коде.

А вот по поводу максимального размера - нет, это не гарантирует результат, так как может быть подгонка под полоску данных и пропуск близ лежащих.

Вообще хорошо бы иметь алгоритм обучения, готорый всегда проверяет целесообразность закрывающего диапазон сплита (A>10 && A<=15), а то обычно это несколько рандомно происходит - нет такого обязательного условия, хотя оно и воспроизводится иногда.

 
Александр Алексеевич:

эту я читал))) там куча ошибок в расчетах и сеть выдает скорее случайные ответы

Вы хотите именно сами сеть написать?

Вод здесь есть минимум слов и максимум кода на питоне, но тоже англ.

https://datascience-enthusiast.com/DL/Building_a_Recurrent_Neural_Network-Step_by_Step_v1.html

Building a Recurrent Neural Network - Step by Step - v1
  • datascience-enthusiast.com
Building your Recurrent Neural Network - Step by Step
 
Maxim Dmitrievsky:

Вы хотите именно сами сеть написать?

Вод здесь есть минимум слов и максимум кода на питоне, но тоже англ.

https://datascience-enthusiast.com/DL/Building_a_Recurrent_Neural_Network-Step_by_Step_v1.html

Да, хочу сам) потому что во всех статьях, примерах функции активации считаются не правильно) например сигмоидную везде считают как 1/1+exp(-x). А нужно 1.0/1.0+exp(-x). Написано вроде одно и тоже, но терминал выдает разные расчеты) посмотри может у тебя так же считает) отсюда и ошибки.
 
Александр Алексеевич:
Да, хочу сам) потому что во всех статьях, примерах функции активации считаются не правильно) например сигмоидную везде считают как 1/1+exp(-x). А нужно 1.0/1.0+exp(-x). Написано вроде одно и тоже, но терминал выдает разные расчеты) посмотри может у тебя так же считает) отсюда и ошибки.
В терминале нейросети писать вообще не вариант. Там любая ф-я внезапно может работать не так, как ожидалось. Пользуйтесь готовыми проверенными
 
Maxim Dmitrievsky:
В терминале нейросети писать вообще не вариант. Там любая ф-я внезапно может работать не так, как ожидалось. Пользуйтесь готовыми проверенными
Ну обычная сетка нормально обучается) с реккуренткой разбираюсь как производить расчет градиента
 
Aleksey Vyazmikin:

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

А зачем его открывать? :) Я просто делаю мини копию с аналогичной структурой для отладки.

Несколько раз переделывал, после распаковки займет 6ГБ.

День недели, день месяца, час, минута, ...то же для выхода..., продолжительность сделки в минутах, СЛ, ТП, результат +-1
Причина обращения: