WikiDer > Time Warp tahrir qilish masofasi

Time Warp Edit Distance

Time Warp tahrir qilish masofasi (TWED) diskret uchun masofa o'lchovidir vaqt qatorlari vaqt "egiluvchanligi" bilan mos keladi. Boshqa masofaviy o'lchovlarga nisbatan (masalan, DTW (Vaqtning dinamik o'zgarishi) yoki LCS (Eng uzun umumiy oqibat muammosi)), TWED - bu a metrik. Uning hisoblash vaqtining murakkabligi , ammo qidiruv maydonini qisqartirish uchun koridor yordamida ba'zi bir aniq vaziyatlarda keskin kamayishi mumkin. Uning xotira maydoni murakkabligini kamaytirish mumkin . Birinchi marta 2009 yilda P.-F. Marto.

Ta'rif


Holbuki



Rekursiya esaquyidagicha boshlangan:



bilan

Amaliyotlar

TWED-algoritmini C yoki Matlab-da amalga oshirishni mualliflarning uy sahifasidan yuklab olish mumkin[1]

TWED-ning R qo'llanilishi konlar yoki hodisalar ketma-ketligini va umuman diskret ketma-ketlik ma'lumotlarini tavsiflash va tasavvur qilish uchun qazib olish uchun R-to'plami TraMineR-ga qo'shildi.[2]

Qo'shimcha ravishda, kub G.Wright (2020) tufayli takomillashtirilgan algoritmdan foydalanadigan TWED-ning CUDA tezlashtirilgan dasturidir. Ushbu usul xotirada chiziqli va massiv ravishda parallellashtirilgan. cuTWED CUDA C / C ++ da yozilgan, python biriktirgichlari bilan ta'minlangan va Marteau-ning C moslamasini amalga oshirish uchun python birikmalarini ham o'z ichiga oladi.

Python

Import achchiq kabi npdef Dlp(A, B, p=2):    xarajat = np.sum(np.kuch(np.abs(A - B), p))    qaytish np.kuch(xarajat, 1 / p)def twed(A, timeSA, B, timeSB, nu, _lambda):    # [masofa, DP] = TWED (A, timeSA, B, timeSB, lambda, nu)    # A va B vaqt seriyalari uchun vaqtni o'zgartirish vaqtini hisoblash (TWED)    #    # A: = Vaqt qatorlari (masalan, [10 2 30 4])    # timeSA: = A seriyali vaqt tamg'asi (masalan, 1: 4)    # B: = Vaqt seriyasi B    # timeSB: = B seriyali vaqt tamg'asi    # lambda: = O'chirish operatsiyasi uchun jarima    # nu: = Elastiklik parametri - masofani o'lchash uchun zarur bo'lgan nu> = 0    # Malumot:    # Marteau, P .; F. (2009). "Vaqt ketma-ketligini moslashtirish uchun qattiqlikni sozlash bilan Time Warp tahrir qilish masofasi".    Pattern tahlil qilish va mashina intellekti bo'yicha # IEEE operatsiyalari. 31 (2): 306-318. arXiv: cs / 0703033    # http://people.irisa.fr/Pierre-Francois.Marteau/    # Kiritilgan argumentlarni tekshiring    agar len(A) != len(timeSA):        chop etish("A uzunligi teng vaqtga teng emasSA")        qaytish Yo'q, Yo'q    agar len(B) != len(timeSB):        chop etish("B uzunligi vaqtning uzunligiga teng emas SB")        qaytish Yo'q, Yo'q    agar nu < 0:        chop etish("nu salbiy")        qaytish Yo'q, Yo'q    # To'ldirgich qo'shing    A = np.qator([0] + ro'yxat(A))    timeSA = np.qator([0] + ro'yxat(timeSA))    B = np.qator([0] + ro'yxat(B))    timeSB = np.qator([0] + ro'yxat(timeSB))    n = len(A)    m = len(B)    # Dinamik dasturlash    DP = np.nollar((n, m))    # DP Matritsasini boshlang va birinchi qator va ustunni cheksizlikka o'rnating    DP[0, :] = np.inf    DP[:, 0] = np.inf    DP[0, 0] = 0    # Minimal xarajatlarni hisoblash    uchun men yilda oralig'i(1, n):        uchun j yilda oralig'i(1, m):            # Har xil operatsiyalar narxini hisoblang va tejang            C = np.bittasi((3, 1)) * np.inf            # A-da o'chirish            C[0] = (                DP[men - 1, j]                + Dlp(A[men - 1], A[men])                + nu * (timeSA[men] - timeSA[men - 1])                + _lambda            )            # Bda o'chirish            C[1] = (                DP[men, j - 1]                + Dlp(B[j - 1], B[j])                + nu * (timeSB[j] - timeSB[j - 1])                + _lambda            )            # Ikkala vaqt seriyasida ham ma'lumotlar nuqtalarini saqlang            C[2] = (                DP[men - 1, j - 1]                + Dlp(A[men], B[j])                + Dlp(A[men - 1], B[j - 1])                + nu * (abs(timeSA[men] - timeSB[j]) + abs(timeSA[men - 1] - timeSB[j - 1]))            )            # Minimal xarajat bilan operatsiyani tanlang va DP Matrix-ni yangilang            DP[men, j] = np.min(C)    masofa = DP[n - 1, m - 1]    qaytish masofa, DP

Eng arzon narxlardagi yo'lni topish uchun orqaga qaytish:

def orqaga qaytish(DP):    # [best_path] = BACKTRACKING (DP)    # Eng tejamkor yo'lni hisoblang    # DP: = TWED funktsiyasining DP matritsasi    x = np.shakli(DP)    men = x[0] - 1    j = x[1] - 1    # Yo'llarning ko'rsatkichlari qarama-qarshi yo'nalishda saqlanadi    # path = np.ones ((i + j, 2)) * np.inf;    best_path = []    qadamlar = 0    esa men != 0 yoki j != 0:        best_path.qo'shib qo'ying((men - 1, j - 1))        C = np.bittasi((3, 1)) * np.inf        # Ikkala vaqt seriyasida ham ma'lumotlar nuqtalarini saqlang        C[0] = DP[men - 1, j - 1]        # A-da o'chirish        C[1] = DP[men - 1, j]        # Bda o'chirish        C[2] = DP[men, j - 1]        # Eng kam xarajat ko'rsatkichini toping        idx = np.argmin(C)        agar idx == 0:            # Ikkala vaqt seriyasida ham ma'lumotlar nuqtalarini saqlang            men = men - 1            j = j - 1        elif idx == 1:            # A-da o'chirish            men = men - 1            j = j        boshqa:            # Bda o'chirish            men = men            j = j - 1        qadamlar = qadamlar + 1    best_path.qo'shib qo'ying((men - 1, j - 1))    best_path.teskari()    qaytish best_path[1:]

MATLAB

funktsiya[masofa, DP] =twed(A, timeSA, B, timeSB, lambda, nu)% [masofa, DP] = TWED (A, timeSA, B, timeSB, lambda, nu)    A va B vaqt qatorlari uchun vaqtni hisoblash vaqtini tahrirlash masofasi (TWED)    %    % A: = Vaqt qatorlari (masalan, [10 2 30 4])    % timeSA: = A seriyali vaqt tamg'asi (masalan, 1: 4)    % B: = Vaqt qatorlari B    % timeSB: = B seriyali vaqt tamg'asi    % lambda: = O'chirish operatsiyasi uchun jarima    % nu: = Elastiklik parametri - masofani o'lchash uchun zarur bo'lgan nu> = 0    %    % Kod muallifi: P.-F. Marteau - http://people.irisa.fr/Pierre-Francois.Marteau/     Kiritilgan argumentlarni tekshiring    agar uzunlik (A) ~ = uzunlik (vaqt SA)        ogohlantirish('A uzunligi vaqtning uzunligiga teng emasSA')        qaytishoxiri    agar uzunlik (B) ~ = uzunlik (vaqtSB)        ogohlantirish('B uzunligi vaqtning teng uzunligiga teng emas SB')        qaytishoxiri    agar nu <0        ogohlantirish("nu salbiy")        qaytishoxiri    To'ldirma qo'shing    A = [0 A];    timeSA = [0 timeSA];    B = [0 B];    timeSB = [0 timeSB];     % Dinamik dasturlash    DP = nollar(uzunlik(A), uzunlik(B));     % DP Matritsasini boshlang va birinchi qator va ustunni cheksizlikka o'rnating    DP(1, :) = inf;    DP(:, 1) = inf;    DP(1, 1) = 0;     n = uzunlik(timeSA);    m = uzunlik(timeSB);    Minimal xarajatlarni hisoblash    uchun i = 2: n        uchun j = 2: m            xarajat = Dlp(A(men), B(j));                     % Har xil operatsiyalar narxini hisoblang va tejang            C = bittasi(3, 1) * inf;                     A da o'chirish            C(1) = DP(men - 1, j) + Dlp(A(men - 1), A(men)) + nu * (timeSA(men) - timeSA(men - 1)) + lambda;            B da o'chirish            C(2) = DP(men, j - 1) + Dlp(B(j - 1), B(j)) + nu * (timeSB(j) - timeSB(j - 1)) + lambda;            Ikkala vaqt seriyasida ham ma'lumotlar nuqtalarini saqlang            C(3) = DP(men - 1, j - 1) + Dlp(A(men), B(j)) + Dlp(A(men - 1), B(j - 1)) + ...            nu * (abs(timeSA(men) - timeSB(j)) + abs(timeSA(men - 1) - timeSB(j - 1)));                     % Minimal xarajat bilan operatsiyani tanlang va DP Matrix-ni yangilang            DP(men, j) = min(C);        oxirioxiri     masofa = DP(n, m);     Evklid masofasini hisoblash funktsiyasi    funktsiya[xarajat] =Dlp(A, B)xarajat = kv(sum((A - B) .^ 2, 2));    oxirioxiri

Eng arzon narxlardagi yo'lni topish uchun orqaga qaytish:

funktsiya[yo'l] =orqaga qaytish(DP)% [path] = BACKTRACKING (DP)    % Eng tejamkor yo'lni hisoblang    % DP: = TWED funktsiyasining DP matritsasi     x = hajmi(DP);    men = x(1);    j = x(2);     % Yo'llarning ko'rsatkichlari qarama-qarshi yo'nalishda saqlanadi    yo'l = bittasi(men + j, 2) * Inf;     qadamlar = 1;    esa (men ~= 1 || j ~= 1)        yo'l(qadamlar, :) = [men; j];             C = bittasi(3, 1) * inf;             Ikkala vaqt seriyasida ham ma'lumotlar nuqtalarini saqlang        C(1) = DP(men - 1, j - 1);        A da o'chirish        C(2) = DP(men - 1, j);        B da o'chirish        C(3) = DP(men, j - 1);             % Eng kam xarajat ko'rsatkichini toping        [~, idx] = min(C);             almashtirish idx            ish 1                Ikkala vaqt seriyasida ham ma'lumotlar nuqtalarini saqlang                men = men - 1;                j = j - 1;            ish 2                A da o'chirish                men = men - 1;                j = j;            ish 3                B da o'chirish                men = men;                j = j - 1;        oxiri        qadamlar = qadamlar + 1;    oxiri    yo'l (qadamlar, :) = [men j];     Yo'l teskari yo'nalishda hisoblab chiqilgan.    yo'l = yo'l(1:qadamlar, :);    yo'l = yo'l(oxiri: - 1:1, :); oxiri

Adabiyotlar

  1. ^ Marteau, P.-F. "IRISA serverlaridagi veb-sayt". Olingan 2016-09-11.
  2. ^ TraMineR. "Jeneva universiteti serverlaridagi veb-sayt, CH". Olingan 2016-09-11.
  • Marteau, P .; F. (2009). "Vaqt ketma-ketligini moslashtirish uchun qattiqlikni sozlash bilan Time Warp tahrir masofasi". Naqshli tahlil va mashina intellekti bo'yicha IEEE operatsiyalari. 31 (2): 306–318. arXiv:cs / 0703033. doi:10.1109 / TPAMI.2008.76.