zoukankan      html  css  js  c++  java
  • 物理学背景下的推荐与协同过滤的理解

    物理学背景的推荐算法与协同过滤

    随着个性化推荐技术的发展,各种各样的推荐算法也竞相参与到这片新兴应用领域中进行开荒,一时间百花齐放,其中就有一些基于物理学背景的算法参与其中,本文阐述的是这篇文章在推荐算法上的主要内容,及其与传统的协同过滤算法在形式上的对比。

    文章原名为《Solving the apparent diversity-accuracy dilemma of recommender systems》,要解决的正是当下推荐系统领域炙手可热的问题:怎样平衡推荐的精确度与多样性。作者的专业背景是物理学,曾经做过复杂系统、复杂网络方面的研究,近年来在推荐领域发表过好几篇文章,这一篇发表在著名杂志PNAS上,可以说是对之前工作的一个大汇总。

    该文章大致的思路就是把推荐系统中用户与待推荐对象的关系类比为二分图,借用原来研究复杂网络动力系统的一些概念与方法来研究推荐领域中的问题。关于这样的解决思路,我一年多前曾经就作者的另一篇文章作过一些阐述,欲了解细节的可以先看看,看完对主要思想能有比较清晰的理解,本文将侧重于数学方面的推导与比较,不再就细节上过多阐述。

    下图是我在稿纸上的推导过程,后面我结合着每一步的推导过程进行说明,每一步以标号标示。

    0、这里总括一下最终的推荐方式,等式右边的f是一个用户的收藏向量,取值为0-1,W是一个转移矩阵,等式左边为最终获得的推荐向量,刨除用户已经收藏的对象,其余的按值排序取出前L个,即可视为对该用户的推荐。所以,现在的问题就是,怎么得到W这个矩阵。

    1、这里定义用户收藏矩阵为A,维度为u*o,行表示用户,列表示对象,依据文中的说法,这里只考虑取值为0-1的情况,取值为1则表示对应位置的用户收藏了相应的对象,0则不然。

    2、这里定义了用户与对象的“度”向量,即对A矩阵的行与列求和。

    3、对收藏矩阵作行归一化,在本文,矩阵除以向量的统一意义为该矩阵每一列与该向量对位相除。

    4、文章中提出了两种算法,ProbS与HeatS,ProbS比较好理解,算法的详细解释见我之前的文章,这里仅列出其迭代公式。拉丁字母的下标用以表示对象,英文字母的下标用以表示用户。这个迭代式的涵义是两对象之间的影响,或者说是贡献度。

    5、经过一番变换之后,可以得到ProbS算法的转移矩阵,这个正是我们在0步里提到的要寻找的转移矩阵。

    6、HeatS算法的迭代式与ProbS的类似,只是最后要除的分母不同,从转移矩阵来看,则仅仅只是转置关系。

    7、从第0步的对每个用户的推荐过程,我们可以得到对所有用户的推荐公式,其中W可为第5或第6步算出来的转移矩阵。

    8、再回顾一下我们熟悉item-based协同过滤(CF)的推荐过程,从矩阵的角度来描述,就是如8式所示,其中mod(A)表示A矩阵各列的模所组成的向量。形式与上面的算法类似,但相乘的顺序不一样,而且这里的W表示的是对象相似度矩阵。

    9、这一番变换可以生成跟CF类似的推荐形式,WH就可以看作是CF中的相似度矩阵了(但计算方法不一样)。殊途同归,两种算法就统一到一种形式上去了。但不要试图用数学的方式来解释这个式子,我尝试过,无论如何解释不通,只能从物理的角度来进行描述。原文章中对此没有作数学分析,只是从实验角度来论证算法的有效性。

    10、第10步是该文的最终算法,即混合之前的两种算法,得到一个并不太会增加计算消耗的混合推荐算法。跟上面两种算法的介绍类似,我在把迭代式列出来后,又把它转换成矢量运算的形式,即最终结果是两个矩阵的点乘。

    除了上述我介绍的算法外,该文还有一部分重要的内容是定义两个精确度指标、两个多样性指标,并在三个数据集上对几种推荐算法的效果进行了对比,结论是:ProbS算法在精确度上表现更好,HeatS算法在多样性上表现更好,而混合式的算法能得到精确度与多样性两全其美的效果,有兴趣的读者可以读读原文。

    对于这篇文章,我存留有几点疑问:

    1、初始资源(即用户收藏矩阵A)除了0-1,是否可以是别的值,这样rating数据集也可以引入进来?

    2、W矩阵为什么不可以多步迭代生成?原文中用资源分配来描述W矩阵的转移作用,从动力学的角度来说,这样的迭代分配可以无限进行下去直到达到一个稳态,但为什么只迭代一次就用作推荐计算的转换矩阵(即对用户收藏矩阵的加权变换),这是何道理?

    3、数学上的不可解释性。正如第9步所得到的结果,该算法与CF有异曲同工之处,但CF算法可以从余弦距离的角度加以解释,而你无法从推荐表达式上解释为什么ProbS算法在精确度上表现更好,而HeatS在多样上表现更好。

    对以上前两点文中没有作过多的解释,而从第三点来说由于整个推荐算法的有效性并不能从数学上得到解释,而只是通过实验对比结果进行说明,所以对于这两点疑虑,我也只能从实验结果上进行猜测:即以上两步的尝试会导致实验结果变坏。

    更新:我实现了两个算法,并做了实验,从简单的观测结果来看,两种算法的TopK推荐结果都差不多,accuracy还可以,diversity没有体现出来。可以到此为止了。

  • 相关阅读:
    用DllImport引用的外部DLL文件如何通过clickonce发布
    关于Response.Redirect 端口不一致的跳转
    c# 使用递归 循环遍历导航树结构 并解析
    .net判断用户使用的是移动设备还是PC
    Lucene.net 从创建索引到搜索的代码范例
    C#敏感关键词过滤代码
    对SQL Server SQL语句进行优化的10个原则
    SQL Server表分区
    asp.net 真正实现完全跨域单点登录
    ASP.NET性能优化小结
  • 原文地址:https://www.cnblogs.com/Lxiaojiang/p/3716484.html
Copyright © 2011-2022 走看看