社交⽹络数据

数据获取

社交网络数据的获取方式:

  • 电子邮件
  • 用户注册信息
  • 用户位置信息
  • 论坛和讨论组
  • 及时聊天工具
  • 社交网站

数据类型

社交⽹络定义了⽤户之间的联系,因此可以⽤图定义社交⽹络。
⽤图 G(V,E,w)定义⼀个社交⽹络,其中V 是顶点集合,每个顶点代表⼀个⽤户,E是边集合,如果⽤户va 和vb 有社交⽹络关系,那么就有⼀条 e(va,vb)连接这两个⽤户,⽽ w(va,vb)定义了边的权重。对图G 中的⽤户顶点 u,定义 out(u)为顶点 u指向的顶点集合,定义为int(u)指向顶点 u的顶点集合。

  • 双向确认的社交⽹络数据,无向边连接

  • 单向关注的社交⽹络数据,有向边连接

  • 基于社区的社交⽹络数据

基于社交网络的推荐

基于邻域的社会化推荐

给定一个社交网络和一份用户数据集,我们就可以利用社交网络来查询好友关系。



基于邻域的社会化推荐算法,在实际操作中很难获得所有好友的历史行为数据。
可以两方面改进:

  1. 两处截断。只拿和用户相似最高的N个好友;每个用户只返回最近1个月的行为。
  2. 重新设计数据库。给每个用户设计维护一个消息队列。

基于图的社会化推荐算法

信息流推荐

信息流的个性化推荐要解决的问题就是如何进⼀步帮助⽤户从信息墙上挑选有⽤的信息。
近似于Facebook的EdgeRank算法


EdgeRank算法的个性化因素仅仅是好友的熟悉度,它并没有考虑帖⼦内容和⽤户兴趣的相似度。

好友推荐

好友推荐系统的⽬的是根据⽤户现有的好友、⽤户的⾏为记录给⽤户推荐新的好友,从⽽增加整个社交⽹络的稠密程度和社交⽹站⽤户的活跃度。

基于内容推荐

推荐相似内容的用户作为好友,如:年龄,性别,职业,地理位置,喜欢物品等

基于兴趣推荐

在Twitter和微博为代表的以兴趣图谱为主的社交⽹络中,⽤户往往不关⼼对于⼀个⼈是否在现实社会中认识,⽽只关⼼是否和他们有共同的兴趣爱好。因此,给⽤户推荐和他有共同兴趣的其他⽤户。

使用Twitter数据集。

#基于共同兴趣推荐好友
def InterestBased(user):recommend_user = {}with open('../Twitter-基于社交网络的推荐数据集/twitter/%s.circles'%user) as f:circle_user_list = [i.strip().split() for i in f.readlines()]for circle in circle_user_list:for j in circle[1:]:if j not in recommend_user.keys():recommend_user.setdefault(j,0)#热门圈子进行惩罚recommend_user[j] += round(1/len(circle),2)recommend_user = {k: v for k, v in sorted(recommend_user.items(), key=lambda item: item[1], reverse=True)[:20] ifv != 0}return  recommend_userprint(InterestBased('428333'))
{'86902774': 0.45, '78231411': 0.45, '15214543': 0.26, '104446737': 0.16, '45536687': 0.14, '23572083': 0.14, '112391041': 0.14, '24797315': 0.14, '83590349': 0.14, '18170896': 0.12, '113430220': 0.12, '15224867': 0.12, '27719762': 0.04, '35629711': 0.04, '15909010': 0.04, '27885519': 0.04, '20642310': 0.04, '21875245': 0.04, '104851609': 0.04, '16139105': 0.04}

基于社交网络图推荐

利用好友比例计算相似度,引申出以下三种:


在无向图中第二种与第三种一样,因为out(u)==in(u),而无向图中则不是。

