不同长度时间序列的 SVD 降维

机器算法验证 时间序列 机器学习 主成分分析 数据转换 多元分析
2022-03-20 21:26:22

我正在使用奇异值分解作为降维技术。

给定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/..)

4个回答

有一个相当新的研究领域称为Matrix Completion,它可能可以满足您的需求。Emmanuel Candes在这次讲座中做了一个非常好的介绍

用零填充是不好的。尝试使用过去的观察结果进行重新采样。

只是一个想法:您可能不需要完整的 SVD 来解决您的问题。M = USV*是您的d x n矩阵的 SVD(,时间序列是列)。为了实现降维,您将使用矩阵VS您可以通过对角化M* M = V (S*S) V*来找到它们。但是,由于您缺少一些值,因此您无法计算M* M不过,你可以估计它。它的条目是M列的乘积之和. 在计算任何 SSP 时,请忽略涉及缺失值的对。重新缩放每个产品以考虑缺失值:即,每当 SSP 涉及nk对时,将其重新缩放n/(nk)。 此过程是M* M的“合理”估计量,您可以从那里开始。如果你想变得更漂亮,也许多种插补技术或矩阵完成会有所帮助。

(这可以在许多统计包中通过计算转置数据集的成对协方差矩阵并对其应用 PCA 或因子分析来实现。)

您可以估计“短”系列的单变量时间序列模型,并将它们外推到未来以“对齐”所有系列。