白话NMF(Non-negative Matrix Factorization)——Matlab 实现

本文介绍了非负矩阵分解(NMF)的基本概念,包括两种常见的优化方法:加法优化和乘法优化,并提供了Matlab实现代码。通过对原始矩阵的非负约束,NMF在推荐系统、数据挖掘等领域有广泛应用。
摘要由CSDN通过智能技术生成

NMF——非负矩阵分解。如果你事先了解PMF[概率矩阵分解]的话,那么其实只要在PMF的基础上多加上一点,就是NMF了。

 

方法一: 

在PMF中使用SGD【随机梯度下降】进行优化时,使用如下的迭代公式:

 

 

 

其中P、Q分别代表原始矩阵R的两个维度的隐含矩阵,在推荐应用中,一般讲P看做用户矩阵、Q看做物品矩阵。

 

从公式中不难看出,无论P矩阵还是Q矩阵都会出现负值的情况,上述公式并未对P、Q矩阵的值做任何限制。

 

在应用中,有时候需要分解出来的矩阵中不存在小于0的值,也即要求所有值非负。

 

怎么做到呢?其实很简单,在上述两个迭代公式中加个约束即可,如下公式:

 

 

很简单,是吧。这其实是非负矩阵分解实现中最常用的一种。

 

方法二:

 

在很早之前,大概是2001年的样子,Daniel D. Lee and H. Sebastian Seung.这两个家伙写了篇文章:

《Algorithms for non-negative matrix factorization》,其中讲了另外一种关于求解非负矩阵分解的方法,我们叫它迭代相乘法。

 

怎么做的呢?其实也很简单。

 

上一个方法中是用加减法来调整P、Q矩阵,既然加减不能保证非负,那用乘

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值