import os#基于社交网络推荐好友
class SocialBased():def __init__(self,file_dir):self.file_dir = file_dir# 导入文件目录file_list = os.listdir(self.file_dir)self.fname_list = list(set([i.split('.')[0] for i in file_list]))#基于出度与出度计算相似度def out_out(self,ruser):#计算指定用户的出度,即该用户关注的用户with open(self.file_dir+'%s.edges'%ruser) as f:user_set = set([i.strip().split()[0] for i in f.readlines()])#计算其他用户的出度,并计算相似度recom_user = dict()for i in self.fname_list :if i== ruser:passelse:recom_user.setdefault(i,{})with open(self.file_dir+i+'.edges') as f:temp = set([i.strip().split()[0] for i in f.readlines()])recom_user[i] = round(len(user_set & temp)/(len(user_set)*len(temp))**0.5,3)#返回相似度高的前20个用户return {k:v for k,v in sorted(recom_user.items(),key=lambda item:item[1],reverse=True)[:20] if v != 0}#基于入度与入度计算相似度def in_in(self,ruser):#计算每个用户的入度用户,即关注该用户的用户user_in_dict = {}for user in self.fname_list:with open(self.file_dir+'%s.edges'%user) as f:user_set1 = [i.strip().split()[0] for i in f.readlines()]f.seek(0,0)user_set2 = [i.strip().split()[1] for i in f.readlines()]#对第一列数据处理,该用户关注的用户for i in user_set1:if i not in user_in_dict.keys():user_in_dict.setdefault(i, [])user_in_dict[i].append(user)# 对第二列数据处理,该用户关注的用户,关注的用户for i in range(len(user_set2)):if user_set2[i] not in user_in_dict.keys():user_in_dict.setdefault(user_set2[i], [])user_in_dict[user_set2[i]].append(user_set1[i])#去重,并计算相似度user_list = user_in_dict.keys()user_in_dict[ruser] = set(user_in_dict[ruser])recommend_user = {}for i in user_list:user_in_dict[i] = set(user_in_dict[i])if i == ruser:passelse:recommend_user[i] = round(len(user_in_dict[i] & user_in_dict[ruser])/(len(user_in_dict[i]) * len(user_in_dict[ruser]))**0.5,3)recommend_user = {k:v for k,v in sorted(recommend_user.items(),key=lambda item:item[1],reverse=True)[:20] if  v !=0}return recommend_user#基于出度与入度计算相似度def out_in(self,ruser):#计算该用户的出度,即该用户关注的用户with open(self.file_dir+'%s.edges'%ruser) as f:user_set = set([i.strip().split()[0] for i in f.readlines()])#同上计算每一个用户的入度user_in_dict = {}for user in self.fname_list:with open(self.file_dir+'%s.edges' % user) as f:user_set1 = [i.strip().split()[0] for i in f.readlines()]f.seek(0, 0)user_set2 = [i.strip().split()[1] for i in f.readlines()]for i in user_set1:if i not in user_in_dict.keys():user_in_dict.setdefault(i, [])user_in_dict[i].append(user)for i in range(len(user_set2)):if user_set2[i] not in user_in_dict.keys():user_in_dict.setdefault(user_set2[i], [])user_in_dict[user_set2[i]].append(user_set1[i])#计算相似度recommend_user = {}for i in user_in_dict.keys():user_in_dict[i] = set(user_in_dict[i])if i != ruser:recommend_user[i] = round(len(user_set & user_in_dict[i])/(len(user_set)*len(user_in_dict[i]))**0.5,3)recommend_user = {k: v for k, v in sorted(recommend_user.items(), key=lambda item: item[1], reverse=True)[:20] ifv != 0}return recommend_userbaso = SocialBased('../Twitter-基于社交网络的推荐数据集/twitter/')print('out-out')
print(baso.out_out('93787797'))
print('in-in')
print(baso.in_in('93787797'))
print('out-in')
print(baso.out_in('93787797'))
out-out
{'59588845': 0.136, '200494218': 0.132, '40981798': 0.13, '358845982': 0.129, '160237722': 0.127, '19933035': 0.125, '430313102': 0.116, '228270980': 0.115, '151495845': 0.114, '230880104': 0.111, '69548480': 0.111, '18996905': 0.11, '107511013': 0.11, '202114894': 0.109, '152388029': 0.103, '18951737': 0.101, '43003845': 0.098, '314316607': 0.098, '186909156': 0.098, '64496469': 0.097}
in-in
{'104646268': 0.535, '81270719': 0.5, '166287349': 0.5, '152553053': 0.5, '192383259': 0.5, '406239056': 0.408, '191280225': 0.408, '192707262': 0.408, '79076592': 0.408, '152445382': 0.408, '453667258': 0.408, '218280403': 0.408, '219723179': 0.354, '152388833': 0.354, '126710787': 0.354, '145025085': 0.333, '90016131': 0.316, '477294097': 0.316, '227426011': 0.316, '394538655': 0.316}
out-in
{'51222571': 0.42, '50613262': 0.377, '21465973': 0.329, '52263864': 0.32, '26269424': 0.311, '14583400': 0.309, '229983913': 0.302, '33905807': 0.302, '49161606': 0.293, '212547041': 0.293, '72152715': 0.293, '139559356': 0.283, '100133641': 0.272, '138999836': 0.272, '120527521': 0.272, '189753564': 0.267, '212006583': 0.262, '155610817': 0.262, '212595641': 0.253, '79613352': 0.251}

