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

我读了一些文章,发现我可以为这个数据集创建一个张量,然后对张量进行分解以恢复丢失的数据。
现在我用的是替身张量库,我建立了这样一个简单的张量:
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时,我得到了所有的结果:
[[ 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我怎么才能解决这个问题?任何答案都会有帮助。提前谢谢。
发布于 2018-05-09 07:26:39
在tensorly (https://github.com/tensorly/tensorly/issues/4 )的当前版本中,似乎不支持处理缺失的值。
有关基于numpy的解决方案,请参见https://nipunbatra.github.io/blog/2017/tensor-decomposition-autograd.html。
发布于 2018-05-09 13:48:48
Tucker和CP分解中还不支持缺失值。但是,鲁棒张量PCA可以使用它来恢复丢失的值,并分离低级别的部分和稀疏的噪声。
https://stackoverflow.com/questions/50247331
复制相似问题