分析00

00_Gen によって生成されたデータに対して各種モデルを適用する

関数定義


Parameter

 Parameter (G:jaxtyping.Float[Array,'{N}{N}'],
            S:jaxtyping.Float[Array,'{N}{N}'],
            w0:jaxtyping.Float[Array,'{N}'],
            P0:jaxtyping.Float[Array,'{N}{N}'],
            epsilon:jaxtyping.Float[Array,'']=Array(1.5258789e-05,
            dtype=float32, weak_type=True))

\(\!\) 00_Gen によって生成するときのパラメータ。

\(\!\) Type Default Details
G Float[Array, ‘{N} {N}’] \(\!\) \(\boldsymbol\Gamma\)
S Float[Array, ‘{N} {N}’] \(\!\) \(\boldsymbol\Sigma\)
w0 Float[Array, ‘{N}’] \(\!\) \(\mathbf w_{-1}\)
P0 Float[Array, ‘{N} {N}’] \(\!\) \(\mathbf P_{-1}\)
epsilon Float[Array, ’’] 1.52587890625e-05 \(\epsilon\)

\(\!\)


Param

 Param (N:int, p:int, q:int, r:int)

\(\!\) 可変パラメータ。各パラメータは次のように定義される。

  • \(N\)
  • \(T=1000\)
  • \(\boldsymbol\Gamma=2^p\mathbf I\)
  • \(\boldsymbol\Sigma=2^q\mathbf I\)
  • \(\mathbf w_{-1}=(r/2)(1,\ldots,1)^T/\sqrt{N}\)
  • \(\mathbf P_{-1}=\boldsymbol\Gamma\)
  • \(\epsilon=2^{-16}\)
\(\!\) Type Details
N int \(N\)
p int \(p\)
q int \(q\)
r int \(r\)

\(\!\)


restore_param

 restore_param (param:__main__.Param)

\(\!\) Param から Parameter に変換する。 \(\!\)

\(\!\) Type Details
param Param Param
Returns Tuple \(N\), \(T\), Parameter

save_data

 save_data (param:__main__.Param, name:str, data:dict)

\(\!\) 00_Data.h5 にデータを格納する

.
├───param1
│   ├───Gen
│   │       W (seed, T, N)
│   │       X (seed, T, N)
│   │       Y (seed, T)
│   │
│   ├───Model1
│   │       W (seed, T, N)
│   │       P (seed, T, N, N)
│   │
│   ├───Model2
│
├───param2

\(\!\)

\(\!\) Type Details
param Param Param
name str Model name (Gen, EKF, etc.)
data dict dataset_name: jnp.array
Returns None \(\!\)

WXY

 WXY (W:jaxtyping.Float[Array,'TN'], X:jaxtyping.Float[Array,'TN'],
      Y:jaxtyping.Float[Array,'T'])

\(\!\)

\(\!\) Type Details
W Float[Array, ‘T N’] \(\{\mathbf w_t\}_{t=0,\ldots,T-1}\)
X Float[Array, ‘T N’] \(\{\mathbf x_t\}_{t=0,\ldots,T-1}\)
Y Float[Array, ‘T’] \(\{y_t\}_{t=0,\ldots,T-1}\)

\(\!\)


generate

 generate (key:Union[jaxtyping.Key[Array,''],jaxtyping.UInt32[Array,'2']],
           N:int, T:int, p:__main__.Parameter)
\(\!\) Type Details
key Union PRNGKeyArray
N int \(N\)
T int \(T\)
p Parameter Parameter
Returns WXY \(\!\)

generate_main

 generate_main (param:__main__.Param, seed:int)

\(\!\) データを生成し、00_Data.h5 に保存する。 \(\!\)

\(\!\) Type Details
param Param Param
seed int seed値

predict_main

 predict_main (param:__main__.Param, model_name:str, func:Callable[[int,in
               t,jaxtyping.Float[Array,'TN'],jaxtyping.Float[Array,'T'],__
               main__.Parameter],NamedTuple])

\(\!\) 00_Data.h5 のデータ \(X,Y\) に対して func\(W\) 等を推論し、保存する。 \(\!\)

\(\!\) Type Details
param Param Param
model_name str EKF, etc.
func Callable \(N,T,\{\mathbf x_t\}_{t=0,\ldots,T-1},\{y_t\}_{t=0,\ldots,T-1},\mathrm{p}\to\{\hat{\mathbf w_t}\}_{t=0,\ldots,T-1},\{\mathbf P_{t/t}\}_{t=0,\ldots,T-1},\ldots\)

関数のテスト

LOCK = True

データ生成

分析

推論結果の様子

結果

  • \(N\)
  • \(T=1000\)
  • \(\boldsymbol\Gamma=2^p\mathbf I\)
  • \(\boldsymbol\Sigma=2^q\mathbf I\)
  • \(\mathbf w_{-1}=(r/2)(1,\ldots,1)^T/\sqrt{N}\)
  • \(\mathbf P_{-1}=\boldsymbol\Gamma\)
  • \(\epsilon=2^{-16}\)

Listening on: localhost:8060

誤差

\[E(\{w_{0,t}\}_{t=0,\ldots,T})=\{\hat{w}_{0,t} - w_{0,t}\}_{t=0,\ldots,T}\]

  • \(N\)
  • \(T=1000\)
  • \(\boldsymbol\Gamma=2^p\mathbf I\)
  • \(\boldsymbol\Sigma=2^q\mathbf I\)
  • \(\mathbf w_{-1}=(r/2)(1,\ldots,1)^T/\sqrt{N}\)
  • \(\mathbf P_{-1}=\boldsymbol\Gamma\)
  • \(\epsilon=2^{-16}\)

Listening on: localhost:8070

Listening on: localhost:8061

algorithm frob_error relative_error
p
-4 EKF 5.580760 63.139098
-4 VApre 1.658594 18.764848
-4 VAEM 1.655468 18.729480
-6 EKF 1.061542 48.039904
-6 VApre 0.723463 32.740207
-6 VAEM 0.722900 32.714732
-8 EKF 0.375931 68.050840
-8 VApre 0.341001 61.727846
-8 VAEM 0.340927 61.714354
-10 EKF 0.164551 119.147344
-10 VApre 0.161168 116.698451
-10 VAEM 0.161162 116.693650
-12 EKF 0.072807 210.870368
-12 VApre 0.072609 210.298627
-12 VAEM 0.072609 210.297181