当前位置:首页 » 操作系统 » 社交网络算法

社交网络算法

发布时间: 2023-05-09 17:10:29

Ⅰ 社交网络的核心推荐算法有哪些

对好友推荐算法非常熟悉,有些积累。好友推荐算法一般可以分为下面几类:
1、基于关系的推荐
基于关系的推荐,最近写了一个专栏文章,具体介绍了常用算法,可以看下有没有帮助,传送门:http://zhuanlan.hu.com/gongwenjia/20533434
简介:
a.社会网络中,三元闭包理论,以及常用推荐算法
b.Facebook中的推荐算法是如何做的
2、基于用户资料的推荐
3、基于兴趣的推荐
剩下两个方面有时间再写。
近来学习聚类,发现聚类中有一个非常有趣的方向—社交网络分析,分享一下我的大致了解。这篇只是一篇概况,并没有太多的公式推导和代码,基本是用人话解释社交网络分析中的常用的几种算法。详细到每个算法的以后有空再把详细的公式和代码补上。
社区发现算法,GN算法,Louvain算法,LPA与SLPA
Louvain算法思想
1.不断遍历网络中的节点,尝试把单个节点加入能使模块度提升最大的社区,直到所有节点不再改变
2.将第一阶段形成的一个个小的社区并为一个节点,重新构造网络。这时边的权重为两个节点内所有原始节点的边权重之和。
3.重复以上两步
LPA算法思想:
1.初始化每个节点,并赋予唯一标签
2.根据邻居节点最常见的标签更新每个节点的标签
3.最终收敛后标签一致的节点属于同一社区
SLPA算法思想:
SLPA是LPA的扩展。
1.给每个节点设置一个list存储历史标签
2.每个speaker节点带概率选择自己标签列表中标签传播给listener节点。(两个节点互为邻居节点)
3.节点将最热门的标签更新到标签列表中
4.使用阀值去除低频标签,产出标签一致的节点为社区。

Ⅱ 《社交网络》中写在玻璃上的数学公式是什么公式

影片中的公式如下:

按照电影中的情节,扎克伯格用这个公式来给女孩相貌打分。谷歌一下,这个公式是Elo Rating System的一部分,显然在这里应用的就是Elo Rating System分级系统。
参考wiki对Elo Rating System的解释,就很容易理解这个公式如何来用。

Elo分级系统由美国物理学教授Arpad Elo提出,最初是用于计算象棋比赛中的选手的相对水平,现在已经广泛用于很多类比赛的选手分级。
在一场比赛中,选手都有一个分数,这个分数代表了选手的实力。分越高表示选手实力也越高。而分数可以通过打败其他选手来获得。
Elo算法的实现细节如下:
假设选手A和B,当前拥有的分数分别为RA和RB。
则选手A得分的期望值为:

类似地选手B得分的期望值为:

Ⅲ 猜你喜欢是如何猜的——常见推荐算法介绍

自从头条系的产品今日头条和抖音火了之后,个性化推荐就进入了大众的视野,如果我们说搜索时人找信息的话,那么推荐就是信息找人。搜索是通过用户主动输入索引信息告诉机器自己想要的东西,那么推荐的这个索引是什么才能让信息找到人呢?

第一类索引是“你的历史”,即基于你以前在平台上对某物品产生的行为(点赞,转发,评论或者收藏),寻找与你产生过相似行为的用户所喜欢的其他物品或者与你喜欢的物品相似的其他物品来为你推荐。这一基于用户行为相似的算法有:协同过滤算法、基于内容的推荐算法和基于标签的推荐算法。

基于用户的协同过滤算法是寻找与A用户有相似行为的所有B用户所喜欢的而A用户还不知道的物品推荐给A用户 。该算法包括两个步骤:

-根据用户所喜欢的物品计算用户间相似度,找到与目标用户相似的用户集合;

-找到该用户集合所喜欢的而目标用户所不知道的物品。

那么,找出一批物品以后哪个先推荐哪个后推荐?用户间相似程度大的先推荐,用户对物品的感兴趣程度大要先推荐。即假设A用户与B用户的相似程度为0.9,与C用户的相似程度为0.7,用户B喜欢物品a和物品b的程度分别为1和2,用户C喜欢物品a和物品b的程度分别为0.1和0.5,那么先推荐物品b。多个用户多个物品,只要拟定了用户间的相似度和用户对物品的感兴趣程度,即可对物品进行打分并且进行综合排序。

基于物品的协同过滤算法是根据用户行为而不是物品本身的相似度来判断物品的相似度 ,即如果物品A和物品B被很多的用户同时喜欢,那么我们就认为物品A和物品B是相似的。该算法也是包括两个步骤:

-根据用户行为计算物品间的相似度;

-根据物品的相似度和用户的历史行为给用户生成推荐列表。

与UserCF相似的是,同样会遇到推荐的先后顺序问题,那么ItemCF所遵循的原则是:物品间相似程度大的先推荐,用户对物品的感兴趣程度大要先推荐。假设用户对物品a和物品b感兴趣的程度分别为1和0.5,物品a与物品c和物品d的相似度分别为0.5和0.1,物品b与物品c和物品d的相似度分别为0.3和0.4,那么先推荐物品d。用户喜欢多个物品,并且多个物品与其他物品都有相似的情况下,只要拟定了用物品间的相似度和用户对物品的感兴趣程度,即可对物品进行打分并且进行综合排序。

协同过滤算法的核心都是通过用户行为来计算相似度,User-CF是通过用户行为来计算用户间的相似度,Item-CF是通过用户行为来计算物品间的相似度。

推荐算法很重要的一个原理是为用户推荐与用户喜欢的物品相似的用户又不知道的物品。物品的协同过滤算法是通过用户行为来衡量物品间的相似(喜欢物品A的用户中,同时喜欢物品B的用户比例越高,物品A与物品B的相似程度越高),而基于内容的推荐算法衡量则是通过物品本身的内容相似度来衡量物品间的相似。

假如,你看了东野圭吾的《解忧杂货店》,那么下次系统会给你推荐东野圭吾的《白夜行》。假设你看了小李子的《泰坦尼克号》,系统再给你推荐小李子的《荒野猎人》。

该算法与前两种不同的是,将用户和物品之间使用“标签”进行联系,让用户对喜欢的物品做记号(标签),将同样具有这些记号(标签)的其他物品认为很大程度是相似的并推荐给用户。其基本步骤如下:

统计用户最常用的标签

对于每个标签,统计最常被打过这个标签次数最多的物品

将具有这些标签最热门的物品推荐给该用户

