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