社交網絡算法


社交網絡算法

1、應用場景

在社交網絡中社區圈子的識別

基於好友關系為用戶推薦商品或內容

社交網絡中人物影響力的計算

信息在社交網絡上的傳播模型

虛假信息和機器人賬號的識別

基於社交網絡信息對股市的預測

互聯網金融行業中的反欺詐模型

2、社交網絡算法的分析指標

1)度(Degree)

連接點活躍性的度量;與點相連的邊的數目。在有向圖中,以頂點A為起點記為出度(out degree)OD(A),以頂點A為終點入度(In degree)ID(A),則頂點A的度為D(A) = OD(A) + ID(A)。

計算方法:

g = Graph([(0,1), (0,2), (2,3), (3,4), (4,2), (2,5), (5,0), (6,3), (5,6)])

g.degree()

 

ecount = g.ecount()#統計邊的數目

vcount = g.vcount()#統計節點數目

maxdegree = g.maxdegree()#最大度值

 

2)緊密中心性(closness centrality)

節點V到達其他節點的難易程度,也就是到其他所有節點距離的平均值的倒數。

 

 

實現方法:

ccvs = []

for p in zip(g.vs, g.closeness()):

    ccvs.append({"name": p[0], ["name"], "cc": p[1]})

sorted(ccvs, key=lambda k: k['cc'], reverse=True)[:10]

 

3)介數中心性

如果一個成員A位於其他成員的多條最短路徑上,那么成員A的作用就比較大,也具有較大的介數中心性。

本質:網絡中包含成員B的所有最短路徑條數占所有最短路徑條數的百分比。

 

 

計算步驟:

1.計算每對節點(i,j)的最短路徑(需要得到具體的路徑)

2. 對各節點判斷v是否在最短路徑下

3. 累加經過v的最短路徑條數

btvs = []

for p in zip(g.vs, g.betweenness()):

    btvs.append({"name": p[0]["name"], "bt": p[1]})

sorted(btvs, key=lambda k: k['bt'], reverse=True)[:10]

 

3、社區發現算法

3.1 GN 算法

邊介數(betweenness):

網絡中經過該邊的最短路徑占所有最短路徑的比例。

 

GN算法計算步驟:

1. 計算網絡中所有邊的介數

2. 找到介數最高的邊,並將它從網絡中移除

3. 重復以上步驟,直到每個節點就是一個社區為止。

 

 

3.2 Louvain 算法

Louvain算法是基於模塊度的算法,其優化目標就是最大化整個社區網絡結構的模塊度。

 

模塊度

它的物理含義是社區內節點的連邊數與隨機情況下節點的連邊數之差,它可以衡量一個社區緊密程度的度量。因此模塊度就可以作為優化函數優化社區的分類。

計算方法如下:

 

 

其中,Aij節點i和節點j之間邊的權重,網絡不是帶權圖時,所有邊的權重可以看做是1;ki=∑jAij表示所有與節點i相連的邊的權重之和(度數);ci表示節點i所屬的社區;m=∑ijAij表示所有邊的權重之和(邊的數目), 取值范圍:[-1/2, 1)。

 

公式中Aij−=Aij−ki,節點j連接到任意一個節點的概率是現在節點i有ki的度數,因此在隨機情況下節點i與j的邊為.

 

δ(ci, cj)將所有的節點都限制在一個社區中,另一個重點是ki和kj都是包括與其他社區相連的邊數,因此是在隨機情況下節點i和節點j的邊數。

 

基於模塊度的社區發現算法,都是以最大化模塊度Q為目標。

 

 

 

算法思想

Louvain算法的思想很簡單:

 

1)將圖中的每個節點看成一個獨立的社區,次數社區的數目與節點個數相同;

 

2)對每個節點i,依次嘗試把節點i分配到其每個鄰居節點所在的社區,計算分配前與分配后的模塊度變化Delta Q,並記錄Delta Q最大的那個鄰居節點,如果maxDelta Q>0,則把節點i分配Delta Q最大的那個鄰居節點所在的社區,否則保持不變;

 

3)重復2),直到所有節點的所屬社區不再變化;

 

4)對圖進行壓縮,將所有在同一個社區的節點壓縮成一個新節點,社區內節點之間的邊的權重轉化為新節點的環的權重,社區間的邊權重轉化為新節點間的邊權重;

 

5)重復1)直到整個圖的模塊度不再發生變化。

 

使用圖來表示算法的過程:

 

 

 

 

3.3 LPA與SLPA

LPA算法思想:

1. 初始化每個節點,並賦予唯一標簽

2. 根據鄰居節點最常見的標簽更新每個節點的標簽

3. 最終收斂后標簽一致的節點屬於同一社區

 

SLPA算法思想:

SLPA是LPA的擴展。

1. 給每個節點設置一個list存儲歷史標簽

2. 每個speaker節點帶概率選擇自己標簽列表中標簽傳播給listener節點。(兩個節點互為鄰居節點)

3. 節點將最熱門的標簽更新到標簽列表中

4. 使用閥值去除低頻標簽,產出標簽一致的節點為社區。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM