неуникальное тензорное разложение для ланет-анализа

Хотите использовать Такера и каноническую полиадическую декомпозицию (cdp или PARAFAC/CANDECOMP) трехмерного тензора для скрытого анализа.

Я использую python, функцию из tensorly.decomposition.parafac библиотеки tensorly.

from tensorly.decomposition import parafac
# Rank of the CP decomposition
cp_rank = 5
 Perform the CP decomposition
weights, factors = parafac(result, non_negative=True ,rank=cp_rank , normalize_factors=True, init='random', tol=10e-6)
# Reconstruct the tensor from the factors
cp_reconstruction = tl.kruskal_to_tensor((weights, factors))

Матрицы факторов и ядро ​​не являются уникальными (могут умножаться на невырожденную матрицу), поэтому матрицы факторов изменяются после вызова функции.

Используйте этот код, чтобы понять это:

weights = 0
for i in range(100):
    error = weights
    weights, factors = parafac(result, non_negative=True ,rank=8, normalize_factors=True, init='random', tol=10e-6)
    
    error -= weights
    print(tl.norm(error))

Как я могу описать или проанализировать все компоненты тензора. Имеют ли они какое-либо значение? Для матрицы я понимаю разложение SVD. Что делать для тензора?


person moon    schedule 30.07.2020    source источник


Ответы (1)


Разложение, которое вы используете в своем примере (parafac, также известное как Canonical-Polyadic-CP-разложение), не имеет ядра. Он выражает исходный тензор как взвешенную сумму тензоров ранга 1, то есть взвешенную сумму внешнего произведения векторов. Эти векторы собираются для каждого режима (измерения) в матрицы факторов. Веса суммы являются вектором. СР-разложение, в отличие от Такера, не имеет ядра и единственно в мягких условиях (можно рассматривать СР как частный случай Такера, где вектор весов является значениями диагонального ядра).

Однако есть несколько проблем с прямым сравнением факторов: во-первых, даже если разложение уникально, оно также инвариантно относительно перестановок факторов, поэтому вы не можете напрямую сравнивать факторы. Кроме того, найти фактический ранг тензора в общем случае NP-сложно. То, что обычно вычисляется с помощью CP-разложения, является аппроксимацией низкого ранга (т. е. наилучшей аппроксимацией ранга R), которая также, в общем, NP-трудна, а ALS является просто (хорошей) эвристикой. Если вы хотите сравнить несколько факторизованных тензоров, проще сравнивать реконструкции, а не непосредственно факторы.

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

person Jean    schedule 01.08.2020