Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >推荐算法——基于图的推荐算法PersonalRank算法

推荐算法——基于图的推荐算法PersonalRank算法

作者头像
felixzhao
发布于 2019-01-31 08:29:50
发布于 2019-01-31 08:29:50
2.8K00
代码可运行
举报
文章被收录于专栏:null的专栏null的专栏
运行总次数:0
代码可运行

一、推荐的概述

推荐系统中,通常是要向用户推荐商品,如在购物网站中,需要根据用户的历史购买行为,向用户推荐一些实际的商品;如在视频网站中,推荐的则是不同的视频;如在社交网站中,推荐的可能是用户等等,无论是真实的商品,还是视频,再或者是用户,都可以假设成一种物品,如下图所示:

(图片来自参考文献)

在上图中,左侧的A,B,C表示的是三个用户,右侧的a,b,c,d表示的是四个商品,中间的连线表示用户与商品之间有过行为,或者是购买或者是打分,推荐的目的是从商品列表中向指定的用户推荐用户未行为过的商品。

推荐的算法有很多,包括协同过滤(基于用户的协同过滤和基于物品的协同过滤)以及其他的一些基于模型的推荐算法。

二、基于图的推荐算法PersonalRank算法

1、PersonalRank算法简介

在协同过滤中,主要是将上述的用户和商品之间的关系表示成一个二维的矩阵(用户商品矩阵)。

而在基于图的推荐算法中,将上述的关系表示成二部图的形式,为用户A推荐商品,实际上就是计算用户A对所有商品的感兴趣程度。

PersonalRank算法对通过连接的边为每个节点打分,具体来讲,在PersonalRank算法中,不区分用户和商品,因此上述的计算用户A对所有的商品的感兴趣的程度就变成了对用户A计算各个节点B,C,a,b,c,d的重要程度。

PersonalRank算法的具体过程如下(对用户A来说):

  • 初始化: PR(A)=1,PR(B)=0,⋯,PR(d)=0 PR\left ( A \right )=1,PR\left ( B \right )=0,\cdots ,PR\left ( d \right )=0
  • 开始在图上游走,每次选择PR值不为00的节点开始,沿着边往前的概率为α\alpha ,停在当前点的概率为1−α1-\alpha :
    • 首先从A开始,从A到a和c的概率为0.50.5,则此时a和c的PR值为:PR(a)=PR(c)=α×PR(A)×0.5PR\left ( a \right )=PR\left ( c \right )=\alpha \times PR\left ( A \right )\times 0.5,A的PR值变成了1−α1-\alpha
    • 此时PR值不为0的节点为A,a,c,则此时从这三点出发,继续上述的过程,直到收敛为止。

由此可以得出以下的PR计算方法:

PR(v)=⎧⎩⎨⎪⎪α×∑v′∈in(v)PR(v′)|out(v′)|(1−α)+α×∑v′∈in(v)PR(v′)|out(v′)| if vvu if v=vu

