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

Хотите использовать 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 - просто (хорошая) эвристика. Если вы хотите сравнить несколько факторизованных тензоров, проще сравнивать реконструкции, чем напрямую факторы.

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

Другие вопросы по тегам