在 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 可以,您可以使用它来恢复缺失值,并分离低秩部分和稀疏噪声。
我正在尝试恢复集群跟踪中丢失的数据,如下所示:
我看了一些文章,发现我可以为这个数据集创建一个张量,然后分解张量来恢复丢失的数据。
现在我正在使用 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 可以,您可以使用它来恢复缺失值,并分离低秩部分和稀疏噪声。