基于社交网络的推荐算法相关推荐

  1. 社交网络环境下基于信任的推荐算法

    社交网络环境下基于信任的推荐算法 PMF 概率矩阵分解(借鉴:http://blog.csdn.net/shenxiaolu1984/article/details/50372909) - 基本思路 ...

  2. 基于Spark实现推荐算法-1:推荐算法简介

    个性化推荐系统简介 个性化推荐系统的定义在 1997 年由 Resnick 和 Varian 提出:利用互联网向用户提供信 息和建议,帮助用户选择产品,或模拟售货员帮助用户完成购买行为的系统 .通常推 ...

  3. 《网络电视节目推荐系统----基于用户协同过滤与基于内容的推荐算法的后融合》

    文章目录 一.什么是推荐系统 二.产生原因 由上我们可以得知,推荐系统产生的两大原因 三.应用场景 四.推荐系统的评测方法 1. 推荐系统的三大实验方法 a. 离线实验: b. 用户调查 c. 在线实 ...

  4. 推荐算法概述(基于用户的协同过滤算法、基于物品的协同过滤算法、基于内容的推荐算法)

    "无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家.教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家.点这里可以跳转到教程." 目前推 ...

  5. 一文全面了解基于内容的推荐算法

    作者丨gongyouliu 来源 | 转载自大数据与人工智能(ID:ai-big-data) 这篇文章我们主要关注的是基于内容的推荐算法,它也是非常通用的一类推荐算法,在工业界有大量的应用案例. 本文 ...

  6. 基于特征的推荐算法【转】

    http://in.sdo.com/?p=2779 推荐算法准确度度量公式: 其中,R(u)表示对用户推荐的N个物品,T(u)表示用户u在测试集上喜欢的物品集合. 集合相似度度量公式(N维向量的距离度 ...

  7. 笔记:基于标签的推荐系统、基于图的推荐算法、PersonalRank

    笔记:基于标签的推荐系统.基于图的推荐算法.PersonalRank 发表于11个月前(2015-05-26 19:15)   阅读(44) | 评论(0) 2人收藏此文章, 我要收藏 赞0 原文:h ...

  8. (四)协同过滤算法之基于用户的推荐算法python实现

    一.背景 关于推荐算法的相关背景介绍,已经在上一个姊妹篇(三)协同过滤算法之基于物品的推荐算法python实现中有所介绍.在此,便不在赘述,本文主要介绍基于用户的协同过滤算法,而对推荐算法不太清楚的朋 ...

  9. (三)协同过滤算法之基于物品的推荐算法python实现

    一.背景介绍 互联网的迅猛发展将人类带入了信息社会和网络经济时代,信息化影响到了生活的方方面面.但是随着互联网产业的扩大,为用户提供更多选的同时也带来了筛选与推荐的难题.于是便提出了推荐算法帮助用户快 ...

  10. 吴恩达机器学习系列23:基于内容的推荐算法

    如今,推荐算法已经深入到我们生活的各个方面,比如说淘宝根据我们之前的浏览记录给我们推荐想要购买的商品:抖音不停地给我们推荐各种我们感兴趣的视频(虽然我个人不太喜欢抖音,觉得抖音会让我们丧失独立思考的能 ...

最新文章

  1. 关于Nginx的limit_conn模块的思考
  2. usb serial converter驱动安装_让你到期的机顶盒再发挥余热,终极办法任意安装软件,三网可用...
  3. feign-hystrix的使用
  4. 安卓系统换成linux系统软件,将旧安卓手机打造成“简易linux”机器,并部署AdGuardHome...
  5. php 小数末尾进1,PHP小数点最后一位加1、减1
  6. 实战:Redis 性能测试
  7. HoloLens 2开发:三种工程部署方式
  8. Boom 2 for Mac(音频助推器及均衡器) v1.6.7中文激活版
  9. 帅地鸽了大半年,一个专注于面试、基础知识、算法的小破站上线了
  10. android版here地图下载,HERE WeGo地图安卓版
  11. 2021泰迪杯数据分析技能赛A题:Python实现通讯产品销售和盈利能力分析(含原始数据)
  12. 编程实现库函数strcat
  13. edge浏览器添加新标签页问题
  14. 8188gu驱动和su realtek_Realtek瑞昱RTL8192SU/RTL8188SU/RTL8192GU无线网卡驱动怎么样
  15. 本周最新文献速递20220320
  16. 机关算尽,......
  17. proteus元件大全 仿真元件 电子元器件英文缩写
  18. eclipse开发android入门学习
  19. 计算机组成原理片级逻辑图,计算机组成原理试题(五)
  20. vue3 预览docx文件

热门文章

  1. 全国哀悼日 网站变灰装(附代码)
  2. c语言题 设圆的半径,C语言初学者:编程序:设圆半径r圆柱高h,求圆周长面积圆柱体积圆球表面积...
  3. java gzip rest_使用restclient或postman发送gzip数据
  4. shell编写三角函数_VB中三角函数计算.doc
  5. 黑芝麻A1000 设置临时IP连接激光雷达(十)
  6. 南天PR2打印机自动退纸解决办法
  7. mysql recordcount 1_移植到 MySQL-对 MYSQL 数据库使用 ASP Recordcount 的问题
  8. 银行账户管理(Bank Account Management)
  9. 服务器电脑怎么样装系统,如何给服务器安装系统,是不是和PC机一样安装?
  10. Python爬取堆糖网图片的代码