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

Rorschach:

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

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

Я могу предоставить ресурсы, пока большего не могу.

Aleksey Vyazmikin:

Я могу предоставить ресурсы, пока большего не могу.

В катбусте есть feature_importances, возможность посмотреть кластера, как в лесах?

Ваша машина переварит таблицу 14 на 180.000.000?

Rorschach:

В катбусте есть feature_importances, возможность посмотреть кластера, как в лесах?

Ваша машина переварит таблицу 14 на 180.000.000?

"feature_importances" это важность признаков, при чем тут кластера? Или я что-то не знаю. Такая возможность есть, но я её особо не пользуюсь, так как важность эта считается по сути по вершинам деревьев, что не укладывается в мою концепцию.

Я обучал модели на таблицах в 6 гигабайт. И памяти там потреблялось не более 2х гигабайт, как сейчас помню.

Aleksey Vyazmikin:

"feature_importances" это важность признаков, при чем тут кластера? Или я что-то не знаю. Такая возможность есть, но я её особо не пользуюсь, так как важность эта считается по сути по вершинам деревьев, что не укладывается в мою концепцию.

Я обучал модели на таблицах в 6 гигабайт. И памяти там потреблялось не более 2х гигабайт, как сейчас помню.

Для леса есть возможность посмотреть важность и кластера. В катбуст это наверно plot_tree.

Данные подготовлю и выложу.

Сделал тестовую версию на 6 столбцов, заняла 11Гб. Notepad++ не смог открыть, говорит слишком большой файл. BD Browser for SQLite уже висит минут 20.
Rorschach:

Для леса есть возможность посмотреть важность и кластера. В катбуст это наверно plot_tree.

Данные подготовлю и выложу.

Сделал тестовую версию на 6 столбцов, заняла 11Гб. Notepad++ не смог открыть, говорит слишком большой файл. BD Browser for SQLite уже висит минут 20.
В тотал командере просмотр берет большие файлы, от которых  Notepad++ зависает
Aleksey Vyazmikin:

"feature_importances" это важность признаков, при чем тут кластера? Или я что-то не знаю. Такая возможность есть, но я её особо не пользуюсь, так как важность эта считается по сути по вершинам деревьев, что не укладывается в мою концепцию.

Я обучал модели на таблицах в 6 гигабайт. И памяти там потреблялось не более 2х гигабайт, как сейчас помню.

Интересно, как они не забирая все данные в память обучают деревья? Если таблица 6 Гб, то и памяти должно было около 6 гб задействоваться. Дереву же нужно целиком каждый столбец сортировать. Если не забирать всё в память, а каждый раз считывать данные с диска, то это будет тормозно.
Единственный вариант - данные не  double, а в float типе держать в памяти, но это снизит точность. Для нас с 5 знаками точности, это может и не страшно, но катбуст универсальный софт, думаю физические и математические задачи должны в double точности решаться.

Rorschach:

Для леса есть возможность посмотреть важность и кластера. В катбуст это наверно plot_tree.

Данные подготовлю и выложу.

Сделал тестовую версию на 6 столбцов, заняла 11Гб. Notepad++ не смог открыть, говорит слишком большой файл. BD Browser for SQLite уже висит минут 20.

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

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

elibrarius:

Интересно, как они не забирая все данные в память обучают деревья? Если таблица 6 Гб, то и памяти должно было около 6 гб задействоваться. Дереву же нужно целиком каждый столбец сортировать. Если не забирать всё в память, а каждый раз считывать данные с диска, то это будет тормозно.
Единственный вариант - данные не  double, а в float типе держать в памяти, но это снизит точность. Для нас с 5 знаками точности, это может и не страшно, но катбуст универсальный софт, думаю физические и математические задачи должны в double точности решаться.

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

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

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

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

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:
Теперь понял для чего эта сетка используется, оказывается для сжатия. Ну и сортировать ее быстрее.
Сетка позволяет и меньше подгоняться, ведь используется диапазон значений. Но не всегда это будет хорошо - для ловли теоретических уровней, думаю, надо самому сетку резать.