Skip to content

API Reference

Taiyou edited this page Jan 26, 2026 · 2 revisions

API Reference

DelayEmbedding クラス

多次元時系列に対する遅延埋め込みを実行するメインクラスです。scikit-learn の BaseEstimator / TransformerMixin を継承しており、Pipeline に統合可能です(scikit-learn がインストールされていない場合はスタブを使用)。

コンストラクタ

DelayEmbedding(dimension=2, delay=1)
パラメータ デフォルト 説明
dimension int or "auto" 2 埋め込み次元 m(遅延コピーの数)。1以上の整数、または "auto"
delay int or "auto" 1 時間遅延 τ(コピー間のステップ数)。1以上の整数、または "auto"

"auto" を指定した場合、fit() メソッドでデータから最適値を自動推定します。

ValueError: 正の整数でも "auto" でもない値を指定した場合

Fitted 属性

fit() 呼び出し後に以下の属性が設定されます:

属性 説明
dimension_ int 解決済みの埋め込み次元("auto" の場合は FNN で推定、固定値の場合はそのまま)
delay_ int 解決済みの時間遅延("auto" の場合は AMI で推定、固定値の場合はそのまま)

fit(X, y=None)

データから "auto" パラメータを推定します。固定値パラメータの場合もfitted 属性 (dimension_, delay_) を設定します。

emb = DelayEmbedding(dimension="auto", delay="auto")
emb.fit(ts)
print(emb.delay_, emb.dimension_)  # 推定値を確認
パラメータ 説明
X array-like, shape (T,) or (T, d) パラメータ推定に使用する入力時系列
y ignored scikit-learn 互換のために存在。使用されません

戻り値: self

パラメータ推定の順序:

  1. delay="auto" の場合 → optimal_delay(X) で τ を推定
  2. dimension="auto" の場合 → optimal_dimension(X, delay=τ) で m を推定(推定済みの τ を使用)

fit_transform(X, y=None)

fit(X)transform(X) を連続して実行します(TransformerMixin から継承)。

emb = DelayEmbedding(dimension="auto", delay="auto")
embedded = emb.fit_transform(ts)

transform(X, y=None)

時系列に遅延埋め込みを適用します。

emb = DelayEmbedding(dimension=3, delay=2)
result = emb.transform(X)
パラメータ 説明
X array-like, shape (T,) or (T, d) 入力時系列。T はタイムステップ数、d はチャネル数
y ignored scikit-learn 互換のために存在

戻り値: np.ndarray, shape (T - (m-1)*τ, d*m)

1次元配列は単変量時系列として扱われます。

ValueError:

  • "auto" パラメータが未推定(fit() 未呼び出し)の場合
  • 時系列が短すぎる場合

inverse_transform(embedded, d=1)

埋め込み行列から元の時系列を復元します(平均化による近似)。

reconstructed = emb.inverse_transform(embedded, d=2)
パラメータ 説明
embedded array-like, shape (N, d*m) 埋め込み行列
d int 元の時系列のチャネル数

戻り値: np.ndarray, shape (T, d)


scikit-learn 互換メソッド

scikit-learn がインストールされている場合、以下のメソッドが BaseEstimator / TransformerMixin から継承されます:

メソッド 説明
get_params(deep=True) コンストラクタパラメータを辞書として取得
set_params(**params) パラメータを設定して self を返す
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)

sklearn.base.clone() にも対応しています。


optimal_delay(X, max_delay=50, bins=64)

自己相互情報量 (AMI) の最初の極小値に基づいて最適な遅延 τ を選択します。

from delay_embedding import optimal_delay
tau = optimal_delay(X, max_delay=100)
パラメータ デフォルト 説明
X array-like 入力時系列
max_delay int 50 探索する最大遅延
bins int 64 エントロピー推定用のヒストグラムビン数

戻り値: int — 最適な遅延(1以上)

多変量時系列の場合、全チャネルの相互情報量を平均して使用します。


optimal_dimension(X, delay=1, max_dim=10, fnn_threshold=0.01, rtol=15.0, atol=2.0)

偽最近傍法 (FNN) により最適な埋め込み次元 m を選択します。

from delay_embedding import optimal_dimension
m = optimal_dimension(X, delay=tau, max_dim=8)
パラメータ デフォルト 説明
X array-like 入力時系列
delay int 1 使用する遅延
max_dim int 10 テストする最大次元
fnn_threshold float 0.01 FNN 割合がこの値を下回った次元を採用
rtol float 15.0 FNN 相対許容誤差
atol float 2.0 FNN 絶対許容誤差

戻り値: int — 最適な埋め込み次元(1以上)


使用例

基本的な使い方

import numpy as np
from delay_embedding import DelayEmbedding

# 手動パラメータ指定
ts = np.sin(np.linspace(0, 8 * np.pi, 500))
emb = DelayEmbedding(dimension=3, delay=5)
embedded = emb.transform(ts)

自動最適化

emb = DelayEmbedding(dimension="auto", delay="auto")
embedded = emb.fit_transform(ts)
print(f"τ={emb.delay_}, m={emb.dimension_}")

多変量時系列

t = np.linspace(0, 10 * np.pi, 1000)
ts = np.column_stack([np.sin(t), np.cos(t)])
emb = DelayEmbedding(dimension=3, delay=10)
embedded = emb.transform(ts)  # shape: (980, 6) = d*m = 2*3

逆変換

emb = DelayEmbedding(dimension=3, delay=5)
embedded = emb.transform(ts)
reconstructed = emb.inverse_transform(embedded, d=1)