目前,国内APP中,豆瓣就是使用基于标签的推荐算法做个性化的推荐。

第二类索引是“你的朋友”,基于你的社交好友来进行推荐,即基于社交网络的推荐。例如,微信看一看中的功能“朋友在看”就是最简单的基于社交网络的推荐,只要用户点击公众号文章的“在看”,就会出现在其好友的“朋友在看”的列表中。

复杂一点的算法会考虑用户之间的熟悉程度和兴趣的相似度来进行推荐。目前,在信息流推荐领域,基于社交网络进行推荐的最流行的算法是Facebook的EdgeRank算法,即为用户推荐其好友最近产生过重要行为(评论点赞转发收藏)的信息。

第三类索引是“你所处的环境”,基于你所处的时间、地点等上下文信息进行推荐。例如,我们看到很APP中的“最近最热门”,就是基于时间上下文的非个性化推荐;以及,美团和饿了么这些基于位置提供服务的APP中,“附近商家”这一功能就是基于用户位置进行推荐。高德地图在为用户推荐驾驶路线时,会考虑不同路线的拥堵程度、红绿灯数量等计算路线用和路程距离再进行综合排序推荐。

很多时候,基于时间上下文的推荐会协同过滤这类个性化推荐算法结合使用。例如,在使用协同过滤推荐策略的时候,会将时间作为其中一个因素考虑进入推荐策略中,最近的信息先推荐。

以上就是常见的推荐算法。作为产品人,我们不需要知道如何实现,但是我们必须知道这些推荐算法的原理,知道在什么场景下如何去做推荐才能提升推荐的效率,这才是产品经理的价值所在。

参考资料:《推荐算法实战》项亮

Ⅳ PageRank算法实现好友推荐(算法原理)

对于社交系统与电商网站,推荐系统占有很重要的位置,当数据量越来越大的时候,用户无法确定该选择什么商品,因此在电商系统中需要按照兴趣或者相似度给用户推荐相应的商品。相应的,在一个大型社交网络平台中,睁唤手对于一些用户,我们希望推荐一些知名度较高,活跃度较高或者感兴趣的用户,比如一些明星,歌手,演员等等。在社交网络中,PageRank算法有着广泛的应用,因此,本篇文章主要介绍其原理。

对于大部分社交系统来说,如果只是简单的获取好友的信息远远不够,我们可以通过获取好友的好友的信息来扩展用户的朋友圈,使得信息量更加丰富,本项目中使用PageRank算法来完成二级邻居,然后按照Rank排序,选择Top5用户实现用户的好友的好友的推荐。

PageRank算法由Google的创始人拉里·佩奇和谢尔·布林于1998年发明.这项技术设计之初是为了体现网页的相关性和重要性,在搜索引擎优化操作中经常被用来评估网页优化的成效因素之一.

从技术上看,搜索引擎需要解决以下三个问题:

本质就是一个爬虫问题,通过爬虫获取整个互联网的数据

关键在于快速找到.

它的实现方式有: 倒排索引,签名文件,后缀树等。我们最熟悉的是 倒排索引 。(并不熟悉,以后有机会再看)

排序是Google的搜索引擎能够兴起的一个决定性因素。

对网页排序有很多种方式,我们来看三种:

就是原封不懂地把索引到的链接直接返回给用户,缺点就不说了,想找自己感兴趣的内容估计要费不少功夫。

这种方式是一种只从关键词出现的次数和位置进行排序的方法。该方法以一个关键词与网页的相关度大小作为排序标准,而关键词在网页的相关度大小作为排序标准,而关键词在网页中的相关度则由它在网页中出现的频次和位置两方面加权计算得出。

缺点也很明显,容易出现刷分的情况,整篇文章中大量地刷关键词就能提高排名。

真正找到计算网页自身质量的完美的数学模型是Google的创始人拉里佩奇和谢尔盖布林。 下一节讲一下原理。

我们模拟一个悠闲的上网者,上网者首先随机选择一个网页打开,然后在这个网页上呆了几分钟后,跳转到该网页所指向的链接,这样无所事事、漫无目的地在网页上跳来跳去,PageRank就是估计这个悠闲的上网者分布在各个网页上的概率,这个概率就代表这个网页的重链大要性.

PageRank主要基于两个重要的假设:

如果一篇文章被越来越多的人引用,那么这篇文章可能就是一篇经典之作,如果这篇文章引用了其他的论文,那么一定程度上这篇被引用的文章也是一篇很好的文章。应用到社交网络中,如果一个好友被更多的人关注,那么说明该好友有很高的知名度和活跃度,那么,我们可以将该好友推荐给用户。

基于这两个假设,我们可以总结出PageRank算法的核心:

如下图,可以更好的表达PageRank算法的思想:

由上图可知,每个页面将自己的一部分rank传递给某个页面,我们可悉嫌以通过计算传递给某个页面的所有rank值的和来计算出它的rank值,当然,不可能是通过一次计算完成,我们刚开始可以给每个页面赋予一个初始rank值,比如 1/N(N为页面总数) ,通过迭代计算得到该页面的rank值。

迭代计算停止的条件为:

使用有向图表示:

这个例子中只有四个网页,如果当前在A网页,那么悠闲的上网者将会各以1/3的概率跳转到B、C、D,这里的3表示A有3条出链,如果一个网页有k条出链,那么跳转任意一个出链上的概率是1/k,同理D到B、C的概率各为1/2,而B到C的概率为0。

我们在做计算的时候会将该图表示成一个二维的矩阵,我们做一个转换,就会变成下图的矩阵形式。 M(i,j) 表示j节点指向i节点的概率 ,一般来说每列和为1。

生成的 转移矩阵 非常简单, 矩阵的每一列代表该顶点所代表的页面除以对应页面的出链数得到的

有了转移矩阵,我们可以来定义行向量 V V 的第i个分量记录 对应的Rank值,因此一次Rank的更新可以表示为:

在算法的第一轮计算中,我们假设上网者在每一个网页的概率都是相等的,即1/n,于是初试的概率分布就是一个所有值都为1/n的n维列向量 ,用 去右乘转移矩阵M,就得到了第一步之后上网者的概率分布向量 ,得到一个nX1的矩阵 这个 一轮迭代计算出来的PageRank值 。下面是 的计算过程:

得到了 后,再用 去右乘M得到 ,一直下去,即 , 最终V会收敛 .

不断的迭代,最终得到结果.

但是在迭代计算中,我们需要考虑如下两大阻力: Dead End Spider Trap

