矩阵恢复技术在时间序列缺失值填补中的应用

本文详细介绍了多种基于矩阵恢复的时间序列缺失值填补技术,包括矩阵分解、截断奇异值分解、迭代奇异值分解、软填补和质心分解等方法,通过实际代码示例展示各技术的应用效果和性能对比。

时间序列缺失值填补:矩阵恢复技术详解

时间序列中的缺失值处理并非易事。在相关数据集中,矩阵恢复技术能有效利用其他相关时间序列的信息智能填补缺失值。本文将介绍多种基于矩阵恢复的填补方法。

矩阵恢复技术

矩阵恢复技术广泛应用于推荐系统,通过补全用户-物品交互矩阵实现更好的推荐。这些技术同样适用于数据集缺失值填补,其核心思想是:假设存在一个低秩矩阵能够忠实表示更大矩阵中的信息,并尝试找到该矩阵。

矩阵的秩是其线性无关列向量或行向量的最大数量。如果矩阵的任何列(或行)是其他列(或行)的线性组合,则该矩阵不是满秩的。通过奇异值分解并计算非零特征值也可确定矩阵的秩。

矩阵分解

以推荐系统为例,用户-物品矩阵包含用户对物品的评分。通过矩阵分解,可将用户-物品矩阵分解为用户潜在因子矩阵和物品潜在因子矩阵。类似地,对于相关时间序列集合,矩阵分解可得到与时间方面相关的潜在因子矩阵和与单个时间序列相关的潜在因子矩阵。

使用Python库fancyimpute进行矩阵分解:

1
2
from fancyimpute import MatrixFactorization
recovered_matrix_mf = MatrixFactorization(rank=50).fit_transform(all_ts_df.values)

矩阵的秩是一个需要通过交叉验证确定的重要超参数。

截断奇异值分解与迭代奇异值分解

奇异值分解(SVD)将实矩阵分解为奇异矩阵和奇异值。截断SVD假设不需要所有奇异值来重建矩阵,仅使用前k个最高奇异值进行矩阵重建。

截断SVD实现:

1
2
3
4
5
from src.imputation.truncated_svd import TruncatedSVDImputation
recovered_matrix_tsvd = TruncatedSVDImputation(
    rank=2, 
    init_fill_method="zero", 
    min_value=0).fit_transform(all_ts_df.values)

迭代SVD通过多次运行截断SVD,每次迭代用估算值替换缺失值,逐步提高估算精度:

1
2
3
4
5
6
from fancyimpute import IterativeSVD
recovered_matrix_isvd = IterativeSVD(
    rank=2, 
    max_iters=1000, 
    svd_algorithm="arpack", 
    min_value=0).fit_transform(all_ts_df.values)

软填补

软填补技术核心也是SVD,但使用阈值技术选择重要奇异值。关键超参数shrinkage_value决定每次迭代中奇异值的"收缩"程度:

1
2
3
4
recovered_matrix_si = SoftImpute(
    shrinkage_value=70, 
    max_iters=1000, 
    min_value=0).fit_transform(all_ts_df.values)

通过查看前10个奇异值并定义相应范围,可以找到最优的shrinkage_value。

质心分解

质心分解是SVD的一种近似方法,计算质心值、加载向量和相关向量,分别近似SVD的奇异值、右奇异矩阵和左奇异矩阵。针对大型矩阵,可采用可扩展算法进行计算:

1
2
3
4
5
6
7
from src.imputation.cdrec import CentroidRecovery
recovered_matrix_cdrec = CentroidRecovery(
    truncation=5, 
    max_iters=100, 
    init_fill_method="interpolate", 
    min_value=0, 
    early_stopping=True).fit_transform(all_ts_df.values)

关键参数truncation类似于秩,决定生成分解矩阵时的秩减少程度。

技术对比

各种矩阵恢复技术在时间序列缺失值填补中表现出不同特点:

  • 矩阵分解能捕捉季节性模式,但平均绝对误差略高
  • 截断SVD能捕获关键数据模式,但精度有限
  • 迭代SVD通过多次迭代提高精度,结果与简单截断SVD相似
  • 软填补在捕捉午夜和清晨低值方面表现更好,误差较低
  • 质心分解为大规模矩阵提供了可行的近似解决方案

这些技术都需要通过强大的交叉验证框架来确定最佳超参数,以确保最佳的填补效果。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计