неуникальное тензорное разложение для ланет-анализа
Хотите использовать Tucker и каноническую полиадическую декомпозицию (cdp или PARAFAC/CANDECOMP) 3-мерного тензора для скрытого анализа.
Использую python, функцию из tensorly.decomposition.parafac библиотеки тензорно.
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. Что делать за тензор?
1 ответ
Декомпозиция, которую вы используете в своем примере (парафак, также известная как каноническая-полиадическая -CP- декомпозиция), не имеет ядра. Он выражает исходный тензор как взвешенную сумму тензоров ранга 1, то есть взвешенную сумму внешнего произведения векторов. Эти векторы собираются для каждой моды (измерения) в матрицы факторов. Веса суммы - это вектор. Разложение CP, в отличие от Tucker'а, не имеет ядра и является уникальным при мягких условиях (вы можете рассматривать CP как частный случай Tucker'а, где весовой вектор является значениями диагонального ядра).
Однако есть несколько проблем с прямым сравнением факторов: во-первых, даже если разложение уникально, оно также инвариантно относительно перестановок факторов, поэтому вы не можете напрямую сравнивать факторы. Кроме того, определение фактического ранга тензора, как правило, NP-сложно. Что обычно вычисляется с помощью разложения CP, так это приближение низкого ранга (т.е. приближение наилучшего ранга R), которое также, в общем, NP-сложно, а ALS - просто (хорошая) эвристика. Если вы хотите сравнить несколько факторизованных тензоров, проще сравнивать реконструкции, чем напрямую факторы.
Для анализа скрытых факторов я советую вам взглянуть на эту статью, в которой показано, как вы можете изучить модели скрытых переменных путем факторизации наблюдаемых моментов низкого порядка.