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

 

Из рубрики "интересные вещи" ))  

DTW алгоритм

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

Я пока знаю два возможные решения - это интерполяция и dwt алгоритм, с последним я сейчас очень плотно играюсь

про  dwt - https://ru.wikipedia.org/wiki/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%B4%D0%B8%D0%BD%D0%B0%D0%BC%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D1%82%D1%80%D0%B0%D0%BD%D1%81%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%86%D0%B8%D0%B8_%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D0%BE%D0%B9_%D1%88%D0%BA%D0%B0%D0%BB%D1%8B

 

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

 

итак в этом коде решалась задача:

 Имеем некий паттерн назовем его "главный паттерн"  размером (length) 8 точек   (цифра от балды)

 нужно найти паттерны аналоги главного паттерна но у них замер 5 и 13 точек (цифры брались балды)

 

результат на картинке

 ч

 

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

 код выложу внизу 

Алгоритм динамической трансформации временной шкалы — Википедия
  • ru.wikipedia.org
Алгоритм динамической трансформации временно́й шкалы (DTW-алгоритм, от англ.  ) — алгоритм, позволяющий найти оптимальное соответствие между временными последовательностями. Впервые применен в распознавании речи, где использован для определения того, как два речевых сигнала представляют одну и ту же исходную произнесённую фразу. Впоследствии...
Файлы:
zzz.txt  4 kb
 

по простому вся суть кода это:

library(dtw)

X <- rnorm(10)
Y <- rnorm(20)

my.dtw <- dtw(X ,Y)

my.dtw$distance

где

my.dtw$distance
[1] 14.17198

 это мера близости(евклидова дистанция),  чем она меньше тем близость X и Y больше

 
mytarmailS:

по простому вся суть кода это:

library(dtw)

X <- rnorm(10)
Y <- rnorm(20)

my.dtw <- dtw(X ,Y)

my.dtw$distance

где

my.dtw$distance
[1] 14.17198

 это мера близости(евклидова дистанция),  чем она меньше тем близость X и Y больше

На всякий случай: Если мера близости = 1, то второй ряд получен из первого путем искажений?
 
СанСаныч Фоменко:
На всякий случай: Если мера близости = 1, то второй ряд получен из первого путем искажений?

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

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

 

mytarmailS:

Имеем некий паттерн назовем его "главный паттерн"  размером (length) 8 точек   (цифра от балды)

 нужно найти паттерны аналоги главного паттерна но у них замер 5 и 13 точек (цифры брались балды)

Было в этой же теме, стр. 130.

Если кратко, то в классическом алгоритме DTW сравниваются два отрезка фиксированной длиной n и m соответственно, заполняется массив [1..n, 1..m] и результат вычисления берётся  из ячейки [n, m]. Если вам нужно, чтобы длина одного из отрезков была произвольной (плавающей) - например n=8, a m принимает значения от 5 до 13, - то вы заполняете массив 8*13 и берёте минимальный результат из ячеек от [8,5] до [8,13], делённый на длину пути.

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

 
Vizard_:

Подход №4) Но в клуб "первой сотни"(133) не вошел (0.68705), получив по мордам от ботанов-задохликов)))


Ого! Крутизна!!!
 
Awl Writer:

Было в этой же теме, стр. 130.

Если кратко, то в классическом алгоритме DTW ....................

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

 

Всем привет!

Прошу помощи и предлагаю объединиться в усилиях по созданию некого алгоритма под названием "полигармоническая аппроксимация" - это очень глубокая и умная аппроксимация функции в контексте семейства алгоритмов "МГУА"  почему так считаю озвучу позже с разъяснениями и возможно картинками 

ссылка https://ru.wikipedia.org/wiki/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%B3%D1%80%D1%83%D0%BF%D0%BF%D0%BE%D0%B2%D0%BE%D0%B3%D0%BE_%D1%83%D1%87%D1%91%D1%82%D0%B0_%D0%B0%D1%80%D0%B3%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%BE%D0%B2 

вырезка из ссылки 

Обычно степень полинома опорной функции выбирается не выше {\displaystyle N-1} N-1, где {\displaystyle N} N - количество точек выборки. Часто бывает достаточно использовать в качестве опорных функции полиномы второй степени. В таком случае на каждом шаге итерации степень результирующего полинома удваивается.

Вместо полинома Колмогорова-Габора можно использовать ряды Фурье. Их имеет смысл применять, если в исходных данных наблюдается периодичность (например, уровень воды в реках, температура воздуха, объём осадков). Полученная в таком случае модель будет полигармонической [1].

 

===================================================

 

Также ссылка на одну из многих книг по этому замечательному методу   те  " МГУА"

 В книге заложены очень сильные идеи, читается легко (пока не начинаются формулы)  ОЧЕНЬ рекомендую к прочтению https://www.gmdh.net/articles/theory/bookNoiseIm.pdf

 

 ===================================================

 

 также некий комментарий-подтверждение  что полигармоническая аппроксимация - это правильное направление в предобработке данных для МО 

вырезка комментария

...................................…Следующим шагом была новая модель: к цене закрытия применяем фильтр низких частот (я использовал фильтр Батерворта 2-го порядка), применяем полиномиально-гармоническую аппроксимацию, преобразуем A*cos(wx)+B*sin(wx) к виду M*sin(wx+f) и в качестве вторичных признаков берем M и f.
…. И вот с такой моделью мне удалось построить сеть, которая имела очень хорошие обобщающие свойства: новые данные почти все правильно распознавала........................

  ссылка на первоисточник http://www.kamynin.ru/archives/4917

 
mytarmailS:

Выглядит сложно, и нет уверенности в результате, я пас.
В R есть пакет GMDH ("МГУА" по английски).

 

Кстати в Numerai я тоже доучил модель до logloss <0.69
0.68930
Но откуда-то вылезла сотня людей с результатом 0.4-0.5, ад какой-то, теперь до призовых мест вообще как до луны.

Причина обращения: