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矩阵,既然加减不能保证非负,那用乘除是不是就可以?
如果我们将P、Q都初始化成非负矩阵,然后每次迭代都乘以一个非负的数(可以理解为“相对梯度”),这样是不是也可以呢?
当然是的。
具体可以这么理解:
- 如果某次的预测值比实际值大了,那么P,Q矩阵对应的值乘以一个小于小于1,并且大于0的数,
- 如果某次预测的值比实际值小了,那么P,Q矩阵对应的值就乘以一个大于1的数。
不过至于具体要乘的数是多大,则样看在迭代过程中,预测值和实际值之间的差距(相对梯度)来定。
迭代更新公式如下: