复杂网络笔记-R语言

来源:互联网 发布:航空票务网站源码 编辑:程序博客网 时间:2024/05/16 17:40

最近学习了下复杂网络相关的东西,总结了部分基础的理论,与使用R语言igraph包,总结如下,还需要继续深入,目前只学了皮毛。

复杂网络的复杂性

1、结构复杂性
网络连接结构看上去错综复杂,网络连接结构可能是随时变化的,节点间连接可能具有不同的权重和方向。
2、节点复杂性
网络中节点可能是是具有分岔和混沌等复杂性行为的动力系统。且可能存在多种不同类型的节点,且又随时间进行演化。
3、各种复杂性因素的相互影响
实际的复杂网络会手法哦各种各样的影响和作用。此外,各种网络之间也存在密切的联系会加大分析难度。

主要研究内容

目前而言,复杂网络理论的主要研究内容可以归纳为:
1、发现:揭示刻画网络系统结构的统计性质,以及度量这些性质的合适方法;
2、建模:建立合适的网络模型以帮助人们理解这些统计性质的以及产生机理;
3、分析:基于单个节点的特性和整个网络的结构性质分析与预测网络的行为;
4、控制:提出改善已有网络性能和设计新的网络的有效方法,特别是稳定性、同步和数据流通方面。

复杂网络的基本概念

常用表达:D网络直径;N点数;M边数
1、平均路径长度,也称网络的特征路径长度,其中dij表示节点间距离,N为点数;
这里写图片描述
2、聚类系数;
这里写图片描述
整个网络的聚类系数C就是所有节点i的聚类系数的平均值(0-1区间)。
3、度分布;
度即为该节点连接其他节点的数目,一般用ki表示。有向网络中节点的度分为出度和入度,出度即该节点只想其他节点的数目,入度即其他节点指向该节点的数据。直观上看,一个节点的度越大意味着这个节点在某种意义上越重要。所有节点的度的平均值成为网络的平均度,记作网络中的节点的度的分布情况可硬分布函数P(k)来描述,表示一个随机选定的节点的度恰好为k的概率。
度的分布一般有两种形式:Poisson分布,对应均匀网络;以及幂律分布,也称无标度分布,对应无标度网络这里写图片描述,幂律分布曲线比Poisson指数分布曲线下降要缓慢的多;
这里写图片描述
一个度分布具有适当的幂指数的幂律形式的大规模无标度网络中,绝大部分的节点的度相对很低,但存在少量的度相对很高的节点为非均匀网络,而那些度相对很高的节点称为网络的集线器。
无标度网络与随机网络对比,便于理解区分,参考下图:
这里写图片描述
累计度分布函数:表示度数据的一种方法;
这里写图片描述
这里写图片描述

实际网络统计性质

测量性质:
1、有向或无向;
2、节点总数N;
3、边的总数M(是否考虑重边);
4、平均度数;
5、平均路径长度;
6、聚类系数;
7、若符合幂律,则给出幂指数r(有向网络,则需分别给出入度指数和出度指数);

网络拓扑基本模型及性质

  • 规则网络
    1、全局耦合网络:任意两个点之间都直接相连,在所有相同节点数的网络中,具有最小平均路径长度和最大聚类系数,但不适用实际中。
    2、最近邻耦合网络:每一个节点只和。它周围的邻居节点相连。对于较大的K值,最近邻耦合网络的聚类系数为
    这里写图片描述
    这样的网络是高度聚类的,其不属于小世界网络。
    3、星形耦合网络:只有一个中心点,其余的N-1个点都只与这个中心点连接,而他们彼此间不连接。
    这里写图片描述
  • 随机图
    典型案例:ER随机图:对于给定概率下,要么每个图都具有某个性质,要么几乎每个图都不具备该性质;ER随机图中两个节点之间无论是否具有共同的邻居节点,其连接概率均为p,大规模的稀疏ER随机图没有聚类特性。
  • 小世界网络模型
    既具有较短的平均路径长度,又具有较高的聚类系数的网络称为小世界网络。
    这里写图片描述
    这里写图片描述
    这里写图片描述
    1、聚类系数
    这里写图片描述
    2、平均路径长度
    这里写图片描述
    3、度分布
    这里写图片描述
    小波分析
    这里写图片描述
  • 无标度网络模型
    1、BA无标度网络
    无标度网络特点:连接度的分布函数具有幂律形式,网络节点的连接度没有明显的特征长度;
    考虑到实际网络中两个重要特性:
    增长特性:网络的规模是不断扩大的。
    优先连接:新的节点更倾向于与那些具有较高连接度的大节点相连接。
    BA无标度模型很好的体现了科学研究中的从复杂现象提取简单本质的特点.BA模型只能生成度分布幂律指数固定为3的无标度网络,而各种实际复杂网络的墨绿指数则不甚相同,且大都属于2至3的范围内。
    这里写图片描述
    平均路径长度&聚类系数&度分布
    这里写图片描述
    鲁棒性与脆弱性
    如果在一走少量节点后的网络中的绝大部分节点仍是连通的,那么就称该网络的连通性对节点故障具有鲁棒性。
    适用度模型
    这里写图片描述
    局域世界演化模型构造算法
    这里写图片描述

