Skip to content
Taiyou edited this page Jan 26, 2026 · 3 revisions

delay-embedding

Delay embedding (Takens' embedding) for multidimensional time series data in Python.

Overview

delay-embedding は、多次元時系列データに対して遅延埋め込み (delay embedding / Takens' embedding) を適用するための Python ライブラリです。

主な特徴

  • 多次元時系列対応: 単変量・多変量どちらの時系列にも対応
  • 逆変換: 埋め込み行列から元の時系列を復元(平均化による近似復元)
  • 自動最適化: dimension="auto", delay="auto" でデータから最適パラメータを自動推定
  • 最適パラメータ推定:
    • 最適遅延 τ: 自己相互情報量 (Auto Mutual Information) の最初の極小値
    • 最適埋め込み次元 m: 偽最近傍法 (False Nearest Neighbours, FNN)
  • scikit-learn 互換: BaseEstimator / TransformerMixin 継承。Pipeline に統合可能
  • NumPy ベース: 依存関係は NumPy のみ。軽量で高速
  • giotto-tda と同一結果: 既存ライブラリとの数値比較で完全一致を確認済み

インストール

pip install git+https://github.com/Taiyou/delay-embedding.git

# scikit-learn 連携が必要な場合
pip install "delay-embedding[sklearn] @ git+https://github.com/Taiyou/delay-embedding.git"

クイックスタート

import numpy as np
from delay_embedding import DelayEmbedding

# --- 自動最適化(推奨)---
ts = np.column_stack([np.sin(t), np.cos(t)])
emb = DelayEmbedding(dimension="auto", delay="auto")
embedded = emb.fit_transform(ts)
print(emb.delay_, emb.dimension_)  # 推定値を確認

# --- 手動指定 ---
emb = DelayEmbedding(dimension=3, delay=5)
embedded = emb.transform(ts)

# --- sklearn Pipeline ---
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler

pipe = Pipeline([
    ("embed", DelayEmbedding(dimension="auto", delay="auto")),
    ("scale", StandardScaler()),
])
result = pipe.fit_transform(ts)

Wiki ページ

理論的背景

Takens の埋め込み定理

Takens の定理 (1981) は、力学系の状態空間が十分な埋め込み次元 m と適切な遅延 τ を用いた遅延座標によって再構成できることを保証します。

d 次元の時系列 x(t) に対して、遅延埋め込みは以下のベクトルを構成します:

y(t) = [x(t), x(t+τ), x(t+2τ), ..., x(t+(m-1)τ)]

出力は d*m 次元のベクトルとなります。

パラメータ選択

  • 遅延 τ: 自己相互情報量 (AMI) の最初の極小値を選択。これにより、各遅延コピー間の冗長性を最小化しながら十分な相関を保持
  • 埋め込み次元 m: 偽最近傍法 (FNN) により、低次元空間での見かけの近傍が高次元に展開した際に「偽の近傍」でなくなる最小次元を選択

Clone this wiki locally