【问题标题】:Missing data recovery using tensor decomposition on Python Tensorly在 Python Tensorly 上使用张量分解丢失数据恢复
【发布时间】:2018-05-09 07:02:12
【问题描述】:

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

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

现在我正在使用 Tensorly,python 上的一个张量库。我构建了一个简单的张量,如下所示:

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))

当参数rank为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]]

当参数rank大于3时出错:

ValueError: array must not contain infs or NaNs

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

【问题讨论】:

    标签: python tensor tensorly


    【解决方案1】:

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

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

    【讨论】:

    • 非常感谢!我要试试看。
    【解决方案2】:

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

    【讨论】:

    • 谢谢,我稍后试试。张量分解的收敛速度非常慢。 PCA会更快吗?
    猜你喜欢
    • 1970-01-01
    • 2019-10-07
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 2013-03-23
    • 1970-01-01
    • 1970-01-01
    • 2021-09-15
    相关资源
    最近更新 更多