推荐系统学习之概率算法及其增量算法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/axuanwu/article/details/50573556

0.絮

  1. 前些阵子了参加了一个天池的推荐比赛,做了一些,想了很多,因此有了下文。顺便了解过一点markdown,发现还挺好的。这次用用看。
  2. 不久之前在使用链表的时候,遇到一个困难:怎么让有序链表的有序产生应有的提升查询效率的作用。答案:skip_link

1.推荐算法与概率

谈到推荐吧,我知道的也很少,总括的这种就不吹了。第一个和概率有关的推荐算法应该是“关联规则挖掘”,就是置信度、支持度那个,我就不多言了,接下来一个的则是“Page Rank”,这一个方法曾经被广泛的用于搜索引擎的网页排名中,亦是本文将要关注的重点对象。而选择这一个too young too naive的算法出发的原因就是it is simple

2.环境设定

PR(PageRank)中,只有一个要素:网页,一种关系:网页与网页之间的Arrow(矢量:既有大小又有方向),而在推荐中涉及两个要素:U 用户I 物品,一种关系:用户作用(购买、浏览、评价)了物品的Arrow。为了能够尽情的抄袭 PR我们做以下两点假设:
- UI的地位是等价,我们可以尽情的把它们当做Page来处理。
- 每一个Array(作用)都是双向的 。
完全不了解PR的朋友可以点击脑补一下

2.1.转移矩阵 T

PR类似,转移矩阵T是这个方法中的关键部分。转移矩阵如下图所示:分为四部分。
矩阵图示

  • UU矩阵:用户到用户之间的转移矩阵,为0矩阵,m为用户个数。
  • UI矩阵 :用户到物品的转移矩阵,用户购买的物品取值为1/NumI(NumI为用户购买物品数量)。
  • IU矩阵 :物品到用户的转移矩阵,购买过该物品的用户位置取值1/NumU(NumU为该物品的购买用户数)。
  • II矩阵 :商品到商品的转移矩阵,为0矩阵,n为物品个数。
    整体是一个(m+n)的方阵,前面m个是用户的部分,后面n个为商品的部分。

2.2得分矩阵 S

T矩阵类似也分为4个部分:

  • UU矩阵:向用户到用户的推荐得分。
  • UI矩阵 :向用户推荐物品的得分矩阵。
  • IU矩阵 :向物品推荐用户的得分矩阵。
  • II矩阵 :向商品推荐商品的得分矩阵。
  • 整体是一个(m+n)的方阵,初始得分记做S0,为单位矩阵

始终满足以下等式:

  1. Sn+1=SnT
  2. Sn=S0Tn

不难发现

  1. 当n为偶数时,Sn中的紫色块为0矩阵,可以解释为同类元素之间的相似性(包括物品相似性和用户相似性)。
  2. 当n为奇数时,Sn中的非紫色块为0矩阵,可以解释为不同类元素之间的相似性(向用户推荐物品得分以及向物品推荐用户得分)。

3.该方法的简单性质

3.1Sn 可计算

Sn=S0Tn敬爱的数学老师曾经告诉我们一个技巧:T=PAP1而这一过程称为矩阵对角化,如果使用矩阵求逆的方法来求A、P矩阵,其算法复杂度主要取决与这个求逆运算,而矩阵求逆运算的复杂度为O(n3)(考虑到Coppermith_Winograd算法对矩阵乘法的简化,其复杂度应该可以降低到O(n2.37)左右)。而Sn=S0Tn=S0PAnP1。其中A为对角矩阵,其An容易计算,复杂度为O(n)。因此最终复杂度由矩阵的求逆运算决定。

3.2增量 ΔSn 可描述

增量的描述
为了将说明过程简化一些,这里取n=3来说明。
我们知道S3=S0T3;由于经过一段时间后,TT0变化为T1; 即T1=ΔT+T0
因此有:

  • ΔS3=S0ΔT+T03S0T3
    S0ΔTTT+TΔTT+TTΔT(当ΔT较小时,忽略ΔT的高阶项)

ΔS3ΔSn 推广的体力活我就省略了,诸位记住矩阵对角化可以简化计算就行了,下面简要讨论计算增量。

增量的计算
当用户购买商品个数由N1增加为N2时,T矩阵会发生两个变化:

  1. T矩阵对应用户行的N1个非空元素,值由1/N1变为1/N2,变化量为N2N1N2N1
  2. T矩阵对应用户行增加N2-N1个非零元素,值为1/N2。

由于上述1的原因所以ΔT矩阵并不是特别稀疏,当计算TΔTT时;ΔS3的计算并不比S3计算起来简单很多。但是如果我们认为N2N1N2N1并不是一个值得考虑的小量。ΔT将是一个非常稀疏,元素个数则是新增加的用户商品关系数,计算也会相对简单。

4.用户与商品的非等价地位

用户与商品的类同是否合理呢?当我第一次接触推荐系统的时候,这个问题就一直困扰我了。这儿再次提出它,当然还包括我对它的回答。简单的推荐系统中只有一种数据:用户选择了商品,也就是只有一种方向,为了自由的抄袭 PR我们假设了商品选择了用户的这种关系。假如承认商品和用户之间的选择与被选择关系,那么原有的购买关系就必须是不可逆的。那么问题就来了:T矩阵怎么构造才能够让这个推荐过程得以持续?

这个问题在最近才想到了一个回答,而回答的关键是贝叶斯。T矩阵实际是一个概率转移矩阵,其中UU块II块都为零,UI块记录的是根据历史统计的的用户购买任意商品的概率。”IU块”记录的内容应该为:当商品被购买发生时,是每一个用户购买了该商品的概率。根据贝叶斯公式UI块记录的每一个用户购买任意商品的概率可以计算得到IU块的内容。至于放弃从物品的角度来直接统计IU块内容的原因,我也没想通透——也许上面的做法也不是最正确的做法,只是离正确更近一步。

5.小结

基于统计概率的方法,可谓是有坚实的数学基石,本文一直没有讨论它的正确性(在基于邻域的推荐方法中应该属于前列)以及拓展性(时间动态、用户标签商品标签等多数据源引入等),期望感兴趣的朋友可以结合实例一起完善这一块内容。

推荐系统这个话题被讨论的很多,各种乱七八糟的东西也是五花八门,简单可分为两种:

  1. 正向思维方法:先发现(假设)事物符合某个理论(假设的不好就是谬论)规律从而得到H函数,然后根据X的值得到Y=H(X)的对应输出结果。
  2. 逆向思维方法:先有很大的训练集合(也就是X和Y),然后不停的修改函数H,得到一个合适的H,然后根据X的值得到Y=H(X)的对应输出结果。

这让我想起了一个问题:真理是否存在,真理是否唯一。我相信有最正确(而不是最合适)的算法存在,而同时希望它能被简单的描述。

We read the world wrong and say that it deceives us. 理性参阅

展开阅读全文

没有更多推荐了,返回首页