基于增广拉格朗日乘子法的 RPCA 矩阵分解工具
项目简介
本项目是一个基于 MATLAB 实现的鲁棒主成分分析(Robust Principal Component Analysis, RPCA)算法工具。旨在解决将高维观测矩阵分解为低秩矩阵(Low-Rank Matrix)与稀疏矩阵(Sparse Matrix)的凸优化问题。
核心算法采用了非精确增广拉格朗日乘子法(Inexact Augmented Lagrange Multiplier, IALM),相较于传统的 PCA 方法,该算法对于大幅值的稀疏噪声(离群点)具有极强的鲁棒性。本项目不仅包含算法核心实现,还内置了完整的仿真数据生成、模型求解及结果可视化评估流程。
功能特性
- 高效求解算法:实现了基于交替方向法的 IALM 策略,能够快速收敛并精确恢复矩阵结构。
- 自动化数据仿真:内置合成数据生成器,可自动构建包含特定秩及稀疏噪声分布的测试数据。
- 自适应参数调整:在迭代过程中动态调整惩罚参数,平衡收敛速度与求解精度。
- 全方位可视化:提供 2x4 的多图展示结果,包括原始成分、收敛曲线、恢复结果对比及残差分析。
- 量化评估:自动计算并输出低秩矩阵与稀疏矩阵的 Frobenius 范数相对误差。
系统要求
- MATLAB R2016a 或更高版本(需包含基础矩阵运算功能)。
- 无需额外安装第三方工具箱。
使用方法
- 确保 MATLAB 当前工作路径包含脚本文件。
- 直接运行主函数。
- 程序将自动执行数据生成、算法求解,并在命令窗口输出迭代信息与最终误差。
- 运行结束后会弹出一个图形窗口展示分解结果。
实现细节与算法逻辑
本项目完全基于提供的源码实现,具体逻辑流程如下:
1. 数据生成阶段
程序首先构建用于验证算法的合成数据,具体参数设定如下:
- 矩阵维度:生成大小为 200x200 的方阵。
- 低秩部分 ($L$):通过两个随机高斯矩阵相乘构造,设定真实秩(rank)为 10。
- 稀疏噪声部分 ($S$):设定稀疏度为 5%(即矩阵中 5% 的元素被污染)。噪声位置随机选取,幅值在 uniform[-50, 50] 之间均匀分布。
- 观测矩阵 ($M$):$M = L + S$,作为算法的唯一输入。
2. 核心算法 (IALM 求解器)
求解器函数
rpca_ialm 旨在解决以下优化问题:
minimize $||A||_* + lambda ||E||_1$ subject to $A + E = M$
算法采用迭代更新策略,最大迭代次数设为 1000,收敛容差为 1e-7。主要步骤包括:
A. 初始化
- 初始化低秩矩阵 $A$、稀疏矩阵 $E$、拉格朗日乘子 $Y$ 为全零矩阵。
- 初始化惩罚参数 $mu = 1.25 / ||M||_2$,增长因子 $rho = 1.5$。正则化参数 $lambda$ 设定为 $1/sqrt{n}$。
B. 迭代更新 A(低秩部分)
- 利用奇异值阈值算子(Singular Value Thresholding, SVT)更新 $A$。
- 对残差矩阵进行奇异值分解(SVD),将小于阈值 $1/mu$ 的奇异值置零,并按阈值收缩大于该值的奇异值,从而保证 $A$ 的低秩特性。
C. 迭代更新 E(稀疏部分)
- 利用软阈值算子(Soft Thresholding)更新 $E$。
- 对矩阵元素进行逐点操作,将绝对值小于阈值 $lambda/mu$ 的元素置零,并收缩其他元素,从而保证 $E$ 的稀疏性。
D. 更新乘子与参数
- 根据约束残差 $Z = M - A - E$ 更新拉格朗日乘子 $Y$。
- 更新惩罚参数 $mu$,使其按因子 1.5 倍增,加速收敛,上限为初始值的 $10^7$ 倍。
3. 结果评估与可视化
程序在算法运行结束后进行详细的后处理:
精度计算
- 分别计算恢复出的低秩矩阵 $hat{A}$ 和稀疏矩阵 $hat{E}$ 相对于真实值 $L_{true}$ 和 $S_{true}$ 的相对误差(Frobenius 范数比值)。
图形展示
生成包含 8 个子图的窗口:
- 第一行:展示真实的低秩矩阵、真实的稀疏噪声矩阵、观测矩阵(输入数据)、以及算法迭代的误差收敛曲线(半对数坐标)。
- 第二行:展示算法恢复的低秩矩阵、恢复的稀疏矩阵、重构后的总矩阵 ($A+E$)、以及最终的残差矩阵($|M - (A+E)|$)。