Dead End就是指一个页面只有入链但是没有出链,这时转移矩阵M的一列为零,导致最后结果为零。这时web不是强连通的,即存在某一类节点不指向别人,如下图的D。这个时候我们的算法就会出问题了,它不满足收敛性了。

为什么不满足收敛性了?

Spider Trap指页面的所有出链都指向自己,这样会使迭代结果中只有自己的页面的Rank值很高。其他页面的Rank值为零。

要克服上面两个问题,我们需要将迭代计算公式做如下转变。我们可以加入一个 随机跳转 机制.

即假设每个页面有很小概率拥有一个指向其他页面的链接。

表现出来就是:其他页面本来传递给一个页面的Rank值需要做一个折扣,作为补偿,可能需要一个页面指向该页面并且传递Rank值给该页面,该跳转的概率为β,因此表达式变为:

其中,N为页面总数; e 为一个N维且各个分量都是1的向量;β通过经验得知一般设为0.15.

此时的计算结果过程为:

有机会再写,先空着

Ⅳ 如何检测社交网络中两个人是否是朋友关系(union-find算法)

春节放假会了老家,停更了很多天,这是年后连夜肝出来的第一篇文章,先来聊聊春节放假期间发生的事,这次回家遇到了我学生时代的女神,当年她在我心目中那是

没想到这次遇到了她,身体发福,心目中女神的形象瞬间碎了,就像达芬奇再次遇到了蒙娜丽莎

好了,言归正传。

有时候我们可以需要判断在大型网络中两台计算机是否相连,是否需要建立一条新的连接才能通信;或者是在社交网络中判断两个人是否是朋友关系(相连表示是朋友关系)。在这种应用中,通常我们可能需要处理数百万的对象和数亿的连接,如何能够快速的判断出是否相连呢?这就需要使用到union-find算法

假如输入一对整数,其中每个数字表示的是某种对象(人、地址或者计算机等等),整数对p,q理解为“p与q相连”,相连具有以下特性:

假设相连是一个种等价关系,那么等价关系能够将对象划分为多个等价类,在该算法中,当且仅当两个对象相连时他们才属于同一个等价类

整个网络中的某种对象称为触点

将整数对称为连接,将等价类称作连通分量或者简称分量

union-find算法的目标是当程序从输入中读取了整数对p q时,如果已知的所有整数对都不能说明p q是相连的,那么将这一对整数输出,否则忽略掉这对整数;我们需要设计数据结构来保存已知的所有整数对的信息,判断出输入的整数对是否是相连的,这种问题叫做动态连通性问题。

如果两个触点在不同的分量中,union操作会使两个分量归并。一开始我们有N个分量(每个触点表示一个分量),将两个分量归并之后数量减一。

抽象实现如下:

接下来我们就主要来讨论如何实现union方法和find方法

这种算法的实现思路是在同一个连通分量中所有触点在id[]中的值都是相同的,判断是否连通的connected的方法就是判断id[p]是否等于id[q]。

为了提高union方法的速度,我们需要考虑另外一种算法;使用同样的数据结构,只是重新定义id[]表示的意义,每个触点所对应的id[]值都是在同一分量中的另一个触点的名称

在数组初始化之后,每个节点的链接都指向自己;id[]数组用 父链接 的形式表示了 森林 ,每一次union操作都会找出每个分量的 根节点 进行模猛归并。

find方法需要访问数组n-1次,那么union方法的时间复杂度是O(n²)

为了保证quick-union算法最糟糕的情况不在出现,我需要记录每一个树的大小,在进行分量归并操作时总是把小的树连接到稿消大的树上,这种算法构造出来树的高度会远远小于未加权版本所构造的树高度。

union-find算法只能判断出给定的两个整旦敬桥数是否是相连的,无法给出具体达到的路径;后期我们聊到图算法可以给出具体的路径

文中或许会存在或多或少的不足、错误之处,有建议或者意见也非常欢迎大家在评论交流。

最后, 写作不易,请不要白嫖我哟 ,希望朋友们可以 点赞评论关注 三连,因为这些就是我分享的全部动力来源🙏

Ⅵ Neo4j中使用Louvain算法和标签传播算法(LPA)对漫威英雄进行社群分析

在本系列第一篇 在Neo4j中构建漫威世界的社交网络 中我们从英雄到漫画的二分图推导出英雄到英雄的一分图。接着在第二篇 在Neo4j中对漫威社交网络进行初步分析 中得到一些基本的网络信息以帮助我们了解正在处理的网络情况。

在本篇中我将会在漫威英雄的网络上使用Louvain算法和标签传播算法(LPA),发现一些有趣的社群。

