一句话定义:非负矩阵分解(Non-negative Matrix Factorization,NMF)是在"所有数都不许为负"这个约束下,把一个大矩阵近似拆成两个小矩阵相乘的方法,拆出来的结果天然对应"若干部分拼成一个整体"。
它是怎么工作的
先看一个生活场景。假设有一张食堂的月度账本:每一列是一道菜,每一行是一种食材的用量。你会直觉地发现,几十道菜其实是由少数几种"底料"配出来的——番茄底、香辣底、清汤底。NMF 干的就是这件事:它去找出这几款底料,并算出每道菜里各放了多少。
写成数学形式就是 V ≈ W × H。V 是原始矩阵,比如"词 × 文档"的计数表;W 的每一列是一个主题在各词上的分布,H 的每一列是一篇文档里各主题占的比重。约束只有一个:W 和 H 里的所有数字都必须大于等于零。
为什么这个"不许为负"这么关键?因为一旦允许负数,表示就变成了"有它一份,再减掉它一份",正负相消之后,每一列往往长成一团分不清意义的正负混合体。禁止负数,等于强制模型只能"往上加",于是每个基向量就容易被看成一块具体的零件——就像人脸可以拆成眼睛、鼻子、嘴巴的叠加,而不是"一张脸减去半只眼睛"。
和邻居们的区别
| 对比项 | NMF | PCA / SVD | LDA |
|---|---|---|---|
| 数值约束 | 全部非负 | 可正可负 | 概率分布,非负 |
| 表示方式 | 部分的加性组合 | 正负相消的线性组合 | 主题的概率生成 |
| 基向量可读性 | 常能命名成"部件" | 通常难以命名 | 能命名,但依赖先验 |
| 典型用途 | 主题、部件、隐因子 | 降维、压缩、去噪 | 文档主题 |
要留意一点:非负约束换来了可解释性,代价是分解通常不唯一——换一组初始值可能得到另一组底料。所以实践中常加稀疏约束,或者干脆多跑几次挑一组顺眼的。另外,"非负"本身并不保证可解释,它只是把门推开了一条缝。
对你意味着什么
对从业者来说,判断标准很简单:如果你的下游需要一个能讲给业务听的解释——比如"这批用户主要是价格敏感型加囤货型"——NMF 往往比 PCA 更合适;如果目标只是压缩、降噪、提特征,PCA 就够了,不必背这个额外约束。选主题数 k 时也没有银弹,一般靠领域常识先定个数,再看重构误差和结果是否讲得通。
对普通职场人来说,你在用户画像、评论归类、推荐理由这些地方看到的"主题占比""成分构成",背后很可能就是这类方法。它解决的其实是同一个老问题:把一锅混在一起的东西,拆成几样能叫得出名字的配料。
具体实现与接口细节,以各库的官方页面为准。
