背景:Personal Rank
属于协同的一种,也是为了精准的match用户感兴趣的物品,是一种基于图的推荐算法。最近在具体落地这个算法方面遇到了一些时间性能方面的问题,所以整理一下,文中不仅会涉及算法介绍,同样会涉及具体代码,以及为了优化时间所做的工作。
personal rank算法介绍:普适推荐问题中的(user,item)对,可以表示为二分图G(V,E),两类顶点分别表示用户Vu,以及物品Vi,如下图1所示 用户A点击了物品abd,用户B点击了ac,C点击了be,D点击了cd。那么可以转化为右图,右图只标示了用户A和他点击物品的连击,其余类似。该算法的核心目的是衡量出对某一固定结点,其余结点的重要程度。从而得出推荐顺序。

图1
关于如何衡量某一个结点对于另一个结点的重要程度,物理解释如下:(1)两个顶点之间的路径数是否比较多(2)两个顶点之间路径的长度是否比较短。(3)连接两个顶点的路径是否较少经过出度较大的结点。那么基于随机游走的personal rank算法是如何阐述的呢? 假设我们要给用户A推荐物品。从顶点VA开始出发,以alpha的概率从A的出边中等概率的选择一条随机游走过去,到达下一个顶点,比方说顶点a,从下一个顶点a有(1-alpha)的概率回到起点A,或者alpha的概率继续等概率游走到到顶点a的出边中。多次循环后发现,各顶点的重要度收敛。递推公式如下图2所示:
personal rank算法介绍:普适推荐问题中的(user,item)对,可以表示为二分图G(V,E),两类顶点分别表示用户Vu,以及物品Vi,如下图1所示 用户A点击了物品abd,用户B点击了ac,C点击了be,D点击了cd。那么可以转化为右图,右图只标示了用户A和他点击物品的连击,其余类似。该算法的核心目的是衡量出对某一固定结点,其余结点的重要程度。从而得出推荐顺序。

图1
关于如何衡量某一个结点对于另一个结点的重要程度,物理解释如下:(1)两个顶点之间的路径数是否比较多(2)两个顶点之间路径的长度是否比较短。(3)连接两个顶点的路径是否较少经过出度较大的结点。那么基于随机游走的personal rank算法是如何阐述的呢? 假设我们要给用户A推荐物品。从顶点VA开始出发,以alpha的概率从A的出边中等概率的选择一条随机游走过去,到达下一个顶点,比方说顶点a,从下一个顶点a有(1-alpha)的概率回到起点A,或者alpha的概率继续等概率游走到到顶点a的出边中。多次循环后发现,各顶点的重要度收敛。递推公式如下图2所示:




