LFR简单使用入门

1. 运行环境

LFR程序下载链接, 运行环境为Linux、g++

1.1 先安装build-essential:(可省略)

  
  
  1. $ sudo apt-get install build-essential

1.2 查看 gcc 版本

  
  
  1. $ gcc --version
  2. gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
  3. Copyright (C) 2011 Free Software Foundation, Inc.
  4. This is free software; see the source for copying conditions. There is NO
  5. warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

1.3 安装 统一版本的 g++

  
  
  1. $ sudo apt-get install g++

1.4 查看安装版本

  
  
  1. $ g++ --version

2. 用LFR生成网络

  • 首先跳转到 LFR 的 binary_network 目录中compile一下。
  
  
  1. $ make

这样会生成一个 benchmark 文件,它就是我们构建网络的工具。

  • 使用 benchmark 生成一个网络数据的简单的例子:
  
  
  1. $ ./benchmark -f flags.dat -t1 3

这里的 flags.dat 文件在解压缩包后就有的,它表示参数的设置。benchmark工具会根据这个flag.dat文件生成网络数据。如果要生成其他的网络,要修改这个文件的参数。

  
  
  1. $ ./benchmark [FLAG] [P]
  2. [FLAG] [P]
  3. -N number of nodes
  4. -k average degree
  5. -maxk maximum degree
  6. -mu mixing parameter
  7. -t1 minus exponent for the degree sequence
  8. -t2 minus exponent for the community size distribution
  9. -minc minimum for the community sizes
  10. -maxc maximum for the community sizes
  11. -on number of overlapping nodes
  12. -om number of memberships of the overlapping nodes
  13. -C [average clustering coefficient]
  • 关于参数mu 
    1-mu是节点与其同一个社区内的节点之间的共享比例,mu是节点与其它社区节点的共享比例。mu设置的小一点,社区内部更加紧凑。

  • 一个flag.dat文件的例子:

  
  
  1. -N 2000
  2. -k 16
  3. -maxk 60
  4. -mu 0.3
  5. -t1 2
  6. -t2 1
  7. -minc 32
  8. -maxc 40
  9. -on 0
  10. -om 0

3. 转化为gml文件

network.dat文件是得到的网络结构,每一行表示一条边。文件community.dat是该网络的真实社区结构其每一行表示 (节点、节点所在的社区)。

network.dat 和 community.dat 转化为我们需要的 LFR-1.gml 文件:

  
  
  1. #coding=utf-8
  2. import networkx as nx
  3. from collections import defaultdict
  4. def transfer_2_gml():
  5. """--------------------------------------------------------------------------
  6. function: 将LFR的network.dat和community.dat转化为.gml文件
  7. parameter:
  8. return:
  9. -------------------------------------------------------------------------------"""
  10. nodes_labels={}
  11. k=0
  12. with open("community.dat","r") as f:
  13. for line in f.readlines():
  14. items=line.strip("\r\n").split("\t")
  15. v=items[0]
  16. label=items[1]
  17. nodes_labels[v]=label
  18. #end-for
  19. #end-with
  20. G=nx.Graph()
  21. for v in nodes_labels.keys(): #添加所有的节点,并且记录其真实标签
  22. G.add_node(v, value=nodes_labels[v])
  23. edges=set()
  24. with open("network.dat","r") as f:
  25. for line in f.readlines():
  26. items=line.strip("\r\n").split("\t")
  27. a=items[0]
  28. b=items[1]
  29. if (a,b) not in edges or (b,a) not in edges:
  30. edges.add( (a,b) )
  31. #end-for
  32. #end-with
  33. for e in edges:
  34. a,b=e
  35. G.add_edge(a,b,type="Undirected")
  36. nx.write_gml(G,"LFR-1.gml")
  37. print ("transfer LFR(*.dat) data to *.gml")
  38. communities=defaultdict(lambda :[])
  39. for v in nodes_labels.keys():
  40. label=nodes_labels[v]
  41. communities[label].append(v)
  42. for c in communities.keys():
  43. print ("community ", c ,": \n", communities[c], "\n")
  44. def main():
  45. transfer_2_gml()
  46. if __name__ == '__main__':
  47. main()

4. 参考

[1] LFR程序下载

[2] LFR使用示例–github链接

Pre: sklearn决策树及可视化

Next: python旁门左道

【强烈推荐,非常好的论文】如今人们生活在一个网络无处不在的时代,例如,交通运输网、移动通信网、互联网、在线社交网等,这些网络结构复杂,人们无法直接从中提取有用信息。社区发现作为一种重要的网络分析技术,能够挖掘出网络中具有某些共性的节点集合,有助于人们更加清楚的认识网络,吸引了很多专家的注意。随着现实网络和人们需求的变化,社区发现研究的侧重点也在不断变化。最初研究静态小规模网络的社区发现算法,随后由于网络规模的增大,算法的可伸缩性受到限制,人们开始研究如何提高算法效率。鉴于网络动态变化的本质特征以及人们对社区结构准确性和实时性的要求,动态网络社区发现开始受到关注。 本文首先介绍了社区发现相关技术,分析了经典的静态和动态社区发现算法及其优缺点,例如,GN算法、KL算法、CMP算法、GraphScope算法、FaceNet算法等。然后深入分析了基于贪婪思想的SHRINK-G算法,该算法不需要用户提供参数并且对每个节点只访问一次,算法效率较高,但存在的问题是对社区边界点的处理并不合理,容易使其成为无社区归属的节点,为此我们改进SHRINK-G算法,提出了 MSHRINK-G算法。随后基于MSHRINK-G算法研究了动态网络中的社区发现问题,并提出了基于增量处理的DMSHRINK-G算法。通过在LFR合成数据集和不同规模的真实数据集上的实验结果表明,MSHRINK-G算法准确性得到较大提高,DMSHRINK-G算法能够准确处理网络变化且算法效率较高。
LFR是一种基于局部特征规则的图像检索方法,用于在数据库中搜索匹配的图像。在Matlab中,可以使用LFR benchmark程序来评估图像检索算法的性能。 LFR benchmark程序是一个开源的Matlab工具,提供了一系列的评估指标和图像数据库,可用于比较不同的图像检索算法的准确性和效率。使用LFR benchmark程序,我们可以评估一个图像检索算法在不同数据库上的检索结果,并得到一些统计数据和图表结果。 使用LFR benchmark程序评估一个图像检索算法主要分为以下几个步骤。首先,我们需要准备好待评估的图像检索算法,包括相关的函数和参数设置。然后,我们将图像数据库加载到程序中,并设置评估的参数,例如检索的数量和评估指标。 接下来,我们可以运行LFR benchmark程序来执行图像检索算法的评估。程序会自动从数据库中选择一些查询图像,并使用待评估的算法进行搜索。随后,程序会计算出检索结果的评估指标,例如准确率、召回率和F1-score等。同时,程序也会生成一些图表,用于可视化评估结果。 最后,我们可以根据LFR benchmark程序生成的评估结果,来比较不同图像检索算法的性能。通过观察各种评估指标和图表,我们可以判断出哪个算法在不同任务和数据库上表现较好,进而选择最适合我们需求的图像检索算法。 总之,LFR benchmark程序为我们提供了一个全面的评估框架,可以帮助我们快速、准确地评估图像检索算法的性能,为选择合适的算法提供参考。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值