转载自: 知乎
1. 公式
非负矩阵分解 即将一个非负的大矩阵(V)分解成两个小的非负矩阵(W和H)。
W
H
≈
V
WH≈V
WH≈V
Vn*m ,Wn*k ,Hk*m 矩阵 ,其中(n+m)r <<nm。
可以参考: Learning the parts of objects by non-negative matrix factorization Daniel D. Lee* & H. Sebastian Seung*†.
来自这篇论文中的效果对比如下:
原始矩阵V的列向量是对矩阵W中的所有列向量的加权和,而权重系数就是矩阵H,故矩阵W被称为基矩阵,H为系数矩阵。
VQ的约束是要求H的每一列只有一个元素为1,其它为0,因此相当于将m个数据归纳成了k个代表,原数据映射过去就是取k个基当中与原向量距离最小的来重新表示。所以VQ的基都是一张张完整正常的脸,它们都是最具代表性的脸。
PCA大家用得比较多,就是求一组标准正交基,第一个基的方向取原数据方差最大的方向,然后第二个基在与第一个基正交的所有方向里再取方差最大的,这样在跟前面的基都正交的方向上一直取到k个基。所以PCA的基没有直观的物理意义,而且W和H里面的元素都是可正可负的,这就意味着还原时是用W的基加加减减得到的。
NMF因为约束了非负,所以只准把基相加,不能相减,这就意味着基与基是通过拼接组合来还原原象的。所以我们可以看到NMF的每个基实际上在表示着脸部的某个部件,这种性质在许多场景上就有了它特有的用处了。
分解方法
其是一个有界优化问题。
方法一:
按套路出牌的
方法二:
又叫乘法更新法,而且收敛比方法一快一些。
方法三:
参考: Projected Gradient Methods for Nonnegative Matrix Factorization.
这篇文章后来提出,方法比较全!