python-nmf实现
参考
http://nimfa.biolab.si/

简单实现
需要下载包nimfa,然后在python上完成非负矩阵分解。首先先生成一个稀疏矩阵
[[1 0 2 4]
[0.5 0 1 2]
[4 0 5 6]]
然后进行NMF非负矩阵分解,真实秩为2。代码如下:
结果如下:

可以看出,分解前后矩阵的欧式矩阵误差为1.5,可以看出有些位置的元素能够很好的恢复,有些位置的元素,分解恢复后误差很大,比如第一个位置的元素。
下面试一下图片的分解恢复效果。



可以看出,归一化后能够很好适用于图片数据,且能较好的恢复出原始图片。

度量LSNMF
LSNMF - Alternating nonnegative least squares matrix factorization using projected gradient method for subproblems [Lin2007]

可以看出,该方法可以准确恢复原始矩阵。

BMF矩阵分解
BMF - Binary matrix factorization [Zhang2007]。使用默认参数、多次运行和用于共识矩阵计算的因子跟踪的 BMF。https://ranger.uta.edu/~chqding/papers/icdm07-binary.pdf。论文将标准的NMF推广到BMF:给定一个二进制输入矩阵X,我们想把X分解成两个满足X≈WH的二进制矩阵W,H。 BMF保留了X最重要的整数性质。提出并研究了罚函数分解和阈值分解两种分解方法。
