推荐算法之NMF算法

推荐算法之NMF算法在例如Netflix或MovieLens这样的推荐系统中,有用户和电影两个集合。给出每个用户对部分电影的打分,希望预测该用户对其他没看过电影的打分值,这样可以根据打分值为其做出推荐。NMF(non-negativematrixfactorization)的基本思想可以简单描述为:对于任意给定的一个非负矩阵A,NMF算法能够寻找到一个非负矩阵U和一个非负矩阵V,将一个非负的矩阵分解为左右…

大家好,又见面了,我是你们的朋友全栈君。

在例如Netflix或MovieLens这样的推荐系统中,有用户和电影两个集合。给出每个用户对部分电影的打分,希望预测该用户对其他没看过电影的打分值,这样可以根据打分值为其做出推荐。

推荐算法之NMF算法

NMF(non-negative matrix factorization)的基本思想可以简单描述为:对于任意给定的一个非负矩阵A,NMF算法能够寻找到一个非负矩阵U和一个非负矩阵V,将一个非负的矩阵分解为左右两个非负矩阵的乘积,将矩阵的维数进行降低,对大量的数据进行压缩。NMF属于一个无监督学习的算法,其中限制条件就是W和H中的所有元素都要大于0。

推荐算法之NMF算法

由于分解前后的矩阵中仅包含非负的元素,因此,原矩阵V中的某一列向量(如上图V中的虚线列向量)可以解释为对左矩阵W中所有列向量(基向量)的加权和,而权重系数为右矩阵V中对应列向量中的元素(权重)。 

推荐算法之NMF算法

为什么分解的矩阵式非负的呢,网上流传一种很有利的解释就是非负为了使数据有效,负数对于数据是无效的。这种方法我个人认为有道理,但论文作者实际的解释是:

  • 非负性会引发稀疏
  • 非负性会使计算过程进入部分分解

总结

以上虽使用NMF实现了推荐算法,但是根据Netfix的CTO所说,NMF他们很少用来做推荐,用得更多的是SVD。对于矩阵分解的推荐算法常用的有SVD、ALS、NMF。对于那种更好和对于文本推荐系统来说很重要的一点是搞清楚各种方法的内在含义。

好啦,简单来说一下SVD、ALS、NMF三种算法在实际工程应用中的区别。

  • 对于一些明确的数据使用SVD(例如用户对item 的评分)
  • 对于隐含的数据使用ALS(例如 purchase history购买历史,watching habits浏览兴趣 and browsing activity活跃记录等)
  • NMF用于聚类,对聚类的结果进行特征提取。在上面的实践当中就是使用了聚类的方式对不同的用户和物品进行特征提取,刚好特征可以看成是推荐间的相似度,所以可以用来作为推荐算法。但是并不推荐这样做,因为对比起SVD来说,NMF的精确率和召回率并不显著。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/149867.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • mysql怎么加载数据库_如何导入mysql数据库

    mysql怎么加载数据库_如何导入mysql数据库展开全部方法一:1、首先我e68a84e8a2ad3231313335323631343130323136353331333363393134们使用MySQL提供的命令行界面来导入数据库,确保自己的电脑中安装了MySQL数据库,我们可以通过命令行来确认是否安装了MySQL数据库,当然,第一步是打开Mysql的数据库服务,我们使用命令行来打开,2、启动MySQL后,我们找到需要用到的脚本文件,也就是…

    2022年7月27日
    9
  • 网络号 子网号 主机号「建议收藏」

    网络号 子网号 主机号「建议收藏」网络号子网号主机号第一个例子:已知 IP:192.169.20.50   子网掩码:255.255.255.224  求网络号 子网号 主机号。首先子网掩码255.255.255.224转换为二进制位255.255.255.224:11111111.11111111.11111111.11100000可以看到这个掩码的左边三节与C类默认掩码相同,只有第四节与C类默认掩码不 同,

    2022年6月24日
    29
  • Altium Designer挖空开槽填坑之board cutout[通俗易懂]

    Altium Designer挖空开槽填坑之board cutout[通俗易懂]这种方法开不了槽!!!!博客原文链接:https://blog.csdn.net/hnjztyx/article/details/83021813为了防止PCB板上高压零件与附近的低压零件打火放点,需要在这两者之间开槽。在使用AltiumDesigner设计PCB时,想在板子上开一个槽或者挖一个孔该如何操作,是使用Keep-Out层还是Mechanical层,其实这两种在实际操作中都有人用,但是两种都不规范,存在隐患。正确的做法是使用“板子切割”(boardcutout)方法。具体方法就是在任意

    2022年9月24日
    3
  • content-type 的所有可选项

    content-type 的所有可选项

    2021年4月24日
    155
  • java策略模式例子_java 登录场景 策略模式

    java策略模式例子_java 登录场景 策略模式Java的策略模式中体现了两个非常基本面向对象的原则-封装变化的概念-编程中使用接口,而不是对接口的实现策略模式的定义定义一组算法,将每个算法都封装起来,并且使它们之间可以互换。策略模式使这些算法在客户端调用它们的时候能够互不影响的变化策略模式的组成抽象策略角色–策略类,通常由一个接口或者抽象类实现具体策略角色–包装了相

    2025年9月7日
    8
  • StringTokenizer使用讲解

    StringTokenizer使用讲解StringTokenizer是一个用来分隔String的应用类,相当于VB的split函数。一.构造函数。1.StringTokenizer(Stringstr):构造一个用来解析str的StringTokenizer对象。java默认的分隔符是“空格”、“制表符(‘\t’)”、“换行符(‘\n’)”、“回车符(‘\r’)”。2.StringTokenizer(Stri

    2022年8月11日
    7

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号