Distorção dinâmica do tempo (DTW, na sigla em inglês) é um algoritmo para comparar e alinhar duas séries temporais. A DTW é utilizada para encontrar o alinhamento não-linear ótimo entre duas sequências de valores numéricos. Dessa maneira, é possível encontrar padrões entre medições de eventos com diferentes ritmos. Por exemplo, é possível casar a série temporal obtida por acelerômetros (ou outros sensores) de duas pessoas andando em diferentes velocidades.

DTW pode ser utilizada para alinhar qualquer tipo de dado que obedeça uma ordem temporal, como vídeo, áudio e imagens. Entre as diversas aplicações da DTW, encontra-se o reconhecimento de fala e de assinatura, bem como o alinhamento de gravações musicais com suas respectivas partituras.

Apesar do algoritmo que calcula a DTW fornecer um valor numérico relacionado a uma medida de distância, ele deve ser utilizado com cautela. Por não obedecer a desigualdade triangular, a DTW não pode ser considerada uma métrica. Consequentemente, métodos de indexação em espaço métrico não são aplicáveis.

Implementação

editar

A DTW é implementado por um algoritmo de programação dinâmica. O exemplo a seguir ilustra a implementação da DTW para alinhar duas séries temporais s e t, em que d(x, y) é a distância entre os valores x e y. Especificamente, d(x, y) geralmente é calculado como o quadro da distância euclidiana entre eles, ou seja, d(x, y) = (x-y)².

int DTWDistance(s: array [1..n], t: array [1..m]) {
    DTW := array [0..n, 0..m]

    for i := 1 to n
        DTW[i, 0] := infinity
    for i := 1 to m
        DTW[0, i] := infinity
    DTW[0, 0] := 0

    for i := 1 to n
        for j := 1 to m
            cost := d(s[i], t[j<nowiki>])</nowiki>
            DTW[i, j] := cost + minimum(DTW[i-1, j  ],    // insertion
                                        DTW[i  , j-1],    // deletion
                                        DTW[i-1, j-1])    // match

    return DTW[n, m]
}

Comumente, a DTW é associada a uma janela de restrição.[1] Basicamente, essa técnica limita a distância no eixo do tempo do alinhamento entre valores das séries temporais sendo comparadas.

Cálculo Eficiente

editar

Por ser calculado por um algoritmo de programação dinâmica bi-dimensional, o cálculo da DTW tem complexidade . Isso torna seu uso inviável em grandes conjuntos de dados. Por isso, diversas técnicas de indexação específicas para essa medida foram propostas para a tarefa de busca por similaridade, tais como lower bound e early abandoning.[2] Com essas técnicas, é possível encontrar os vizinhos mais próximos de uma dada subsequência em uma quantidade massiva de séries temporais em poucos segundos utilizando a DTW.[3] Quando a tarefa em execução não pode ser reduzida à busca por similaridade, as únicas alternativas para acelerar o cálculo da DTW são a poda de etapas do seu algoritmo[4] ou aproximações da medida de distância.[5]

Referências

  1. Zoltan Geler, Vladimir Kurbalija, Miloš Radovanović, Mirjana Ivanović (2014). Impact of the Sakoe-Chiba Band on the DTW Time Series Distance Measure for kNN Classification
  2. Eamonn Keogh, Chotirat Ann Ratanamahatana (2004). Exact indexing of dynamic time warping
  3. Thanawin Rakthanmanon, Bilson Campana, Abdullah Mueen, Gustavo Batista,Brandon Westover, Qiang Zhu, Jesin Zakaria, Eamonn Keogh (2012). Searching and Mining Trillions of Time Series Subsequences under Dynamic Time Warping
  4. Diego Furtado Silva, Gustavo Batista (2015). Speeding Up All-Pairwise Dynamic Time Warping Matrix Calculation
  5. Stan Salvador, Philip K. Chan (2007). Toward accurate dynamic time warping in linear time and space
Ícone de esboço Este artigo sobre informática é um esboço. Você pode ajudar a Wikipédia expandindo-o.

📚 Artikel Terkait di Wikipedia

Arranjo de sufixos

Salson, M.; Lecroq, T.; Léonard, M.; Mouchard, L. (2010). «Dynamic extended suffix arrays». Journal of Discrete Algorithms. 8 (2). 241 páginas. doi:10

Parâmetros de Denavit-Hartenberg

\alpha _{n}&d_{n}\\\hline 0&0&0&1\end{array}}\right]=\left[{\begin{array}{ccc|c}&&&\\&R&&T\\&&&\\\hline 0&0&0&1\end{array}}\right]} onde R é a sub-matriz 3×3

Java (linguagem de programação)

ter um método denominado main. Recebe como parâmetro um array de String. * String[] args = Array de argumentos que podem ser repassados na chamada do programa

Circuito integrado de leitura

Sensors, Kenton T. Veeder, SPIE Press, 2015. A 25μm pitch LWIR focal plane array with pixel-level 15-bit ADC providing high well capacity and targeting 2mK

Canadá

de 2010. Arquivado do original em 9 de fevereiro de 2010  «Active Phased Array Radar (APAR)» (PDF). Thales-systems Canada. Consultado em 12 de fevereiro

Rússia

de março de 2010). «DNA from bone shows new human forerunner, and raises array of questions». Washington Post  Belinskij A, Härke, H (1999). «The 'Princess'

R (linguagem de programação)

of complex numbers Z ← 0 # initialize Z to zero X ← array(0, c(m,m,50)) # initialize output 3D array for (k in 1:50) { # loop with 50 iterations Z ← Z^2+C

Processo de decisão de Markov

(1957), Dynamic Programming, ISBN 978-0-486-42809-3, Princeton University Press . Edição de bolso da Dover (2003) Bellman., R. E. (2003) [1957]. Dynamic Programming