IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    [原]pagerank以及个性化的pagerank算法

    linger2012liu发表于 2015-07-21 20:11:40
    love 0

    pagerank以及个性化的pagerank算法


    pagerank最开始是Google提出来用来衡量网页重要度排行的算法。

    她的思想是基于网页之间互相的链接作为加权投票。假如网页a指向b,

    那么网页b的重要程度受网页a的影响,a越重要,则b就越重要。假如网页c也指向b,

    但是c跟a对比,c指向其他网页的数量(出度)较少,那么c对b的贡献程度要大于a对b。

     

     

    下面是网页i的重要程度的公式,其中d是一个概率,in(i)表示所有指向网页i的网页。


    这公式的思想是模拟一个随机冲浪者的浏览网页的行为,公式左边部分表示该冲浪者以(1-d)/N的概率从浏览器输入url的方式访问到网页i,公式右边部分表示从其他指向网页i的网页跳转过来的。多次迭代后,所有网页的重要性值会收敛。

     

    用概率转移的方式表示,公式如下

     

    一次迭代的计算的例子如下:

     

    其中概率转移矩阵M,

    每一列表示网页j的出度,每列的和加起来是1。

    每一行表示网页i的入度。

     

     

    个性化的pagerank

     

     

    个性化的pagerank的目标是要计算所有节点相对于用户u的相关度。从用户u对应的节点开始游走,每到一个节点都以1-d的概率停止游走并从u重新开始,或者以d的概率继续游走,从当前节点指向的节点中按照均匀分布随机选择一个节点往下游走。这样经过很多轮游走之后,每个顶点被访问到的概率也会收敛趋于稳定,这个时候我们就可以用概率来进行排名了。

     

    从公式可以看出,个性化的pagerank跟传统pagerank不同的是,每次重新游走时,总是从用户u节点开始。另外,每个节点权重初始化时,个性化的pagerank是这样子的,假如对用户u推荐,则对用户u节点初始化为1,其他节点都初始化为0。

     

     

    下面是我分别用c++和java实现的个性化pagerank算法的源码

    https://github.com/linger2012/personal-rank-implemented-by-CPP

    https://github.com/linger2012/recommendation-algorithm-implemented-by-java/tree/master/src/personalrank

     

    关于如何加速个性化pagerank,项亮的《推荐系统实战》有提到,用矩阵运算的方式来做。

    这方面我还在学习研究阶段,欢迎来探讨。


     参考资料:

    http://blog.csdn.net/harryhuang1990/article/details/10048383

    http://www.cnblogs.com/fengfenggirl/p/pagerank-introduction.html

    《Topic-sensitive pagerank》

     

    本文作者:linger

    本文链接:http://blog.csdn.net/lingerlanlan/article/details/46991167




沪ICP备19023445号-2号
友情链接