社交网络算法
社交網(wǎng)絡(luò)算法
1、應(yīng)用場景
在社交網(wǎng)絡(luò)中社區(qū)圈子的識別
基于好友關(guān)系為用戶推薦商品或內(nèi)容
社交網(wǎng)絡(luò)中人物影響力的計算
信息在社交網(wǎng)絡(luò)上的傳播模型
虛假信息和機器人賬號的識別
基于社交網(wǎng)絡(luò)信息對股市的預(yù)測
互聯(lián)網(wǎng)金融行業(yè)中的反欺詐模型
2、社交網(wǎng)絡(luò)算法的分析指標
1)度(Degree)
連接點活躍性的度量;與點相連的邊的數(shù)目。在有向圖中,以頂點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()#統(tǒng)計邊的數(shù)目
vcount = g.vcount()#統(tǒng)計節(jié)點數(shù)目
maxdegree = g.maxdegree()#最大度值
?
2)緊密中心性(closness centrality)
節(jié)點V到達其他節(jié)點的難易程度,也就是到其他所有節(jié)點距離的平均值的倒數(shù)。
?
?
實現(xiàn)方法:
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)介數(shù)中心性
如果一個成員A位于其他成員的多條最短路徑上,那么成員A的作用就比較大,也具有較大的介數(shù)中心性。
本質(zhì):網(wǎng)絡(luò)中包含成員B的所有最短路徑條數(shù)占所有最短路徑條數(shù)的百分比。
?
?
計算步驟:
1.計算每對節(jié)點(i,j)的最短路徑(需要得到具體的路徑)
2. 對各節(jié)點判斷v是否在最短路徑下
3. 累加經(jīng)過v的最短路徑條數(shù)
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、社區(qū)發(fā)現(xiàn)算法
3.1 GN 算法
邊介數(shù)(betweenness):
網(wǎng)絡(luò)中經(jīng)過該邊的最短路徑占所有最短路徑的比例。
?
GN算法計算步驟:
1. 計算網(wǎng)絡(luò)中所有邊的介數(shù)
2. 找到介數(shù)最高的邊,并將它從網(wǎng)絡(luò)中移除
3. 重復(fù)以上步驟,直到每個節(jié)點就是一個社區(qū)為止。
?
?
3.2 Louvain 算法
Louvain算法是基于模塊度的算法,其優(yōu)化目標就是最大化整個社區(qū)網(wǎng)絡(luò)結(jié)構(gòu)的模塊度。
?
模塊度
它的物理含義是社區(qū)內(nèi)節(jié)點的連邊數(shù)與隨機情況下節(jié)點的連邊數(shù)之差,它可以衡量一個社區(qū)緊密程度的度量。因此模塊度就可以作為優(yōu)化函數(shù)優(yōu)化社區(qū)的分類。
計算方法如下:
?
?
其中,Aij節(jié)點i和節(jié)點j之間邊的權(quán)重,網(wǎng)絡(luò)不是帶權(quán)圖時,所有邊的權(quán)重可以看做是1;ki=∑jAij表示所有與節(jié)點i相連的邊的權(quán)重之和(度數(shù));ci表示節(jié)點i所屬的社區(qū);m=∑ijAij表示所有邊的權(quán)重之和(邊的數(shù)目), 取值范圍:[-1/2, 1)。
?
公式中Aij?=Aij?ki,節(jié)點j連接到任意一個節(jié)點的概率是現(xiàn)在節(jié)點i有ki的度數(shù),因此在隨機情況下節(jié)點i與j的邊為.
?
δ(ci, cj)將所有的節(jié)點都限制在一個社區(qū)中,另一個重點是ki和kj都是包括與其他社區(qū)相連的邊數(shù),因此是在隨機情況下節(jié)點i和節(jié)點j的邊數(shù)。
?
基于模塊度的社區(qū)發(fā)現(xiàn)算法,都是以最大化模塊度Q為目標。
?
?
?
算法思想
Louvain算法的思想很簡單:
?
1)將圖中的每個節(jié)點看成一個獨立的社區(qū),次數(shù)社區(qū)的數(shù)目與節(jié)點個數(shù)相同;
?
2)對每個節(jié)點i,依次嘗試把節(jié)點i分配到其每個鄰居節(jié)點所在的社區(qū),計算分配前與分配后的模塊度變化Delta Q,并記錄Delta Q最大的那個鄰居節(jié)點,如果maxDelta Q>0,則把節(jié)點i分配Delta Q最大的那個鄰居節(jié)點所在的社區(qū),否則保持不變;
?
3)重復(fù)2),直到所有節(jié)點的所屬社區(qū)不再變化;
?
4)對圖進行壓縮,將所有在同一個社區(qū)的節(jié)點壓縮成一個新節(jié)點,社區(qū)內(nèi)節(jié)點之間的邊的權(quán)重轉(zhuǎn)化為新節(jié)點的環(huán)的權(quán)重,社區(qū)間的邊權(quán)重轉(zhuǎn)化為新節(jié)點間的邊權(quán)重;
?
5)重復(fù)1)直到整個圖的模塊度不再發(fā)生變化。
?
使用圖來表示算法的過程:
?
?
?
?
3.3 LPA與SLPA
LPA算法思想:
1. 初始化每個節(jié)點,并賦予唯一標簽
2. 根據(jù)鄰居節(jié)點最常見的標簽更新每個節(jié)點的標簽
3. 最終收斂后標簽一致的節(jié)點屬于同一社區(qū)
?
SLPA算法思想:
SLPA是LPA的擴展。
1. 給每個節(jié)點設(shè)置一個list存儲歷史標簽
2. 每個speaker節(jié)點帶概率選擇自己標簽列表中標簽傳播給listener節(jié)點。(兩個節(jié)點互為鄰居節(jié)點)
3. 節(jié)點將最熱門的標簽更新到標簽列表中
4. 使用閥值去除低頻標簽,產(chǎn)出標簽一致的節(jié)點為社區(qū)。
?
轉(zhuǎn)載于:https://www.cnblogs.com/yongfuxue/p/10039202.html
總結(jié)
- 上一篇: 【黑客工作台特效-----附 效果 +
- 下一篇: Fildder教程