Aprendizado de máquina no trading: teoria, prática, negociação e não só - página 253

 

Sob "coisas interessantes". ))

algoritmo DTW

Imagine que você precisa encontrar algumas partes iguais do preço na série, mas como o preço não é estacionário, claro, por causa desta propriedade o tamanho destas partes será diferente, como lidar com este caso?

Eu conheço duas soluções possíveis - interpolação e algoritmo 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

Não me preocuparei com fórmulas, pois eu mesmo não as conheço, também não me preocuparei com palavras, só darei o código comentado para que qualquer um se reproduza...

Então, este código foi usado para resolver um problema:

Temos um certo padrão, chamemos-lhe "padrão principal" de tamanho (comprimento) 8 pontos (o número é um palpite arbitrário)

Você deve encontrar padrões semelhantes ao padrão principal, mas sua dimensão é de 5 e 13 pontos (os números são tomados ao acaso)

O resultado está na imagem

ч

como ela pode ser usada e é mesmo possível é uma questão em aberto, acho que a apliquei com sucesso, mas você precisa lembrar que tudo isso é apenas uma ferramenta para implementar sua idéia, mas não a idéia em si ...

Vou afixar o código abaixo

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

Em termos simples, o objectivo do código é este:

library(dtw)

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

my.dtw <- dtw(X ,Y)

my.dtw$distance

onde

my.dtw$distance
[1] 14.17198

é uma medida de proximidade (distância euclidiana), quanto menor for, maior é a proximidade de X e Y

 
mytarmailS:

Em termos simples, o objectivo do código é este:

library(dtw)

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

my.dtw <- dtw(X ,Y)

my.dtw$distance

onde

my.dtw$distance
[1] 14.17198

é uma medida de proximidade (distância euclidiana), quanto menor for, maior é a proximidade de X e Y

Só no caso de: Se a medida de proximidade = 1, então a segunda linha é obtida a partir da primeira por distorção?
 
SanSanych Fomenko:
Só no caso de: Se a medida de proximidade = 1, então a segunda linha é obtida a partir da primeira por distorção?

Normalmente quando você quer mudar a proximidade entre duas linhas, a regra é que essas linhas devem ter o mesmo comprimento.

dtw pode medir a proximidade de duas filas com dimensões diferentes, claro que irá distorcer as filas para encontrar o valor de proximidade correto

 

mytarmailS:

Temos um padrão, chamemos-lhe "padrão principal" tamanho (comprimento) de 8 pontos (a figura está ao acaso)

você precisa encontrar padrões similares ao padrão principal, mas eles têm 5 e 13 pontos (os números são tomados ao acaso)

Estava no mesmo fio, pg. 130.

Em resumo, o clássico algoritmo DTW compara dois segmentos de comprimento fixo n e m respectivamente, preenche a matriz [1..n, 1..m] e toma o resultado da célula [n, m]. Se você quiser que algum segmento tenha comprimento aleatório, por exemplo, n=8 e m toma valores de 5 a 13, você preenche o array 8*13 e toma o resultado mínimo das células [8,5] a [8,13] dividido pelo comprimento do caminho.

Acontece que a wikipedia russa reescreveu todo o artigo durante este tempo, e eu não sabia sobre isso. No artigo inglês nada mudou e o pseudo-código permanece, pelo que é mais fácil entender o princípio do algoritmo.

 
Vizard_:

Aproximação #4) Mas não chegou ao clube dos "primeiros cem"(133) (0,68705), levando um murro na cara dos nerd-assholes))))


Uau! Fantástico!!!
 
Awl Writer:

Estava no mesmo fio, pg. 130.

Em suma, no clássico algoritmo DTW ....................

Ou pode fazê-lo de outra forma, basta interpolar sem rodeios todas as secções arbitrárias para um único tamanho, e medir a correlação ou Euclidiano lá...

 

Olá a todos!

Peço ajuda e proponho-me juntar esforços para criar um algoritmo chamado "aproximação poliarmonica" - esta é uma aproximação de funções muito profunda e inteligente no contexto da família de algoritmos "MSUA", porque penso que assim o farei mais tarde com explicações e possivelmente com imagens

ссылка 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

trecho do link

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

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

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

Também um link para um dos muitos livros sobre este maravilhoso método daqueles "MSUA".

O livro tem idéias muito fortes e é fácil de ler (até que as fórmulas comecem)MUITO recomendado a leiturahttps://www.gmdh.net/articles/theory/bookNoiseIm.pdf

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

também alguns comentários confirmando que a aproximação poliarmónica é a forma correcta de pré-processar dados para o MO

fragmento de comentário

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

link para a fonte originalhttp://www.kamynin.ru/archives/4917

 
mytarmailS:

Parece complicado e não há certeza do resultado, vou passar.
R tem um pacote GMDH ("MGUA" em inglês).

A propósito, em Numerai também finalizei o modelo para logloss <0,69
0,68930
Mas de algum lugar saiu uma centena de pessoas com resultados 0,4-0,5, algum inferno, agora até prêmios geralmente como a lua.