欢迎光临散文网 会员登陆 & 注册

python-nmf实现

2022-12-03 13:18 作者:021usc  | 我要投稿

参考

http://nimfa.biolab.si/

简单实现

需要下载包nimfa,然后在python上完成非负矩阵分解。首先先生成一个稀疏矩阵

[[1 0 2 4]

 [0.5 0 1 2]

 [4 0 5 6]]

然后进行NMF非负矩阵分解,真实秩为2。代码如下:

结果如下:

NMF分解结果

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

下面试一下图片的分解恢复效果。

秩为10且未进行归一化后的效果图对比
秩为10且归一化后的效果对比
秩为40且归一化后的效果对比

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

度量LSNMF

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

LSNMF分解结果

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

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最重要的整数性质。提出并研究了罚函数分解和阈值分解两种分解方法。

秩为30,且归一化后的效果对比


python-nmf实现的评论 (共 条)

分享到微博请遵守国家法律