Based Graph 推荐算法学习

             Pagerank算法是和query无关的,计算 top sensitive pagerank值,可以用叠代的方法,即 f(t+1) = alpha * P*f(t) +(1-alpha)*y 

上面的f最终收敛于最终计算可以直接计算下面的公式即可得到近似的迭代结果,效果和叠代基本一致,相差一个倍数关系 不影响最终的Rank结果。

f = (I-alpha* P的转置)的逆 *y    其中P为各自的转移概率矩阵

上述公式对于多次的query y 可以进行矩阵运算。类似于 A=W\Y

           Topicsensitive pagerank算法的目的是求出每一个用户的query计算每一个item的打分值,从而进行TopN 推荐,该算法也就是《推荐系统实战》这本书上的所谓的Personnal Pagerank算法,其实书中的说法有些小问题。我在真正实现中主要分为以下三个步骤,作一个简单的介绍。

1、利用java程序对train数据集生成2个txt文件,分别是:weightmatrix.txt,为(userNum+itemNum)*( userNum+itemNum+1)矩阵,第一列存usrid+itemid,中间用逗号隔开。ymatrix.txt为userNum*( userNum+itemNum+1),第一列存userid。

(1)对user-song建立无向二分图,包含user顶点和song顶点两种,把结果保存成矩阵,矩阵第i,j位置表示object i到j有一条边,值为1,没有边的为0

对行求和对每行元素进行normalize(每一个元素除以每一行的和),保证每行和为1,矩阵叠代过程中收敛性的需要。

(2) weightmatrix.txt为1中的矩阵,第一列统一存放这行元素的id,seedid或者userid要有所区分ymatrix.txt每行 为这个user对矩阵对应这个元素的初始值,比如用户唱歌的歌曲就是1,用户本身也为1,其他为0;第一列统一存user id。

2、利用Matlab计算 topic-sensitive-pagerank值,跑出对每一个Query的打分数值(userNum*(userNum+itemNum)),同时去掉区分为userid的的结果,生成finalPagerank值,为userNum*itemNum矩阵。这一过程可以通过pagerank叠代志收敛完成,但是可以用矩阵求逆完成,其结果和叠代结果一致。pageranks=(1-alpha)*(I-alpha*W')\yquery;

但是前提是保证矩阵满秩可以求逆,需要事先需要处理DeadEnd点(DeadEnd点是指此节点没有出度,则虚拟地加上所有其他的点到该节点有一条边),实际的实验过程中,我们发现,当该Graph很稀疏,图中出现很多Deadend点的时候,效果非常差,比CF要差很多。

3、对结果进行MAP,NDCG,F1这几个evaluation metric计算。

参考:

http://blog.csdn.net/litoupu/article/details/19337357

http://blog.codinglabs.org/articles/intro-to-pagerank.html

http://hi.baidu.com/tqode3c/item/3bf4ab1e66937b443b176e5f?qq-pf-to=pcqq.c2c

Zhou, D., Weston, J.,Gretton, A., Bousquet, O., & Schölkopf, B. (2003, June). Ranking on datamanifolds. In NIPS (Vol. 3).

Haveliwala, T. H. (2002,May). Topic-sensitive pagerank. In Proceedings of the 11th internationalconference on World Wide Web (pp. 517-526). ACM.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值