PR\left ( v \right )=\begin{cases} \alpha \times \sum _{{v}'\in in\left ( v \right )} \frac{PR\left ( {v}' \right )}{\left | out\left ( {v}' \right ) \right |}& \text{ if } v\neq v_u \\ \left ( 1-\alpha \right )+\alpha \times \sum _{{v}'\in in\left ( v \right )} \frac{PR\left ( {v}' \right )}{\left | out\left ( {v}' \right ) \right |} & \text{ if } v= v_u \end{cases}

2、实验过程

2.1、实验结果:

根据最终的商品的打分,我们对其进行排序,由于A用户对商品c和商品a有过行为,因此根据打分,为用户A推荐商品d。

2.2、实验代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#coding=utf-8
def PersonalRank(G, alpha, root, max_step):
    rank = dict()  
    for x in G.keys():
        rank[x] = 0

    rank[root] = 1  

    for k in range(max_step):
        print str(k)
        tmp = dict()
            for x in G.keys():
                    tmp[x] = 0
            for i, ri in G.items():  
                    for j, wij in ri.items():
                if j not in tmp:
                    tmp[j] = 0
                        tmp[j] += alpha * rank[i] / (1.0 * len(ri))  
                if j == root:
                        tmp[j] += (1 - alpha)
        # coverage
        check = []
        for k in tmp.keys():
            check.append(tmp[k] - rank[k])

        if sum(check) <= 0.0001:
            break

            rank = tmp
        for n in rank.keys():
                    print "%s:%.3f \t"%(n, rank[n]),
        print
    return rank  


if __name__ == '__main__' :  
        G = {'A' : {'a' : 1, 'c' : 1},
         'B' : {'a' : 1, 'b' : 1, 'c':1, 'd':1},  
             'C' : {'c' : 1, 'd' : 1},  
             'a' : {'A' : 1, 'B' : 1},  
             'b' : {'B' : 1},  
             'c' : {'A' : 1, 'B' : 1, 'C':1},  
             'd' : {'B' : 1, 'C' : 1}} 
    items_dict = {'a':0,'b':0,'c':0,'d':0}

        rank = PersonalRank(G, 0.85, 'A', 50)
    for k in items_dict.keys():
        if k in rank:
            items_dict[k] = rank[k]
    #sort:
    result = sorted(items_dict.items(), key = lambda d: d[1], reverse=True)
    print "\nThe result:"
    for k in result:
        print "%s:%.3f \t"%(k[0], k[1]),
    print

参考文献

  • 《推荐系统实践》
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016年06月21日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
推荐算法——基于图的推荐算法PersonalRank算法
一、推荐的概述 在推荐系统中,通常是要向用户推荐商品,如在购物网站中,需要根据用户的历史购买行为,向用户推荐一些实际的商品;如在视频网站中,推荐的则是不同的视频;如在社交网站中,推荐的可能是用户等等,
felixzhao
2018/03/20
2.9K0
推荐算法——基于图的推荐算法PersonalRank算法
推荐算法图推荐-基于随机游走的personalrank算法实现
推荐算法图推荐 基于图的模型(graph-based model)是推荐系统中的重要内容。其实,很多研究人员把基于邻域的模型也称为基于图的模型,因为可以把基于邻域的模型看做基于图的模型的简单形式 在研
学到老
2018/04/16
4.4K0
推荐算法图推荐-基于随机游走的personalrank算法实现
推荐系统实践 0x09 基于图的模型
用户的购买行为很容易可以用二分图(二部图)来表示。并且利用图的算法进行推荐。基于邻域的模型也可以成为基于图的模型,因为基于邻域的模型都是基于图的模型的简单情况。我们可以用二元组\((u,i)\)来表示用户\(u\)对物品\(i\)有过购买行为,这样的话数据集可以用一个二分图来表示。我这里尝试画一个二分图(有点丑,不要介意哈):
huofo
2022/03/18
2150
推荐算法——非负矩阵分解(NMF)
在博文推荐算法——基于矩阵分解的推荐算法中,提到了将用户-商品矩阵进行分解,从而实现对未打分项进行打分。矩阵分解是指将一个矩阵分解成两个或者多个矩阵的乘积。对于上述的用户-商品矩阵(评分矩阵),记为Vm×nV_{m\times n},可以将其分解成两个或者多个矩阵的乘积,假设分解成两个矩阵Wm×kW_{m\times k}和Hk×nH_{k\times n},我们要使得矩阵Wm×kW_{m\times k}和Hk×nH_{k\times n}的乘积能够还原原始的矩阵Vm×nV_{m\times n}:
felixzhao
2019/02/13
1.5K0
协同过滤推荐算法(一)原理与实现
协同过滤推荐算法是诞生最早,并且较为著名的推荐算法。主要的功能是预测和推荐。算法通过对用户历史行为数据的挖掘发现用户的偏好,基于不同的偏好对用户进行群组划分并推荐品味相似的商品。协同过滤推荐算法分为两类,分别是基于用户的协同过滤算法(user-based collaboratIve filtering),和基于物品的协同过滤算法(item-based collaborative filtering)。简单的说就是:人以类聚,物以群分。下面我们将分别说明这两类推荐算法的原理和实现方法。
全栈程序员站长
2022/09/07
3.4K0
协同过滤推荐算法(一)原理与实现
推荐算法——基于矩阵分解的推荐算法
一、推荐算法概述 对于推荐系统(Recommend System, RS),从广义上的理解为:为用户(User)推荐相关的商品(Items)。常用的推荐算法主要有: 基于内容的推荐(Content-Based Recommendation) 协同过滤的推荐(Collaborative Filtering Recommendation) 基于关联规则的推荐(Association Rule-Based Recommendation) 基于效用的推荐(Utility-Based Recommendation)
felixzhao
2018/03/20
2K0
推荐算法——基于矩阵分解的推荐算法
《推荐系统实践》:如何利用用户标签数据?
基于标签的推荐系统 用户用标签来描述自己对物品的看法,因此,标签成为了联系用户和物品的纽带。因此,标签数据是反应用户兴趣的重要数据源,而如何利用用户的标签数据来提高用户个性化推荐结果的质量,是推荐系统研究的重要问题。 在如何利用标签数据的问题上,豆瓣无疑是这方面的代表。豆瓣将标签系统融入到他们的整个产品线中。下面以豆瓣读书为例进行介绍。首先,在每本书的页面上,都提供了一个叫做“豆瓣成员常用标签”的应用,它给出了这本书上用户最常打的标签。同时,在用户希望给书做评价时,豆瓣也会让用户给图书打标签。最后,在最终的
机器学习AI算法工程
2018/03/13
3.4K0
《推荐系统实践》:如何利用用户标签数据?
Recommended System
推荐系统的核心问题就在于为用户推荐与其兴趣相似度比较高的商品。比如在微博上,用户至上想打发时间,并不是想准确的查看某条信息,在首页中查看每一条微博,为了帮助他筛选出一批他们可能感兴趣的信息,此时就需要分析出该用户的兴趣,从海量信息中选择出与用户兴趣相似的信息,并将这些信息推荐给用户。推荐系统就是这样,根据用户的历史和社交情况推荐与其喜好相符的商品或信息。 这时候就需要一个相似度函数
西红柿炒鸡蛋
2019/01/23
6910
协同过滤推荐算法
相信大家对推荐系统已经很熟悉了,它通过分析用户的历史行为,挖掘用户的兴趣爱好,预测并推荐给用户其接下来有可能感兴趣的事物,例如商品推荐、音乐推荐、新闻以及最近很火的短视频推荐等等。
小萌哥
2020/07/21
1.5K0
协同过滤推荐算法
【算法】推荐算法--协同过滤
协同过滤推荐(Collaborative Filtering recommendation)是在信息过滤和信息系统中正迅速成为一项很受欢迎的技术。与传统的基于内容过滤直接分析内容进行推荐不同,协同过滤分析用户兴趣,在用户群中找到指定用户的相似(兴趣)用户,综合这些相似用户对某一信息的评价,形成系统对该指定用户对此信息的喜好程度预测。
陆勤_数据人网
2018/07/30
6.3K0
【算法】推荐算法--协同过滤
协同过滤的原理及Python实现
作者:李小文,先后从事过数据分析、数据挖掘工作,主要开发语言是Python,现任一家小型互联网公司的算法工程师。
1480
2019/08/05
1.6K1
协同过滤的原理及Python实现
推荐算法在商城系统实践
本文博主给大家讲解如何在自己开源的电商项目newbee-mall-pro中应用协同过滤算法来达到给用户更好的购物体验效果。
wayn
2023/04/09
1.9K0
推荐算法在商城系统实践
简单易学的机器学习算法——协同过滤推荐算法(2)
一、基于协同过滤的推荐系统     协同过滤(Collaborative Filtering)的推荐系统的原理是通过将用户和其他用户的数据进行比对来实现推荐的。比对的具体方法就是通过计算两个用户数据之间的相似性,通过相似性的计算来说明两个用户数据之间的相似程度。相似度函数的设计必须满足度量空间的三点要求,即非负性,对称性和三角不等性。常用的相似度的计算方法有:欧式距离法、皮尔逊相关系数法和夹角余弦相似度法。具体的可以参见上一篇文章“协同过滤推荐算法(1) ”。 二、面临的问题     在基本的协同过滤的推荐
felixzhao
2018/03/15
6110
简单易学的机器学习算法——协同过滤推荐算法(2)
基于协同过滤(CF)算法的推荐系统
         随着计算机领域技术的高速发展,电子商务时代的普及,个性化的推荐系统深入生活应用的各个方面。个性化推荐算法是推荐系统中最核心的技术,在很大程度上决定了电子商务推荐系统性能的优劣。而协同过滤推荐是个性化推荐系统应用最为广泛的技术,协同过滤推荐主要分为基于用户的协同过滤推荐、基于项目的协同过滤推荐和基于模型的协同过滤推荐。
Flaneur
2020/03/25
5K0
Resys-two-用户行为数据
感觉第二章应该是整本书的核心内容,讲解的是如何利用用户行为数据,通过“听其言,观其行”。着重讲解了两个算法:
皮大大
2021/03/01
5450
Resys-two-用户行为数据
基于协同的SlopeOne推荐算法原理介绍和实现
Slope One 算法是由 Daniel Lemire 教授在 2005 年提出的一个 Item-Based 的协同过滤推荐算法。
石晓文
2019/08/06
1.2K0
基于协同的SlopeOne推荐算法原理介绍和实现
推荐算法设计综述
http://www.tensorinfinity.com/paper_178.html
SIGAI学习与实践平台
2019/06/20
1.2K0
推荐算法设计综述
推荐算法——基于矩阵分解的推荐算法
对于推荐系统(Recommend System, RS),从广义上的理解为:为用户(User)推荐相关的商品(Items)。常用的推荐算法主要有:
felixzhao
2019/02/13
1.9K0
基于物品的协同过滤python案例演示
在之前的文章中介绍了基于用户的协同过滤python代码实现方法(戳?基于用户的协同过滤),本次接着来看基于物品的协同过滤如何用python实现。 1 原理回顾 基于物品的协同过滤算法中心思想,就是给
三猫
2020/06/02
1.5K0
基于物品的协同过滤python案例演示
【机器学习 | 数据挖掘】智能推荐算法
智能大数据分析是指利用先进的技术和算法对大规模数据进行深入分析和挖掘,以提取有价值的信息和洞察。它结合了大数据技术、人工智能(AI)、机器学习(ML)和数据挖掘等多种方法,旨在通过自动化的方式分析复杂数据集,发现潜在的价值和关联性,实现数据的自动化处理和分析,从而支持决策和优化业务流程。与传统的人工分析相比,智能大数据分析具有自动化、深度挖掘、实时性和可视化等特点。智能大数据分析广泛应用于各个领域,包括金融服务、医疗健康、零售、市场营销等,帮助企业做出更为精准的决策,提升竞争力。 【GitCode】专栏资源保存在我的GitCode仓库:https://gitcode.com/Morse_Chen/Intelligent_bigdata_analysis。
Francek Chen
2025/01/22
2150
【机器学习 | 数据挖掘】智能推荐算法
推荐阅读
相关推荐
推荐算法——基于图的推荐算法PersonalRank算法
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验