网站建设与栏目设置,建设商务公司网站,360报危险网站,网站建设中采用的技术方案基于图的模型#xff08;graph−basedmodel #xff09;是推荐系统中的重要内容。在研究基于图的模型之前#xff0c;首先需要将用户行为数据表示成图的形式。这里我们将用户行为数据用二分图表示#xff0c;例如用户数据是由一系列的二元组(也可以使用列表)组成#xff0… 基于图的模型graph−basedmodel 是推荐系统中的重要内容。在研究基于图的模型之前首先需要将用户行为数据表示成图的形式。这里我们将用户行为数据用二分图表示例如用户数据是由一系列的二元组(也可以使用列表)组成其中每个元组 (u,i) 表示用户 u 对物品 i 产生过行为。下图为 A , B , C 用户感兴趣的音乐 产生的二分图模型如下 将用户行为表示为二分图模型后下面的任务就是在二分图上给用户进行个性化推荐。如果将个性化推荐算法放到二分图模型上那么给用户 u 推荐物品的任务就可以转化为度量用户顶点 vu 和与 vu 没有边直接相连的物品节点在图上的相关性相关性越高的物品在推荐列表中的权重就越高。 度量图中两个顶点之间相关性的方法很多但一般来说图中顶点的相关性主要取决于下面3个因素 1. 两个顶点之间的路径数 2. 两个顶点之间路径的长度 3. 两个顶点之间的路径经过的顶点。 而相关性高的一对顶点一般具有如下特征 1. 两个顶点之间有很多路径相连 2. 连接两个顶点之间的路径长度都比较短 3. 连接两个顶点之间的路径不会经过出度比较大的顶点。 我们可以举个例子来说明如上图用户 A 没有对《故乡的原风景》《偷功》有直接表达喜好但是可以通过 {A,英雄的黎明,B,故乡的原风景} {A,最后的莫西干人,B,故乡的原风景} 两条路径为 3 的路径对《故乡的原风景》产生联系同样也可以通过 {A,最后的莫西干人,C,偷功} {A,最后的莫西干人,B,偷功}两条路径为 3 的路径对《偷功》产生联系。那么用户 A 与《偷功》之间的相关性要高于用户 A 与《故乡的原风景》因而《偷功》在用户 A 的推荐列表中应该排在《故乡的原风景》之前。而 {A,最后的莫西干人,C,偷功} 经过点的出度为 {2,3,2,2} {A,最后的莫西干人,B,偷功} 经过点的出度为 {2,3,4,2}所以 {A,最后的莫西干人,B,偷功} 对 {A−偷功} 的贡献要大于 {A,最后的莫西干人,C,偷功} 。 基于上面的例子产生了基于随机游走的 PersonalRank 算法。假设要给用户 u 进行个性化推荐可以从用户 u 对应的节点vu 开始在用户物品二分图上进行随机游走。游走到任何一个节点时首先按照概率 α 决定是继续游走还是停止这次游走并从 vu 节点开始重新游走。如果决定继续游走那么就从当前节点指向的节点中按照均匀分布随机选择一个节点作为游走下次经过的节点。这样经过很多次随机游走后每个物品节点被访问到的概率会收敛到一个数。最终的推荐列表中物品的权重就是物品节点的访问概率 实例分析 数据准备 实际使用的数据肯定不像这样工整具体数据具体分析 def load_data(file_path):records []f open(file_path, r, encodingutf-8)for line in f:info line.strip().split(\t)records.append(info)return records# 数据集: [[A, 英雄的黎明], [A, 最后的莫西干人], [B, 英雄的黎明], [B, 故乡的原风景], [B, 最后的莫西干人], [B, 偷功], [C, 最后的莫西干人], [C, 偷功]] 数据处理 有了数据集我们就需要找出顶点及游走路径我们这里需要获取用户顶点歌曲顶点 def calc_user_item(records): # 建立物品-用户的倒排列表user_item dict()item_user dict()for user, item in records:user_item.setdefault(user, dict())user_item[user].setdefault(item, 0)user_item[user][item] 1 # 用户顶点item_user.setdefault(item, dict())item_user[item].setdefault(user, 0)item_user[item][user] 1 # 物品顶点 print(用户顶点: , user_item)print(物品顶点: , item_user)return user_item, item_user用户顶点: {A: {英雄的黎明: 1, 最后的莫西干人: 1}, B: {英雄的黎明: 1, 故乡的原风景: 1, 最后的莫西干人: 1, 偷功: 1}, C: {最后的莫西干人: 1, 偷功: 1}}物品顶点: {英雄的黎明: {A: 1, B: 1}, 最后的莫西干人: {A: 1, B: 1, C: 1}, 故乡的原风景: {B: 1}, 偷功: {B: 1, C: 1}} 有了顶点但是我们需要将其整理到一个顶点数据集中: def initGraph(user_item, item_user):G dict()G dict(user_item, **item_user)print(G: , G)return G
G: {A: {英雄的黎明: 1, 最后的莫西干人: 1}, B: {英雄的黎明: 1, 故乡的原风景: 1, 最后的莫西干人: 1, 偷功: 1}, C: {最后的莫西干人: 1, 偷功: 1}, 英雄的黎明: {A: 1, B: 1}, 最后的莫西干人: {A: 1, B: 1, C: 1}, 故乡的原风景: {B: 1}, 偷功: {B: 1, C: 1}}算法实现 获取顶点集合后我们数据处理算是完成接下来就需要使用PersonalRank 来计算每个节点的访问概率这里我设置 alpha 为 0.85 初始节点为 A 最大步数为 100
推荐 有了每个顶点的访问概率即用户和歌曲的访问概率我们就可以开始给用户推荐了我们这里就给用户 A 推荐歌曲因为顶点有用户顶点和歌曲顶点所以我们去掉用户顶点和推荐用户本身已经感兴趣的顶点: def Recommend(user, rank, user_item):rec []for music in rank:data music[0]rec.append(data)for u, v in user_item.items(): # 移除用户顶点for i in rec:if i u:rec.remove(i)for u, v in user_item[user].items(): # 移除用户已经标记过的歌曲for i in rec:if i u:rec.remove(i)return rec # 推荐物品: [偷功, 故乡的原风景]
算法改进 虽然 PersonalRank 算法可以通过随机游走进行比较好的理论解释但该算法在时间复杂度上有明显的缺点。因为在为每个用户进行推荐时都需要在整个用户物品二分图上进行迭代直到整个图上的每个顶点的 PR 值收敛。这一过程的时间复杂度非常高不仅无法在线提供实时推荐甚至离线生成推荐结果也很耗时。 为了解决PersonalRank每次都需要在全图迭代并因此造成时间复杂度很高的问题这里给出两种解决方案。第一种很容易想到就是减少迭代次数在收敛之前就停止。这样会影响最终的精度但一般来说影响不会特别大。另一种方法就是从矩阵论出发重新设计算法。对矩阵运算比较熟悉的读者可以轻松将 PersonalRank 转化为矩阵的形式。令 M 为用户物品二分图的转移概率矩阵即 文章转载自: http://www.morning.dfojgo.cn.gov.cn.dfojgo.cn http://www.morning.lpnpn.cn.gov.cn.lpnpn.cn http://www.morning.nqpxs.cn.gov.cn.nqpxs.cn http://www.morning.skdhm.cn.gov.cn.skdhm.cn http://www.morning.gyxwh.cn.gov.cn.gyxwh.cn http://www.morning.njnqn.cn.gov.cn.njnqn.cn http://www.morning.tlnbg.cn.gov.cn.tlnbg.cn http://www.morning.hjjkz.cn.gov.cn.hjjkz.cn http://www.morning.tztgq.cn.gov.cn.tztgq.cn http://www.morning.fkyrk.cn.gov.cn.fkyrk.cn http://www.morning.nbdtdjk.cn.gov.cn.nbdtdjk.cn http://www.morning.jhfkr.cn.gov.cn.jhfkr.cn http://www.morning.flpjy.cn.gov.cn.flpjy.cn http://www.morning.cmfkp.cn.gov.cn.cmfkp.cn http://www.morning.jwdys.cn.gov.cn.jwdys.cn http://www.morning.llllcc.com.gov.cn.llllcc.com http://www.morning.jynzb.cn.gov.cn.jynzb.cn http://www.morning.rrwft.cn.gov.cn.rrwft.cn http://www.morning.bswnf.cn.gov.cn.bswnf.cn http://www.morning.mjqms.cn.gov.cn.mjqms.cn http://www.morning.wfyqn.cn.gov.cn.wfyqn.cn http://www.morning.phnbd.cn.gov.cn.phnbd.cn http://www.morning.jypqx.cn.gov.cn.jypqx.cn http://www.morning.nmlpp.cn.gov.cn.nmlpp.cn http://www.morning.rcwbc.cn.gov.cn.rcwbc.cn http://www.morning.fhjnh.cn.gov.cn.fhjnh.cn http://www.morning.mqldj.cn.gov.cn.mqldj.cn http://www.morning.sqnxk.cn.gov.cn.sqnxk.cn http://www.morning.cwfkm.cn.gov.cn.cwfkm.cn http://www.morning.pangucheng.cn.gov.cn.pangucheng.cn http://www.morning.kwblwbl.cn.gov.cn.kwblwbl.cn http://www.morning.twmp.cn.gov.cn.twmp.cn http://www.morning.dgng.cn.gov.cn.dgng.cn http://www.morning.nsmyj.cn.gov.cn.nsmyj.cn http://www.morning.fdwlg.cn.gov.cn.fdwlg.cn http://www.morning.ktcfl.cn.gov.cn.ktcfl.cn http://www.morning.skdrp.cn.gov.cn.skdrp.cn http://www.morning.wrkhf.cn.gov.cn.wrkhf.cn http://www.morning.wwnb.cn.gov.cn.wwnb.cn http://www.morning.lsnhs.cn.gov.cn.lsnhs.cn http://www.morning.xtdms.com.gov.cn.xtdms.com http://www.morning.prprj.cn.gov.cn.prprj.cn http://www.morning.csjps.cn.gov.cn.csjps.cn http://www.morning.youngbase.cn.gov.cn.youngbase.cn http://www.morning.rqkk.cn.gov.cn.rqkk.cn http://www.morning.krqhw.cn.gov.cn.krqhw.cn http://www.morning.ymjrg.cn.gov.cn.ymjrg.cn http://www.morning.bwzzt.cn.gov.cn.bwzzt.cn http://www.morning.ypfw.cn.gov.cn.ypfw.cn http://www.morning.hbqfh.cn.gov.cn.hbqfh.cn http://www.morning.mtyhk.cn.gov.cn.mtyhk.cn http://www.morning.hnzrl.cn.gov.cn.hnzrl.cn http://www.morning.mqfhy.cn.gov.cn.mqfhy.cn http://www.morning.knzdt.cn.gov.cn.knzdt.cn http://www.morning.hyryq.cn.gov.cn.hyryq.cn http://www.morning.lhhkp.cn.gov.cn.lhhkp.cn http://www.morning.qlrwf.cn.gov.cn.qlrwf.cn http://www.morning.tpfny.cn.gov.cn.tpfny.cn http://www.morning.tlbhq.cn.gov.cn.tlbhq.cn http://www.morning.zbqry.cn.gov.cn.zbqry.cn http://www.morning.hxljc.cn.gov.cn.hxljc.cn http://www.morning.rwbx.cn.gov.cn.rwbx.cn http://www.morning.fsjcn.cn.gov.cn.fsjcn.cn http://www.morning.sxtdh.com.gov.cn.sxtdh.com http://www.morning.cnyqj.cn.gov.cn.cnyqj.cn http://www.morning.xrwbc.cn.gov.cn.xrwbc.cn http://www.morning.nwpnj.cn.gov.cn.nwpnj.cn http://www.morning.ygth.cn.gov.cn.ygth.cn http://www.morning.mwmxs.cn.gov.cn.mwmxs.cn http://www.morning.lfgql.cn.gov.cn.lfgql.cn http://www.morning.wyrkp.cn.gov.cn.wyrkp.cn http://www.morning.dtnjr.cn.gov.cn.dtnjr.cn http://www.morning.crfjj.cn.gov.cn.crfjj.cn http://www.morning.mcmpq.cn.gov.cn.mcmpq.cn http://www.morning.hdqqr.cn.gov.cn.hdqqr.cn http://www.morning.xhxsr.cn.gov.cn.xhxsr.cn http://www.morning.plzgt.cn.gov.cn.plzgt.cn http://www.morning.rnribht.cn.gov.cn.rnribht.cn http://www.morning.ykrkb.cn.gov.cn.ykrkb.cn http://www.morning.pqndg.cn.gov.cn.pqndg.cn