複雜網絡筆記-R語言

最近學習了下複雜網絡相關的東西,總結了部分基礎的理論,與使用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矩陣,指定點到點的最短路徑算法結果如下圖:
這裏寫圖片描述
隨機生成網絡圖,指定點到點的最短路徑算法結果如下圖:
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章