基于MATLAB的高阶张量分解与分析工具包
项目介绍
本项目是一个专注于高维数据分析的通用张量(Tensor)计算工具包,基于MATLAB环境开发。项目核心实现了高阶奇异值分解(HOSVD),这是一种将经典矩阵奇异值分解(SVD)推广到多维数组的Tucker分解形式。
该工具包不仅提供了从底层张量代数运算到高层分解算法的完整实现,还包含了一套用于验证算法有效性的完整流程:包括低秩合成数据生成、噪声模拟、分解计算、降维重构以及误差分析。它适用于信号处理、计算机视觉及机器学习中涉及高维特征提取和数据压缩的场景。
功能特性
- 高维张量构建与模拟:能够生成具有特定低秩结构的合成张量数据,并支持添加高斯白噪声以模拟真实环境中的信号干扰。
- 完整的张量代数底层库:
*
模-n展开 (Matricization/Unfolding):支持将任意N维张量沿指定模态展开为矩阵。
*
张量折叠 (Folding):支持将展开后的矩阵无损恢复为原始张量结构。
*
模-n乘积 (n-mode product):实现了张量与矩阵在特定模态下的乘法运算,这是张量分解与重构的核心算子。
- HOSVD算法实现:自动计算高维数据的核心张量(Core Tensor)及各个模态的正交因子矩阵(Factor Matrices)。
- 数据重构与降维:
* 支持利用全秩因子完全重构数据(用于精度验证)。
* 支持基于截断秩(Truncated Rank)的近似重构,用于数据去噪和压缩。
- 多维可视化分析:提供专门的绘图功能,展示奇异值衰减趋势、原始数据与重构数据的切片对比、以及误差分布热力图。
系统要求
- MATLAB R2016a 或更高版本(代码中使用了
permute, ipermute, bsxfun 等基础函数,无需额外工具箱)。
核心算法与实现逻辑
本项目中的算法完全基于线性代数和多线性代数理论手动实现,未依赖MATLAB的高级张量工具箱,确保了代码的透明性和可移植性。
1. 基础张量运算
- 张量展开 (Unfolding):通过
permute 函数调整维度顺序,将目标模态置于第一维,随后利用 reshape 将其余维度合并为列,从而将高阶运算转化为矩阵运算。 - 张量折叠 (Folding):是展开的逆过程。首先通过
reshape 恢复维度结构,再利用 ipermute(逆置换)将维度顺序还原。 - 模-n乘积 (Tensor-Matrix Product):算法逻辑遵循 $Y = X times_n U Leftrightarrow Y_{(n)} = U cdot X_{(n)}$。函数首先对张量进行模-n展开,与矩阵进行标准乘法,最后将结果折叠回张量形式。
2. HOSVD分解 (Tucker分解)
算法流程如下:
- 因子矩阵计算:遍历张量的每一个模态 $n$,对张量进行模-n展开得到矩阵 $X_{(n)}$。对该矩阵执行经济型奇异值分解(Economy SVD),提取左奇异向量作为该模态的因子矩阵 $U^{(n)}$。
- 核心张量计算:核心张量 $G$ 反映了不同模态间的相互作用。计算公式为 $G = X times_1 U^{(1)T} times_2 U^{(2)T} dots times_N U^{(N)T}$。代码中通过循环调用模-n乘积函数,逐步将输入张量投影到因子矩阵定义的子空间中。
3. 截断重构 (降维应用)
为了实现降维或去噪,工具包实现了截断重构逻辑:
- 根据用户指定的保留秩(Ranks),对各模态的因子矩阵 $U^{(n)}$ 进行列截断,仅保留前 $k$ 个主分量。
- 利用截断后的因子矩阵重新计算压缩后的核心张量。
- 通过逆运算 $X_{approx} = G_{trunc} times_1 U_{trunc}^{(1)} dots$ 恢复近似张量。
使用方法与流程
直接运行 main 函数即可执行完整的演示流程。代码内部逻辑按以下步骤执行:
步骤 1:环境初始化与数据生成
- 设置随机数种子以保证结果可复现。
- 定义一个 [20, 20, 20] 的三维张量。
- 生成 3 对随机向量并计算外积,构建真实秩为 5 的纯净信号。
- 加入 10% 能量水平的高斯白噪声,生成观测张量 $X_{noisy}$。
步骤 2:执行HOSVD
- 调用
run_hosvd 函数对含噪数据进行分解。 - 输出分解所需的计算时间。
步骤 3:重构与误差分析
- 全秩重构:使用完整的核心张量和因子矩阵还原数据,计算其与含噪数据的相对误差(通常应接近机器精度)。
- 截断重构:设定保留秩为 [5, 5, 5],对数据进行降维重构。计算重构数据与无噪真值之间的相对误差,以评估去噪效果。
步骤 4:结果可视化
程序最后会弹出一个包含四个子图的窗口:
- 奇异值分布:展示各模态展开矩阵的奇异值衰减曲线,辅助判断截断秩的选取。
- 原始切片:展示含噪张量中间位置的二维切片。
- 重构切片:展示降维处理后的张量对应切片,直观显示去噪效果。
- 误差分布:展示原始切片与重构切片之间的绝对差值热力图。