-
Notifications
You must be signed in to change notification settings - Fork 0
API Reference
多次元時系列に対する遅延埋め込みを実行するメインクラスです。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" でもない値を指定した場合
fit() 呼び出し後に以下の属性が設定されます:
| 属性 | 型 | 説明 |
|---|---|---|
dimension_ |
int |
解決済みの埋め込み次元("auto" の場合は FNN で推定、固定値の場合はそのまま) |
delay_ |
int |
解決済みの時間遅延("auto" の場合は AMI で推定、固定値の場合はそのまま) |
データから "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
パラメータ推定の順序:
-
delay="auto"の場合 →optimal_delay(X)で τ を推定 -
dimension="auto"の場合 →optimal_dimension(X, delay=τ)で m を推定(推定済みの τ を使用)
fit(X) と transform(X) を連続して実行します(TransformerMixin から継承)。
emb = DelayEmbedding(dimension="auto", delay="auto")
embedded = emb.fit_transform(ts)時系列に遅延埋め込みを適用します。
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()未呼び出し)の場合 - 時系列が短すぎる場合
埋め込み行列から元の時系列を復元します(平均化による近似)。
reconstructed = emb.inverse_transform(embedded, d=2)| パラメータ | 型 | 説明 |
|---|---|---|
embedded |
array-like, shape (N, d*m)
|
埋め込み行列 |
d |
int | 元の時系列のチャネル数 |
戻り値: np.ndarray, shape (T, d)
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() にも対応しています。
自己相互情報量 (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以上)
多変量時系列の場合、全チャネルの相互情報量を平均して使用します。
偽最近傍法 (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*3emb = DelayEmbedding(dimension=3, delay=5)
embedded = emb.transform(ts)
reconstructed = emb.inverse_transform(embedded, d=1)