在 Python Tensorly 上使用张量分解恢复缺失数据

Missing data recovery using tensor decomposition on Python Tensorly

我正在尝试恢复集群跟踪中丢失的数据,如下所示:

我看了一些文章,发现我可以为这个数据集创建一个张量,然后分解张量来恢复丢失的数据。

现在我正在使用 Tensorly,python.I 上的一个张量库构建了一个像这样的简单张量:

import tensorly as tl
X = tl.tensor(np.arange(24).reshape((4, 6)))
X[0][5]= nan
X[1][5]= nan

我得到了:

array([[  0.,   1.,   2.,   3.,   4.,  nan],
       [  6.,   7.,   8.,   9.,  10.,  nan],
       [ 12.,  13.,  14.,  15.,  16.,  17.],
       [ 18.,  19.,  20.,  21.,  22.,  23.]])

然后我按照官方文档尝试分解一下:

from tensorly.decomposition import parafac
factors = parafac(X, rank=1)
print(tl.kruskal_to_tensor(factors))

当参数等级为 1 或 2 或 3 时,我得到了 all-nan 结果:

[[ nan  nan  nan  nan  nan  nan]
 [ nan  nan  nan  nan  nan  nan]
 [ nan  nan  nan  nan  nan  nan]
 [ nan  nan  nan  nan  nan  nan]]

当参数等级大于 3 时出错:

ValueError: array must not contain infs or NaNs

我该如何解决这个问题?任何答案都会有所帮助。提前致谢。

似乎当前版本的tensorly不支持处理缺失值(https://github.com/tensorly/tensorly/issues/4)。

有关基于 numpy 的解决方案,请参阅 https://nipunbatra.github.io/blog/2017/tensor-decomposition-autograd.html

Tucker 和 CP 分解尚不支持缺失值。但是,robust tensor PCA 可以,您可以使用它来恢复缺失值,并分离低秩部分和稀疏噪声。