大家好,又见面了,我是你们的朋友全栈君。
在例如Netflix或MovieLens这样的推荐系统中,有用户和电影两个集合。给出每个用户对部分电影的打分,希望预测该用户对其他没看过电影的打分值,这样可以根据打分值为其做出推荐。
NMF(non-negative matrix factorization)的基本思想可以简单描述为:对于任意给定的一个非负矩阵A,NMF算法能够寻找到一个非负矩阵U和一个非负矩阵V,将一个非负的矩阵分解为左右两个非负矩阵的乘积,将矩阵的维数进行降低,对大量的数据进行压缩。NMF属于一个无监督学习的算法,其中限制条件就是W和H中的所有元素都要大于0。
由于分解前后的矩阵中仅包含非负的元素,因此,原矩阵V中的某一列向量(如上图V中的虚线列向量)可以解释为对左矩阵W中所有列向量(基向量)的加权和,而权重系数为右矩阵V中对应列向量中的元素(权重)。
为什么分解的矩阵式非负的呢,网上流传一种很有利的解释就是非负为了使数据有效,负数对于数据是无效的。这种方法我个人认为有道理,但论文作者实际的解释是:
- 非负性会引发稀疏
- 非负性会使计算过程进入部分分解
总结
以上虽使用NMF实现了推荐算法,但是根据Netfix的CTO所说,NMF他们很少用来做推荐,用得更多的是SVD。对于矩阵分解的推荐算法常用的有SVD、ALS、NMF。对于那种更好和对于文本推荐系统来说很重要的一点是搞清楚各种方法的内在含义。
好啦,简单来说一下SVD、ALS、NMF三种算法在实际工程应用中的区别。
- 对于一些明确的数据使用SVD(例如用户对item 的评分)
- 对于隐含的数据使用ALS(例如 purchase history购买历史,watching habits浏览兴趣 and browsing activity活跃记录等)
- NMF用于聚类,对聚类的结果进行特征提取。在上面的实践当中就是使用了聚类的方式对不同的用户和物品进行特征提取,刚好特征可以看成是推荐间的相似度,所以可以用来作为推荐算法。但是并不推荐这样做,因为对比起SVD来说,NMF的精确率和召回率并不显著。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/149867.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...