0 / 0
Go back to the English version of the documentation
Líné vyhodnocení časových řad
Last updated: 06. 7. 2023
Líné vyhodnocení časových řad

Pomalé hodnocení je strategie vyhodnocení, která zpožďuje vyhodnocení výrazu, dokud není jeho hodnota zapotřebí. Při kombinaci se memourizací se strategie zpožděného vyhodnocení vyhýbá opakovanému vyhodnocení a může snížit dobu běhu určitých funkcí o významný faktor.

Knihovna časových řad používá opožděné vyhodnocení ke zpracování dat. Nomyslně je prováděcí graf sestaven na datech časových řad, jejichž vyhodnocení se spustí pouze, když je její výstup materializován. Za předpokladu, že objekt se pohybuje v jednom dimenzionálním prostoru, jehož umístění je zachyceno x (t). Můžete určit drsnou akceleraci/brzdění (h(t)) tohoto objektu pomocí časové řady rychlosti (v(t)) a zrychlení (a(t)) takto:

# 1d location timeseries
x(t) = input location timeseries

# velocity - first derivative of x(t)
v(t) = x(t) - x(t-1)

# acceleration - second derivative of x(t)
a(t) = v(t) - v(t-1)

# harsh acceleration/braking using thresholds on acceleration
h(t) = +1 if a(t) > threshold_acceleration
     = -1 if a(t) < threshold_deceleration
     = 0 otherwise

To vede k jednoduchému grafu provedení formuláře:

x(t) --> v(t) --> a(t) --> h(t)

Vyhodnocení se spustí pouze v případě, že je provedena akce, například compute h(5...10), tj. compute h(5), ..., h(10). Knihovna zachycuje úzké časové závislosti mezi časovými řadami. V tomto příkladu h(5...10) vyžaduje a(5...10), který pak vyžaduje v(4...10), který pak vyžaduje x(3...10). Vyhodnocují se pouze relevantní části produktů a(t), v(t) a x(t) .

h(5...10) <-- a(5...10) <-- v(4...10) <-- x(3...10)

Kromě toho jsou hodnocení paměti a mohou být znovu použita při následných akcích na h. Například, když požadavek na h(7...12) následuje požadavek na h(5...10), hodnoty h(7...10) se budou používat s pákovým efektem; dále, h(11...12) by se vyhodnotilo pomocí a(11...12), v(10...12) a x(9...12), což by zase zesílo v(10) a x(9...10) paměti z předchozího výpočtu.

V obecnějším příkladu byste mohli definovat vyhlazené časové řady rychlostí následujícím způsobem:

# 1d location timeseries
x(t) = input location timeseries

# velocity - first derivative of x(t)
v(t) = x(t) - x(t-1)

# smoothened velocity
# alpha is the smoothing factor
# n is a smoothing history
v_smooth(t) =  (v(t)*1.0 + v(t-1)*alpha + ... + v(t-n)*alpha^n) / (1 + alpha + ... + alpha^n)

# acceleration - second derivative of x(t)
a(t) = v_smooth(t) - v_smooth(t-1)

V tomto příkladě má h(l...u) následující časovou závislost. Hodnocení h(l...u) by striktně dodržovala tuto časovou závislost s pamětí.

h(l...u) <-- a(l...u) <-- v_smooth(l-1...u) <-- v(l-n-1...u) <-- x(l-n-2...u)

Příklad

Následující příklad ukazuje úsek kódu python, který implementuje kruté zrychlení na jednoduché časové řadě v paměti. Knihovna obsahuje několik vestavěných transformací. V tomto příkladu je transformace rozdílu použita dvakrát na časovou řadu umístění k výpočtu časové řady zrychlení běhu. Operace mapy se používá na časové řady zrychlení pomocí tvrdé funkce lambda, která je definována po ukázce kódu, která mapuje zrychlení na +1 (tvrdé zrychlení), -1 (tvrdé brzdění) a 0 (jinak). Operace filtru vybere pouze instance, ve kterých je pozorován buď tvrdý akcelerace, nebo tvrdé brzdění. Před voláním get_valuesse vytvoří graf provedení, ale neprovádí se žádné výpočty. Při volání get_values(5, 10)se vyhodnocení provádí s memourizací na nejužší možné časové závislosti v grafu provedení.

import tspy
from tspy.builders.functions import transformers

x = tspy.time_series([1.0, 2.0, 4.0, 7.0, 11.0, 16.0, 22.0, 29.0, 28.0, 30.0, 29.0, 30.0, 30.0])
v = x.transform(transformers.difference())
a = v.transform(transformers.difference())
h = a.map(harsh).filter(lambda h: h != 0)

print(h[5, 10])

Krutý lambda je definován takto:

def harsh(a):
    threshold_acceleration = 2.0
    threshold_braking = -2.0

    if (a > threshold_acceleration):
        return +1
    elif (a < threshold_braking):
        return -1
    else:
        return 0

Další informace

Chcete-li použít produkt tspy Python SDK, přečtěte si dokumentaci sady tspy Python SDK.

Nadřízené téma: Analýza časové řady

Generative AI search and answer
These answers are generated by a large language model in watsonx.ai based on content from the product documentation. Learn more