本文中的可视化是使用Gephi来进行呈现,关于Gephi的更多信息可以看我之前的文章《Neo4j to Gephi》(https://tbgraph.wordpress.com/2017/04/01/neo4j-to-gephi/)。关于社群可视化还可以使用neovis.js(https://github.com/johnymontana/neovis.js)。

Neo4j图算法一般是在图的子集上进行,而这个子集通常是一个虚拟图,Neo4j图算法加载这种图有两种办法。第一种简单的办法是通过指定结点的标签和关系的类型将其加载到图算法中。

但是,如果我们要运行的逻辑是在一个特定的子图上,而仅使用结点标签和关系类型无法描述出这个子图,同时也不想去修改实体图,这时要怎么办呢?

不用担心,我们还可以使用Cypher语句来指定要加载的子图。使用查询结点的Cypher语句代替结点标签参数,使用查询关系的Cypher语句来代替关系类型参数。

但是注意,在参数中一定要指明  graph:'cypher' 。

如下示例:

CALL algo.unionFind(
//第一个Cypher语句指定了要加载的结点。
    'MATCH (p:User)
WHERE p.property = 'import'
RETURN id(p) as id',
//第二个Cpyher语句指定要加载的关系
    'MATCH (p1:User)-[f:FRIEND]->(p2:User) 
RETURN id(p1) as source, id(p2) as target,f.weight as weight',
{graph:'cypher',write:true})

通过Cypher语句映射和加载子图,可以非常好的描述要运行算法的子图。不仅如此,我们还可以剔除一些关系,间接的映射一个虚拟图用于运行算法,而那些剔除的关系又并不会从实际图中删除。

Cpyher映射使用场景:

 * 过滤结点和关系

 * 加载间接关系

* 映射双向图

* 相似性阈值(后面详情介绍)

在对各种网络的研究过程中,如计算机网络、社交网络以及生物网络,我们发现了许多不同的特征,包括小世界特性,重尾分布以及聚类等等。另外,网络都有一个共同的特征即社群结构,也就是连通和分组。而现实网络世界的连通并不是随机或同质的,而是存在着某种自然的联系。

社群识别算法在一个全连通的图上运行,效果并不会很好。因为大多数据结点都是紧密连接的,他们是属于一个社群的。在这些的图上运行算法,最终结果就是:得到一个覆盖图大部分区域的大社群和一些边边角角小社群。

这时我们可以使用相似性阈值来进行调控,将大于某个值的关系保留,而小于此值的关系将会剔除。而这个虚拟图就可以通过Cypher语句轻松的映射出来了。

在本文中,我会将漫威社交网络中KNOWS的weight作为阈值,将其设置到100,大于100的关系将会保留,小于100的关于将会剔除,这样,得到的社群将会非常紧密。

连通分量或并查集算法都是找到相互连接的结点集,或者称之为岛,而在这个集合中的所有点都是可以相互连通的。

在图论中,无向图的连通分量(或者仅分量)是一个子图,其中此子图任何两个顶点通过路径相互连接。

当我遇到一个新的网络时,我第一时间想知道是:这个网络有多少个连通分量,以及他们每个都包含多少结点。在漫威英雄的网络中,当前我们已经把KNOWS的weight阈值设置到100了,而前一篇文章的阈值是10,因此,本文得到的连接肯定要比前一篇文章()中的连接要少。

在下面的示例中,我们直接使用结点标签和关系类型,所有标签为Hero的结点和所有类型为KNOWS的关系都将被加载到算法中。由于我们将阈值设置到100,所以,当前算法只考虑weight大于100的关系。

CALL algo.unionFind.stream('Hero', 'KNOWS',
{weightProperty:'weight', defaultValue:0.0, threshold:100.0,concurrency:1}) 
YIELD nodeId,setId
RETURN setId as component,count(*) as componentSize
ORDER BY componentSize DESC LIMIT 10;

正如我所料,漫威英雄网络是一个稀疏图,有1个大社群和6小社群组成,大社群有101个英雄,而小社群基本也就2~4个英雄。这表示,在6439个英雄中,有116个英雄至少一个KNOWS关系的weight值是大于100的。

如果想在浏览器中仔细浏览那个包含101英雄的大社群,会很容易发现隐藏在这里面的一些直观的东西以及社群之间的桥梁结点。接下来我们将尝试使用Louvain算法和标签传播算法来看看这个116个英雄的子图的社群结构。

社群就是网络中结点集合,它们彼此之间的连接比其他节点更紧密。Molarity是一种度量刻度,被用于衡量社群发现算法结果的质量,它能够刻画社区的紧密程度。在一个随机的网络中,将一个结点归类到某一个社群,Molarity值就是会生变化,进而给出这种分配后社区的质量。Molarity即量化了此结点与社群中其他结点的连接紧密程度。社群识别的Louvain方法,是一种基于启发式Molarity最大化的网络社群检测算法。

如前所述,我们将通过Cypher查询来仅映射weight大于110的关系到算法中。

CALL algo.louvain.stream(
// load nodes
    'MATCH (u:Hero) RETURN id(u) as id', 
// load relationships
    'MATCH (u1:Hero)-[rel:KNOWS]-(u2:Hero) 
// similarity threshold
WHERE rel.weight > 100
RETURN id(u1) as source,id(u2) as target',
{graph:"cypher"}) 
YIELD nodeId,community
MATCH (n:Hero) WHERE id(n)=nodeId
RETURN community,
count(*) as communitySize,
collect(n.name) as members
order by communitySize desc limit 5

我使用Gephi进行社群结果可视化,因为Gephi的表现力比表格更好,更有洞察力。

我并不是漫威漫画的专家,所以我只能根据数据来做一个简单的解释。我们总共划分出8个社群。最大的社群是紫色的社群,它由以美国队长为首的神盾局和复仇者联盟组成。在左边我们能看到神奇先生和神奇四侠也在紫色社群里。亮兰色是蜘蛛侠团队,蜘蛛侠帕克是他们与外界联系的唯一桥梁,其他人都是内部交流,与外界并无联系。深兰色是阿斯加德人,他们也是比较封闭,他们仅仅和雷神托尔有联系。哦?难以置信,绿巨人也是自己的社群(粉红色),而绿巨人是这个社群唯一与外界有联系的英雄。我们还看到野兽亨利是紫色社群与绿色社群的桥梁,位置特殊,而绿色是X-Men社群。

标签传播算法是由Raghavan等人于2007年首次提出,(译者言:网络显示此算法于2002年由Zhu等人提出)此算法是由每个结点使用其唯一标识作为标签,然后根据大多数邻居结点的标签为基础进行标签传播,每个结点再从他的邻居结点身上取出现次数最多的标签加到自己身上。LPA算法的具体步骤是这样:结点X有一些邻居结点,且每个邻居结点都有一个标签,标明他们所属的社群。然后网络中的每个结点都选择加入其大多数邻居所属的那个社群,同时再随机的断开一些连接。在开始时,每个节点都用唯一标签进行初始化,然后这些标签开始在网络中进行传播,传播的每一步,每个结点都会根据邻居标签的情况更新自己的标签,随着标签的传播,最终连接紧密的结点集合将会达成一个共识,而他们身上的标签也将不再发生变化。

与Louvaint算法类似,我们也采用Cypher语句进行图映射,在映射时仅加载weight值大于KNOWS关系。同时会将对结点进行回写,导出结果到Gephi中进行可视化展示。

CALL algo.labelPropagation(
// supports node-weights and defining
// initial communities using parameter value
    'MATCH (u:Hero) RETURN id(u) as id, 1 as weight,id(u) as value',
// load relationships
    'MATCH (u1:Hero)-[rel:KNOWS]-(u2:Hero) 
// Similarity threshold
WHERE rel.weight > 100
RETURN id(u1) as source,id(u2) as target, rel.weight as weight',
'OUT',{graph:"cypher",partitionProperty:"lpa" }) 
YIELD computeMillis

最终我们得到21个社群,包括单点社群。复仇者联盟(紫色)和神奇四侠(亮兰色)被分为两个社群了。蜘蛛侠(绿色),绿巨人(青绿色)和阿斯加德人(红色)三个社群的结果与Louvain算法一致。我们还发现X-Man被划分成两个社群,加农炮小组比Louvain的结果要稍微大点,同时也显的不那么孤立。

你发现没有?Neo4j图算法库真的很神奇,用起来也简单。通过与Cypher查询语句结合进行虚拟图映射,可以简单有效的对图进行分析和理解。

本来,我打算在本文中介绍中心性算法的使用,但那样本文将会非常长,不便于阅读,所以, 我后续将会再写文章来介绍使用Cypher映射进行中心性算法的示例。敬请期待吧。

Ⅶ 加入黑名单的好友可以看到可能认识的人吗

加入黑名单的好友不能看到可能认识的人,因为黑名单的作用是将某个人从自己的社交网络中屏蔽掉,即使被屏蔽的人与其他人存在关联,也不会在自己的社交网络中显示出来。因此,黑名单的好友无法在自己的社交网络中看到与被屏蔽的人有关联的可能认识的人。

同时,值得注意的是,社交网碧皮闭络平台可能会提供“可能认识的人”等功能,这些推荐可能认识的人的算法不悔裂仅仅基于你的好友列表,还会基于你的搜索历史记录、浏览行为等信息,因此,即使把某个人加入黑名单,社交网络平台仍然可能推荐与被屏蔽的人有关联的可能认识的人握做。

Ⅷ 社交网络数据分析与应用

社交网络数据分析与应用
根据最近的一份调查数据显示,美国互联网媒体的市值已达10890亿美元,是传统媒体的3倍,类似的在中国,根据艾瑞咨询发布的2014年第二季度网络经济核心数据显示,截止2014年6月30日,中国主要上市互联网公司市值前五的为腾讯(1405.6亿美元)、网络(654.5亿美元)、京东(389.7亿美元)、奇虎360(120.9亿美备敬唯元)、唯品会(111.9亿美元)。与此同时,以Facebook,Twitter,微博,微信等为代表的社交网络应用正蓬勃发展,开启了互联网时代的社交概念。据全球最大的社会化媒体传播咨询公司We Are Very Social Limited分析指出,目前社交类软件使用的人数已达25亿——占世界总人数约的35%,另据艾瑞咨询发布的2014年第二季度社区交友数据显示,2014年5月,社区交友类服务月度覆盖人数达到4.7亿,在总体网民中渗透率为92.5%;2014年5月社交服务在移动App端月度覆盖人数为1.9亿人,其中微博服务在移动端优势较为明显,月度覆盖人数达到1.1亿人;互联网媒体和社交网络是Web2.0时代两个非常重要的应用,那么一个自然的问题是这两个领域将会如何互动发展?本报告主要从数据分析(非财务、非战略)的角度尝试探讨网络结构会给互联网媒体带来什么样的机遇和挑战。具体而言,我们根据自己的研究经验只关注以下几个方面:新闻、影音和搜索,根据艾瑞咨询发布的2013网络经济核心数据显示,这三部分的收入占到中国市值TOP20互联网企业总市值的32.16%,其重要性不可忽视。我们通过具体的案例并结合理论前沿做探索性的研讨。
一、音乐推荐
根据《2013中国网络音乐市场年度报告》显示,2013年底,我国网络音乐用户规模达到4.5亿。其中,手机音乐用户人数由2012年的0.96亿增长到2013年的2.91亿,年增长率达203%。从网络音乐用户规模的飞跃式增长可以看到音乐流媒体服务蕴含着巨大的商机。在国外,科技巨头争夺音乐市场的野心也初露端倪,今年年初,苹果斥资30亿美元买下Beats Electronics,而谷歌也随后收购了流媒体音乐服务提供商Songza。
音乐产业在新媒体时代占据重要地位。本报告主要关注移动互联网环境下在线音乐服务商(酷狗音乐、QQ音乐、天天动听等)的发展现状并且对当前的音乐个性化推荐提出我们的一些见解。
1.1 音乐推荐与社交网络
根据国内知名研究机构CNIT-Research 8月份发布的《2014年第二季度中国手机音乐APP市场报告》的数据显示,排名前三的手机音乐App为酷狗音乐、QQ音乐、天天动听。他们所占的市场份额分别为:20.1%,17.0%以及15.8%。
酷狗音乐 QQ音乐 天天动听
其中,酷狗音乐和天天动听凭借在在线音乐领域长期积累的用户资源、高品质音质、卓越的UI界面以及完美的下载体验取胜。而QQ音乐主要依附强大的社交工具QQ应运而生,可谓是“社交音乐”领域的先驱者。从2014年第二季度手机音乐数据来看,稿猛QQ音乐增势迅猛,连续三个月用户下载量增速均超过行业增速水平,而酷狗音乐、天天动听均增速低于市场行业增速,用户市场份额有所下降。
根据速途研究院对手机音乐用户愿景的调查显示,有58%的用户希望增强个性化音乐推荐的功能,这说明有很多用户在收听音乐时其实并不清楚自己喜欢什么类型的歌曲,如果音乐电台能根据用户的个人喜好“猜出”用户喜欢什么歌曲并为其进行推荐,那将会给用户带来意想不到的完美体验。目前的很多音乐软件都支持推荐这一功能。以下是音乐App市场中常见的音乐产品的个性化推荐以及定制方式:
酷狗音乐 QQ音乐 天天动听
根据研究,推荐模式主要分为以下几种:(1)仿培 热点推荐,可以根据大众的搜索记录,通过排行榜的形式得到,也可以根据近期发生的音乐娱乐事件推荐,如中国好声音、我是歌手等;(2)根据用户的听歌记录推荐,包括用户对每首歌的喜恶记录;(3)根据地理位置信息结合用户兴趣进行推荐;(4)根据用户喜欢的歌手信息进行推荐。但是,以上这些推荐模式都没有能够充分利用社交网络的信息。在社交网络风靡全球的时代,有越来越多的音乐服务商发现,社交网络可以帮助商家留住更多的用户,同时,充分利用社交网络信息将带来更加卓越完美的用户体验。可以看到,酷狗音乐和天天动听都允许用户使用第三方账户(微博、QQ)进行绑定登录,并提供分享到微博、微信等选项;QQ音乐特设了“动态”专栏,用于显示好友分享的音乐。另外,酷狗和QQ音乐都可以通过定位的方式推荐附近的志趣相投的好友。
酷狗音乐 QQ音乐 天天动听
上述事实说明,社交音乐存在巨大的潜力和价值。那么,这一方面有无突出的企业呢?其中英国的Last.fm和中国的QQ音乐可以算得上是这方面的一个代表。
Last.fm QQ音乐
Last.fm是 Audioscrobbler 音乐引擎设计团队的旗舰产品,有遍布232个国家超过1500万的活跃听众。2007年被CBS Interactive以2.8亿美元价格收购,目前,Last.fm是全球最大的社交音乐平台。QQ音乐是中国互联网领域领先的网络音乐平台及正版数字音乐服务提供商,在中国手机音乐市场所占份额跻身四大巨头(其他三个分别是酷狗、天天动听、酷我),月活跃用户已达到3亿,是中国社交音乐领域的领军人物。
以QQ音乐为例,我们详细分析它在利用社交网络信息进行个性化推荐的优势与可能存在的不足。QQ音乐依附强大的社交工具QQ而生,长期以来受到广大用户的喜爱,这与QQ背后的亿万级用户是无法割离的,可以说,QQ音乐是有先天的社交优势的。用户登录QQ音乐后,可以看到动态栏中显示的好友音乐动态,同时,它还允许用户绑定自己的微博账号,把音乐分享给微博好友。不仅如此,QQ音乐允许用户自己编辑生成歌单,并分享给好友,这起到了一定的自媒体的作用。在“明星部落”这一功能中,QQ音乐允许粉丝之间交流互动,并形成一定的社交规模。从上述总结中,我们已经可以看到,QQ音乐已经有意识的把社交信息融合到产品设计和运营中,以增加客户粘性。但是从数据分析的基础和推荐算法的构建上,是否真正做到有效利用社交网络信息了呢?为此,使用QQ音乐于2012年全面更新升级的“猜你喜欢”功能,并发现了如下问题:当笔者没有任何听歌记录时,这一模块并不能为笔者推荐歌曲。根据提示内容,目前该功能可能主要依靠用户的历史听歌记录进行推荐。同样的问题出现在QQ音乐馆的推荐栏中:大部分初始推荐音乐来源于当下热门音乐歌曲,缺少个性化成分。
QQ音乐:猜你喜欢 QQ音乐馆
以上事实说明音乐服务商在推荐算法上没有充分利用社交网络的信息。事实上,在获得用户个人绑定社交网络账号的基础上,可以得到用户的朋友关系,进一步可以获得用户好友的听歌记录,这些歌曲可以成为初始推荐曲目的备选项,将这些备选项通过一定规则(热度、好友相似度)排序,可以用于音乐推荐;另外,众所周知,社交网络(如微博)是明星与粉丝互动的一个重要渠道,因此,可以重点提取用户对于社交网络中歌手以及音乐人的关注关系,以获得对用户偏好的推测。以上这些过程可以用下图表示。
可以看到,在以社交网络绑定的音乐社区中,每个人并不是孤立的个体,而是通过好友关系,以及粉丝与明星的关注关系联系起来。音乐活动的多元化为QQ音乐的推荐场景带来了新的挑战。我们认为存在以下几个需要处理的问题:(1)如何高效利用好友的音乐信息对用户进行推荐?用户的好友众多,每个好友会留下很多音乐记录,这些信息综合起来的话数量极其庞大,如何迅速整合朋友及其收听记录并按照优先程度排序对用户进行推荐是提高用户体验的前提条件。(2)如何整合多种信息渠道进行推荐?随着时间的推进,一个音乐账户留下的信息是多元化的。例如,用户主动搜索的音乐记录、用户对历史收听音乐记录的反馈,用户选择的电台种类、用户自己总结生成的歌单、用户对朋友分享音乐的反馈信息等。因此,如何对这些异质的信息来源进行有效整合,或者,在资源有限的情况下,如何判断和筛选出对于提高推荐精度最有效的指标是提高音乐推荐效果的关键法宝。(3)如何整合当前音乐潮流趋势与用户个人兴趣基因?音乐是充满了潮流和娱乐性的产业,因此,用户的音乐兴趣不仅受其自身兴趣基因驱使,也受到当前音乐流驱使的影响。因此,如何结合用户个人兴趣以及音乐潮流趋势对用户进行有效推荐,是对于音乐这一特殊娱乐行业的特别要求。综上我们认为QQ音乐虽然是利用社交关系进行音乐推荐的先驱者,但是在利用网络数据的层面上仍有很大的改进和提升空间。
1.2 基于社交网络的音乐推荐
在此我们给出如何利用网络数据对用户进行推荐的技术思想。由于音乐推荐场景实体的多元化,我们将常见的推荐场景列举如下:推荐歌曲、推荐歌单、推荐电台、推荐歌手、推荐用户。接下来,我们将从音乐分类与结构化、用户信息整合、网络结构应用三个步骤详细阐述我们的观点。
音乐结构化与归一化
1.歌曲标签化
首先,基于音乐的不同风格,我们需要对系统中存在的海量歌曲进行分类,通过打标签的方式,使音频信息通过文本的方式结构化。分类的方法多种多样,标准各异,从几个音乐主流网站的标签组织形式看来,主要从客观、主观两个角度进行分析。从客观的角度讲,音乐可以按照流派、地域、年代、演奏乐器等方式分类,如“流行”、“摇滚”、“乡村音乐”、“90后”、“钢琴曲”等等,且大类下面可以设小类,如“流行”下可以设置“华语流行”、“欧美流行”等小类;从主观的角度讲,音乐风格与听歌时的心情、场景高度相关,如分为“甜蜜”、“安静”、“治愈”、“酒吧”、“咖啡馆”等等,这种标签使得用户在听音乐时仿佛有一种身临其境的感觉,带来更高的视听享受。除此之外,标签也可以由用户自己生成,如用户的热搜关键词记录、用户自行备注标签等。这在一定程度上正是利用自媒体的形式扩充标签库,使之更能反应用户兴趣。
2.歌手信息提取
除了可以将歌曲标签化,我们还可以进一步的对歌手信息进行提取。比如根据地域我们可以把歌手分为大陆、港台、欧美等,根据年代可以分为60后、70后、80后歌手,根据他们的曲风可以分为摇滚、抒情、朋克等。通过打标签的形式把歌手进行分类,从而形成结构化的数据格式,方便以后快速清晰的定位用户喜欢哪一类型的歌手。同样的我们也可以对歌单、作词者、作曲者进行标签化处理,例如歌单的标签可以模仿歌曲的形式,因为歌单是由歌曲组成,所以可以用歌曲的标签来代表歌单的标签。作词者和作曲者的标签可以参考歌手打标签的方法,另外值得注意的是,由于音乐人之间形成合作、作曲、写词等合作关系,可以认为是一个社交网络关系,常常可以见到的现象是某些歌手与词作者存在密切的合作关系,而这部分信息也可用于音乐的个性化推荐。例如,对于一些有特定合作的歌手和词(曲)作者,我们应该特别留意,比如周杰伦和方文山这对组合。
3.歌词的语义分析
歌曲的重要组成部分就是歌词,由于歌词属于文本,我们不可能直接对其打标签,所以首先要进行的是语义分析,通过语义分析我们可以大概知道歌词的内容,比如我们可以把歌词切分成短语,然后对每一个短语进行归纳总结,可以判断短语的情感极性(如积极还是消极),对短语进行主题分类,由于歌词数目庞大,可以利用自然语言处理的方式,如主题模型等预先提取主题,再通过人工加以校正。这样就可以对歌词进行标签化处理了。下面我们以歌曲为例,简要的说明具体标签化过程。
通过标签的形式我们可以对每个歌曲的主题予以分类和描述。用于描述一支单曲的标签数目越多,对于音乐主题的描述就更加清晰、明朗;但同时,冗余和重复的信息也可能越多,处理的难度就越大。因此,我们要对标签进行排序和筛选,一个比较简单高效的办法是选择最热门的N个标签作为我们的目标词库,并且对该词库定期进行更新。具体来说,我们将所有标签按照重要程度由高到低进行排序,选择前p个标签作为我们的标签集合。给定一首歌曲t,我们用一个超高维向量Xt=(Xt1,…,Xtp)∈?p表示它的标签信息,其中Xtj=1表示该歌曲含有第j个标签,否则,该歌曲不含有第j个标签。例如对于一首钢琴曲演奏的纯音乐,对其打的标签可能是:钢琴曲、安静、咖啡馆等。设钢琴曲、安静、咖啡馆分别对应于标号为1、3、5的标签,那么向量Xt可以表示为Xt=(1,0,1,0,1,0,…0) 。通过以上步骤,我们就可以把看似杂乱的音乐风格通过打标签的形式进行结构化,用一个只含0、1元素的超高维向量对每首歌曲进行分类。
对于歌单、电台这些由歌曲集合而成的实体,我们也可以通过标签的方式对其进行刻画。例如,对于给定的一个歌单m,我们同样用一个超高维向量

Ⅸ 如何用python实现《多社交网络的影响力最大化问题分析》中的算法

经过一周,现已初步完成,其中多出代码不够美观以及效率不高,还请指点
# _*_ coding:utf-8 _*_
# ==================================================================================
#
# Description: Influence Maximization on Multiple Social Networks
#
# ==================================================================================
import matplotlib.pyplot as plt
import networkx as nx
import heapq

#总图
G = nx.DiGraph()

def load_graph(file):
'''
加载文件为列表格式,并得到G,画出图结构
'''

#将总列表设成全局格式
global gllist

#迭代文件中每个元素
with open(file) as f:
lines = f.readlines()
mylist = [line.strip().split() for line in lines]

gllist = []
#将字符串型转换为整型
for i in mylist:
gllist.append(i[:-2]+map(lambda x: float(x), i[-2:]))
print '初始全局列表:'
print gllist

drawlist=[]
#提取二维列表mylist每行前三个元素,赋给新的列表drawlist
for i in range(len(mylist)):
drawlist.append([])
for j in range(3):
drawlist[i].append(mylist[i][j])
#将列表drawlist加载为有向加权图
G.add_weighted_edges_from(drawlist)
nx.draw(G, with_labels=True, width=1, node_color='y', edge_color='b')
plt.show()
print 'G图中所有节点:',G.nodes()
print 'G图中所有边:',G.edges()
print '\n'

def get_self_node(gllist, target=None):
'''
获取目标节点的自传播节点,返回selflist并包含含晌目标节点
'''
#初始化自传播节点列表
selflist = [target]

#存放已传播节点列表
haslist = []

flag = 0

while (flag != 0):
flag = 0
for target in selflist:
if target not in haslist:
for i in range(len(gllist)):
#判断二维列表中,每行第三个元素是否为1,若为1,则为自传播节点
if ((gllist[i][0] == target)or(gllist[i][1]==target))and(gllist[i][3]==1.0):
if gllist[i][0] == target:
if gllist[i][1] not in haslist:
selflist.append(gllist[i][1])
haslist.append(gllist[i][1])
flag += 1
else:
if gllist[i][0] not in haslist:
selflist.append(gllist[i][0])
haslist.append(gllist[i][0])
flag += 1
#去除重复元素
haslist = set(haslist)
selflist = set(selflist)

#去除重复元素
selflist = set(selflist)
return selflist

def longest_path(gllist,source=None,target=None):
'''
获取起始点到实体的最大谈配锋路径集合,返回卖悉为longestpath列表
'''
longestpath = []
newlist = []
for i in range(len(gllist)):
newlist.append([])
for j in range(3):
newlist[i].append(gllist[i][j])
#构建图结构
G1 = nx.DiGraph()
#添加带权有向边
G1.add_weighted_edges_from(newlist)
#获取目标节点的所有自传播街边,并存入selflist中
selflist = get_self_node(gllist, target)
max_path = 0
val_path = 1
#获取初始节点到目标节点及目标节点的自传播节点的最大路径
for v in selflist:
if v != source:
#遍历两点之间所有路径,并进行比对
for path in nx.all_simple_paths(G1,source=source,target=v):
#判断路径后两个元素是否为相同实体(如:b1->b2)
if is_self_transmit_node(path[-2], v) == 0:
for i in range(0, len(path)-1):
val_path *= G1.get_edge_data(path[i], path[i+1])['weight']
if max_path < val_path:
max_path = val_path
val_path = 1
#若目标节点为起始节点则直接跳出
else: continue ############ 有待商榷 ##############
longestpath.append(max_path)
#返回初始节点到实体的最大路径
return longestpath

def is_self_transmit_node(u, v):
'''
判断目标节点不为起始节点的自传播点
'''
flag = 0
#获得起始节点的所有自传播点
selflist = get_self_node(gllist, v)
for x in selflist:
if u == x:
flag = 1
return flag

def single_strong_infl(longestpath):
'''
计算起始点到实体的传播概率(影响强度),返回影响强度stronginfl
'''
temp = 1
for x in longestpath:
temp *= 1-x
stronginfl = 1-temp
return stronginfl

def all_strong_infl(G):
'''
获得每个节点对实体的影响概率
'''
allstrong = [] #初始化所有节点的加权影响范围列表
gnodes = [] #初始化节点列表
tempnodes = [] #初始化临时节点列表

gnodes = G.nodes()

for u in gnodes:
strong = 0 #存储初始节点对每个实体的影响范围加权,初始化为0
#重置临时节点列表
tempnodes = G.nodes()
for v in tempnodes:
#非自身节点
if u != v:
#判断目标节点不为起始节点的自传播点
if is_self_transmit_node(v, u) == 0:
#获取起始节点到实体间最大加权路径,并存入longestpath
longestpath = longest_path(gllist, u, v)

#去除已遍历目标节点的所有自传播节点
renode = get_self_node(gllist, v)
for x in renode:
if x != v:
tempnodes.remove(x)

#计算起始节点到实体间传播概率(影响强度)
stronginfl = single_strong_infl(longestpath)
strong += stronginfl

#添加单个节点到所有实体的加权影响范围
allstrong.append([u, round(strong, 2)])

#返回每个节点到所有实体的加权影响范围
return allstrong
#output allstrong : [['a1', 2.48], ['a2', 1.6880000000000002], ['b1', 0.7], ['b2', 0], ['c1', 0], ['d2', 0.6]]

def uS_e_uppergain(u, ev, S):
'''
获取节点u在集合S的基础上对实体ev的影响增益, 传入候选节点,上界gain(u|S, ev)
'''

#获取目前实体的所有自传播节点
selflist = get_self_node(gllist, ev)
stronglist = []
#遍历自传遍节点
for v in selflist:
'''
判断节点v是否存在种子集合S中
其中v为单个节点,如v(ev, Gi)
S为种子节点集合,如['a1','a2','b1','b2','c1','d2']
'''
if v in S:
ppSv = 1
else:
longestpath = []
#遍历种子集合
for s in S:

#初始化路径权值与最大路径权值
val_path = 1
max_path = 0

#遍历两点之间所有路径,并进行比对
for path in nx.all_simple_paths(G,source=s,target=v):
#判断路径后两个元素是否为相同实体(如:b1->b2)
if is_self_transmit_node(path[-2], v) == 0:
for i in range(0, len(path)-1):
val_path *= G.get_edge_data(path[i], path[i+1])['weight']
if max_path < val_path:
max_path = val_path
#重置路径权值为1
val_path = 1
#将最大加权路径存入longestpath列表
longestpath.append(max_path)
#得到上界pp(S,v)的影响概率,上界pp(S,v)
ppSv = single_strong_infl(longestpath)

stronglist.append(ppSv)
#得到上界pp(S,ev)的影响概率,上界pp(S,ev)
ppSev = single_strong_infl(stronglist)

#获取pp(u,ev)
ppuev = single_strong_infl(longest_path(gllist, u, ev))

#计算上界gain(u|S,ev)
uSevgain = (1 - ppSev) * ppuev
return uSevgain

def uppergain(u, emu, ems, S):
'''
在已有种子集合S的基础上,求得节点u的影响增益上界,
其中传进参数ems为二维列表,如[['a1',2.48],['a2',1.688]],S则为['a1','a2']
'''
uSgain = 0.0
#遍历emu得到列表形式,得到如['a1',2.48]形式
for ev in emu:
#判断节点是否存在种子集合中
if ev[0] in S:
uSgain += uS_e_uppergain(u, ev[0], S)
else:
uSgain += ev[1]

#返回上界gain(u|S)
return uSgain

def bound_base_imms(G, k):
'''
完全使用影响增益上界的方式选择top-k个种子节点的过程
'''
#初始化emu,H,初始化ems=空集,S=空集

Htemp = []
Htemp = all_strong_infl(G)
H = []
#遍历Htemp=[['a1',2.48],['a2',1.688]],得到如['a1',2.48]形式
for x in Htemp:
#逐个获取二维列表中每一行,形式为['a1',2.48,0]
H.append([x[0],x[1],0])

emu = []
emu = all_strong_infl(G)

ems = []
S = []

for i in range(k):

#提取堆顶元素,tnode的形式为['a1',2.48,0]
tnode = heapq.nlargest(1, H, key=lambda x: x[1])
#将[['b2', 3.1, 0]]格式改为['b2', 3.1, 0]格式
tnode = sum(tnode, [])

while (tnode[2] != i):
gain = 0.0
#获取节点u的影响增益上界
gain = uppergain(tnode, emu, ems, S)
#赋值影响范围
tnode[1] = gain
#修改status
tnode[2] = i

#对堆进行排序
H = heapq.nlargest(len(H), H, key=lambda x: x[1])

#获取堆顶元素
tnode = heapq.nlargest(1, H, key=lambda x: x[1])
tnode = sum(tnode, [])

#添加node到种子集合
S.append([tnode[0]])
#更新ems,添加新节点及节点对每个实体的影响范围加权
ems.append([tnode[0], tnode[1]])

#删除堆顶元素
H.remove(tnode)
print ems
return sum(S, [])

if __name__=='__main__':

#大小为k的种子集合S
k = 60

#加载文件数据,得到图G和初始列表gllist
load_graph('test.txt')

#完全使用影响增益上界值的计算过程函数,打印种子集合S
print '种子集合:',bound_base_imms(G, k)

test.txt
a1 b1 0.2 0
a1 c1 0.8 0
a2 b2 0.4 0
a2 d2 1 0
b1 c1 0.7 0
c2 a2 0.8 0
d2 b2 0.6 0
a1 a2 1 1
a2 a1 0.1 1
....
a1 l1 0.5 0
a1 m1 0.5 0
a1 q1 0.5 0
a1 v1 0.5 0
a1 z1 0.5 0
a1 s1 0.5 0
a1 w1 0.5 0
a1 u1 0.5 0
其中前两列为传播实体,第三列为实体间传播概率,最后一列为0代表同一网络传播,为1代表网络间自传播。
下来要进行优化:
1.采用独立级联模型,设置阈值
2.将最大路径改为最短路径,利用log

Ⅹ web3是什么

Web3.0,又称Web3(下文我们都用Web3来代替Web3.0),是以太坊联合创始人、Polkadot创建者Gavin Wood在2014年提出的。

热点内容
轿车看什么配置最好 发布:2025-09-15 08:26:59 浏览:919
nero加密dvd 发布:2025-09-15 08:21:31 浏览:294
美国黑帮迅雷下载ftp 发布:2025-09-15 07:13:38 浏览:394
存储干粮 发布:2025-09-15 07:04:02 浏览:835
模范编程 发布:2025-09-15 06:32:02 浏览:944
ae清缓存快捷键 发布:2025-09-15 06:28:30 浏览:871
北京房山联通服务器ip云主机 发布:2025-09-15 06:17:40 浏览:487
怎么写挂机脚本 发布:2025-09-15 06:08:59 浏览:46
win7共享文件夹脱机 发布:2025-09-15 06:06:10 浏览:504
java变量的使用 发布:2025-09-15 05:52:08 浏览:1010