次元削減手法として特異値分解を使用しています。
N
次元のベクトルが与えられた場合D
、アイデアは、相関のない次元の変換された空間で特徴を表現することです。これは、この空間の固有ベクトルのデータの情報のほとんどを重要度の高い順に凝縮します。
今、私はこの手順を時系列データに適用しようとしています。問題は、すべてのシーケンスの長さが同じではないことです。したがって、実際にnum-by-dim
マトリックスを作成してSVDを適用することはできません。最初に考えたのは、行列を作成しnum-by-maxDim
て空のスペースをゼロで埋めることにより、行列にゼロを埋め込むことでしたが、それが正しい方法であるかどうかはわかりません。
私の質問は、異なる長さの時系列への次元削減のSVDアプローチをどのように行いますか?あるいは、時系列で通常使用される固有空間表現の他の同様の方法はありますか?
以下は、アイデアを説明するためのMATLABコードです。
X = randn(100,4); % data matrix of size N-by-dim
X0 = bsxfun(@minus, X, mean(X)); % standarize
[U S V] = svd(X0,0); % SVD
variances = diag(S).^2 / (size(X,1)-1); % variances along eigenvectors
KEEP = 2; % number of dimensions to keep
newX = U(:,1:KEEP)*S(1:KEEP,1:KEEP); % reduced and transformed data
(私は主にMATLABでコーディングしていますが、R / Python / ..も読むのに十分快適です)