子图与模体:子图描绘了从局部层次刻画一个给定网络的相互连接的特定模式。复杂网络中可能包含各种各样的子图,如三角形、正方体和五角形等,其中的一些子图所占的比例明显高于统一网络的完全随机化形式中这些子图所占的比例。这些子图就成为模体。
等级网络
实际系统中可能同时存在模块性、局部聚类、无标度拓扑特性,这时需要假设模块以某种迭代的方式生成了一个等级网络。
典型例子如下图,利用模块生成等级网络:
这里写图片描述
等级网络模型恰好将无标度拓扑与内在的模块结构集成起来,等级模块性的一个最重要的量化标志是节点聚类系数服从幂律这里写图片描述这表明度很小的节点具有高的聚类系数且属于高度连接的小模块
超家族
复杂网络的自相似性


未完待续。。。。


R语言相关操作

复杂网络关于R部分将目前自己整理了解的部分归纳一下。
从前面复杂网络部分的理论知识,知道复杂网络的基本统计性质有六点以了解网络概况:平均路径长度、聚类系数、度分布、有向或无向、节点总数N、边的总数M。利用igraph包来获取这些性质以及一些说明节点及边重要性指标例如点度中心度、接近中心度、中间中心度、特征向量中心度,可参考这个博客,这些指标在社交网络、推荐算法以及其他一些实际应用中均有一定作用,目前在这些模块还未有深入研究,只是大致了解了下,就不多写了。

实际操作:
1、随机网络和无标度网络,我们已经知道随机网络服从possion分布,无标度网络服从幂律分布,从下面可以具体看一下,随机网络度分布图。

library(igraph)library(plyr)g<-erdos.renyi.game(100,0.4,directed=T)#生成ER随机图表degree<-degree(g,mode="all",normalized=T)#mode=in点入度;out=点出度;total点度中心度,三者统称绝对点中心度,相对点中心度=绝对点中心度/最大度数plot(table(degree),type="h")#绘制直方图

随机网络度分布

2、相关指标计算

g<-erdos.renyi.game(100,0.4,directed=T)#生成ER随机图表m<-gsize(g)#获取边数n<-vcount(g)#获取顶点数l<-mean_distance(g)##计算平均路径长度c<-transitivity(g)#计算聚类系数degree<-degree(g,mode="all",normalized=T)#mode=in点入度;out=点出度;total点度中心度,三者统称绝对点中心度,相对点中心度=绝对点中心度/最大度数table(degree)#度统计plot(table(degree),type="h")#绘制直方图degree.distribution(g)#查看度分布closeness(g,mode="in")##计算接近中心度,点与其他点距离之和的倒数order(closeness(g,mode="in"))#排序betweenness(g,normalized=T)#查看点的中间中心度,代表最短距离是否经过该点edge.betweenness(g)#查看线的中间中心度evcent(g,scale = F)$vector#计算点的特征向量中心度page.rank(g)$vector#计算邻接矩阵,计算点的特征向量中心度

3、复杂网络数据导出

g<-erdos.renyi.game(100,0.4,directed=T)#生成ER随机图表data_m<-as_data_frame(g, what="edges")##获取边数据data_m2<-as_adjacency_matrix(g)##数据转化为邻接矩阵g2<-graph_from_data_frame(data_m, directed =F, vertices = NULL)##基于边数据转化网络图plot(g2,layout=layout.grid)#以图形展示g3<-graph.adjacency(data_m2,mode="undirected")##基于邻接矩阵数据转化网络图plot(g3,layout=layout.grid)

4、复杂网络图形设置

##无障碍##g1<-graph.lattice(c(6,6,1),directed=T,mutual = T)#生成一个6*6的矩阵V(g1)$name<-c(11,12,13,14,15,16,21,22,23,24,25,26,31,32,33,34,35,36,41,42,43,44,45,46,51,52,53,54,55,56,61,62,63,64,65,66)#设置顶点名称V(g1)$color<-"pink"#设置顶点颜色V(g1)$size<-12#设置顶点大小pa<-get.all.shortest.paths(g1,which(V(g1)$name==11),which(V(g1)$name==66))$res[[1]]##最短路径算法V(g1)[pa]$color<-"green"#E(g1)$color<-"grey"E(g1,path=pa)$color<-"red"#设置边颜色plot(g1,layout=layout.grid)##随机生成一个图random<-erdos.renyi.game(50,0.2,directed=T)#gnm<-sample_gnm(10,20,directed = F)#基于gnm生成图#gnp<-sample_gnp(10,0.3,directed = F)#基于gnp生成图V(random)$color<-"pink"#设置顶点颜色V(random)$size<-10#设置顶点大小E(random)$color<-"grey"#设置边颜色pa<-get.all.shortest.paths(random,1,20)$res[[1]]##最短路径算法E(random,path=pa)$color<-"red"#设置路径边的颜色plot(random,layout=layout.fruchterman.reingold)

6*6矩阵,指定点到点的最短路径算法结果如下图:
这里写图片描述
随机生成网络图,指定点到点的最短路径算法结果如下图:
这里写图片描述

0 0
原创粉丝点击