我正在使用奇异值分解作为降维技术。
给定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/..)