Отсутствует восстановление данных с использованием тензорной декомпозиции на Python Tensorly - PullRequest
0 голосов
/ 09 мая 2018

Я пытаюсь восстановить отсутствующие данные в трассировке кластера следующим образом:

enter image description here

Я прочитал несколько статей и обнаружил, что могу создатьтензор для этого набора данных, а затем разложить тензор для восстановления отсутствующих данных.

Теперь я использую 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))

Я получил результат "все нан", когда ранг параметра равен 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

Как это исправить?Любой ответ поможет.Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 09 мая 2018

Отсутствующие значения пока не поддерживаются в разложениях Такера и СР. Тем не менее, надежный тензор PCA работает, и вы можете использовать его для восстановления пропущенных значений, а также для разделения низкочастотной части и разреженного шума.

0 голосов
/ 09 мая 2018

Кажется, что обработка пропущенных значений не поддерживается в текущей версии тензорного (https://github.com/tensorly/tensorly/issues/4).

См. https://nipunbatra.github.io/blog/2017/tensor-decomposition-autograd.html для решения на основе numpy.

...