非负矩阵分解(Non-negative Matrix Factorization, NMF)算法的原理与实现过程
字数 1408 2025-11-19 00:53:22
非负矩阵分解(Non-negative Matrix Factorization, NMF)算法的原理与实现过程
题目描述
给定一个非负矩阵 \(V \in \mathbb{R}^{m \times n}\)(例如文档-词项矩阵或图像像素矩阵),NMF的目标是找到两个非负矩阵 \(W \in \mathbb{R}^{m \times k}\) 和 \(H \in \mathbb{R}^{k \times n}\),使得它们的乘积近似原始矩阵:
\[ V \approx WH \]
其中 \(k\) 是预设的潜在特征维度(\(k < \min(m, n)\))。NMF通过非负性约束实现数据的部分表示和可解释性分解。
解题过程
- 问题形式化
- 定义损失函数:常用欧几里得距离(Frobenius范数)或KL散度。以Frobenius损失为例:
\[ \min_{W \ge 0, H \ge 0} \| V - WH \|_F^2 \]
- 非负约束 \(W \ge 0, H \ge 0\) 确保分解结果具有物理意义(如词频、像素强度均为非负值)。
- 优化目标展开
- 将Frobenius范数展开为:
\[ \| V - WH \|_F^2 = \sum_{i=1}^m \sum_{j=1}^n \left( V_{ij} - (WH)_{ij} \right)^2 \]
- 问题为非凸,但可通过交替优化 \(W\) 和 \(H\) 来求解局部最优解。
- 交替最小化步骤
- 固定 \(H\),更新 \(W\):
目标函数对 \(W\) 求导,利用梯度下降并结合非负约束,得到乘性更新规则:
- 固定 \(H\),更新 \(W\):
\[ W_{ik} \leftarrow W_{ik} \frac{(VH^T)_{ik}}{(WHH^T)_{ik}} \]
此更新通过比值形式自动保持非负性,且当梯度为负时减小 $ W_{ik} $,梯度为正时增大 $ W_{ik} $。
- 固定 \(W\),更新 \(H\):
类似地,得到 \(H\) 的乘性更新规则:
\[ H_{kj} \leftarrow H_{kj} \frac{(W^TV)_{kj}}{(W^TWH)_{kj}} \]
每一步更新后,$ W $ 和 $ H $ 的非负性均保持不变。
-
算法流程
- 初始化:随机生成非负矩阵 \(W\) 和 \(H\),或使用SVD等方法的非负近似。
- 迭代直至收敛:
- 按上述规则更新 \(W\)。
- 按上述规则更新 \(H\)。
- 计算损失函数值,检查变化是否小于阈值。
- 输出:基矩阵 \(W\) 和系数矩阵 \(H\),其中 \(W\) 的列表示潜在特征,\(H\) 的行表示特征在样本中的权重。
-
解释与验证
- \(W\) 的每一列可视为一个“部分”(如主题中的关键词组合或图像中的局部特征),\(H\) 的每一行表示样本对这些部分的加权组合。
- 通过重构误差 \(\| V - WH \|_F^2\) 评估分解质量,并可利用交叉验证选择超参数 \(k\)。
关键点
- 乘性更新规则简单且保证非负性,但可能收敛到局部最优。
- 适用于文本主题提取(\(W\) 为主题-词分布,\(H\) 为文档-主题分布)和图像分解等场景。