社團(tuán)發(fā)現(xiàn)算法-BGLL算法(附代碼實(shí)現(xiàn))

一、社團(tuán)發(fā)現(xiàn)算法

人們發(fā)現(xiàn)許多實(shí)際網(wǎng)絡(luò)均具有社團(tuán)結(jié)構(gòu)戴尸, 即整個(gè)網(wǎng)絡(luò)由若干個(gè)社團(tuán)組成笑跛,社團(tuán)之間的連接相對稀疏、社團(tuán)內(nèi)部的連接相對稠密逢渔。社團(tuán)發(fā)現(xiàn)則是利用圖拓?fù)浣Y(jié)構(gòu)中所蘊(yùn)藏的信息從復(fù)雜網(wǎng)絡(luò) 中解析出其模塊化的社團(tuán)結(jié)構(gòu)肋坚,該問題的深入研 究有助于以一種分而治之的方式研究整個(gè)網(wǎng)絡(luò)的 模塊、功能及其演化肃廓,更準(zhǔn)確地理解復(fù)雜系統(tǒng)的組 織原則智厌、拓?fù)浣Y(jié)構(gòu)與動(dòng)力學(xué)特性,具有十分重要的 意義盲赊。

社團(tuán)發(fā)現(xiàn)算法派系繁多铣鹏,在這里我們重點(diǎn)介紹非重疊社團(tuán)發(fā)現(xiàn)算法,參照《復(fù)雜網(wǎng)絡(luò)社團(tuán)發(fā)現(xiàn)算法研究新進(jìn)展》中大致可分為以下幾類

  1. 基于模塊度優(yōu)化的社團(tuán)發(fā)現(xiàn)算法
  2. 基于譜分析的社團(tuán)發(fā)現(xiàn)算法
  3. 基于信息論的社團(tuán)發(fā)現(xiàn)算法
  4. 基于標(biāo)號傳播的社團(tuán)發(fā)現(xiàn)算法

基于模塊度優(yōu)化的社團(tuán)發(fā)現(xiàn)算法是目前研究最多的一類算法哀蘑,其思想是將社團(tuán)發(fā)現(xiàn)問題定義 為優(yōu)化問題诚卸,然后搜索目標(biāo)值最優(yōu)的社團(tuán)結(jié)構(gòu)。 由 Newman 等 首先提出的模塊度 Q值是目前使 用最廣泛的優(yōu)化目標(biāo)绘迁,該指標(biāo)通過比較真實(shí)網(wǎng)絡(luò) 中各社團(tuán)的邊密度和隨機(jī)網(wǎng)絡(luò)中對應(yīng)子圖的邊密 度之間的差異來度量社團(tuán)結(jié)構(gòu)的顯著性合溺。模塊度 優(yōu)化算法根據(jù)社團(tuán)發(fā)現(xiàn)時(shí)的計(jì)算順序大致可分為 三類:

  1. 第一類算法采用聚合思想,自底向上進(jìn)行缀台,典型代表算法有 Newman快速算法 棠赛、CNM算法 和 MSG-MV算法等
  2. 第二類算法主要采用分裂的思想,自頂向下 進(jìn)行。如GN算法等
  3. 第三類算法則是直接尋優(yōu)法恭朗。如EO算法

BGLL算法就屬于基于模塊度優(yōu)化中的聚合類算法屏镊,自底向上的不斷聚合,下面主要介紹下BGLL算法痰腮。

二而芥、BGLL算法

論文:Fast unfolding of communities in large networks

2.1 BGLL算法優(yōu)點(diǎn)

  1. 速度快,可以處理大規(guī)模網(wǎng)絡(luò)膀值。處理1億+節(jié)點(diǎn)的網(wǎng)絡(luò)只需要158分鐘
  2. 可發(fā)現(xiàn)不同粒度的社區(qū)棍丐。由于是自底向上的聚合發(fā)現(xiàn)社區(qū),每次迭代后都會(huì)得到一個(gè)粒度的社團(tuán)結(jié)構(gòu)
  3. 無需指定社團(tuán)數(shù)量沧踏,當(dāng)模塊度不再增益時(shí)自動(dòng)停止

2.2 BGLL算法流程

image
image.gif

?

BGLL算法主要分為兩步:

第一步:假設(shè)網(wǎng)絡(luò)中有N個(gè)節(jié)點(diǎn)歌逢,首先我們給每個(gè)節(jié)點(diǎn)分配一個(gè)社區(qū),所以初始階段有多少個(gè)節(jié)點(diǎn)就有多少個(gè)社區(qū)翘狱。然后秘案,對于網(wǎng)絡(luò)中每個(gè)節(jié)點(diǎn)i,我們考慮他所有的鄰居節(jié)點(diǎn)j,我們評估當(dāng)把節(jié)點(diǎn)i從它所在的社區(qū)移動(dòng)到其鄰居j所在的社區(qū)時(shí),模塊度的增量變化潦匈,我們把節(jié)點(diǎn)i移動(dòng)到使模塊度增加最大的節(jié)點(diǎn)j所在的社區(qū)阱高。如果所有計(jì)算出來的增益都不是正數(shù),則將該節(jié)點(diǎn)仍處于原社區(qū)中茬缩。該過程對所有的節(jié)點(diǎn)重復(fù)并且按順序應(yīng)用赤惊,直到?jīng)]有節(jié)點(diǎn)移動(dòng),則第一個(gè)過程停止凰锡,也就是任何一個(gè)節(jié)點(diǎn)的移動(dòng)都不會(huì)導(dǎo)致模塊度的增加未舟。從該過程可以肯定,有些節(jié)點(diǎn)會(huì)被不止一次的考慮到掂为。當(dāng)然節(jié)點(diǎn)考慮順序?qū)λ惴ㄗ詈蟮妮敵鲆彩怯杏绊懙脑0颍亲詈髮ψ詈笏鶆澐值纳鐓^(qū)的模塊度影響不大。但是節(jié)點(diǎn)的排序順序是可以影響算法的運(yùn)行時(shí)間的勇哗。
每一次節(jié)點(diǎn)移動(dòng)一個(gè)孤立節(jié)點(diǎn)到其鄰居所在的社團(tuán)模塊度增益為ΔQ:

image
image.gif

?

其中∑in∑in是社區(qū)C內(nèi)部的所有邊的權(quán)重之和魂角,∑tot∑tot是社區(qū)C中所有節(jié)點(diǎn)相關(guān)的邊的權(quán)重之和。kiki是發(fā)生在節(jié)點(diǎn)i上的所有邊的權(quán)重之和智绸。ki,inki,in是節(jié)點(diǎn)i到社區(qū)C中的所有節(jié)點(diǎn)的邊的權(quán)重和野揪,m是網(wǎng)絡(luò)中所有邊的權(quán)重之和。

第二步:用第一部分所劃分出來的社區(qū)當(dāng)作節(jié)點(diǎn)組成一個(gè)新的網(wǎng)絡(luò)瞧栗。新節(jié)點(diǎn)之間的邊的權(quán)重為兩個(gè)新節(jié)點(diǎn)之間(其實(shí)是兩個(gè)社區(qū)之間)原本的權(quán)重之和斯稳。處在同一個(gè)社區(qū)中的節(jié)點(diǎn)之間的邊導(dǎo)致新網(wǎng)絡(luò)中該新節(jié)點(diǎn)有自環(huán)的邊。然后對于構(gòu)建的新網(wǎng)絡(luò)使用第一部分的方法進(jìn)行迭代迹恐。當(dāng)網(wǎng)絡(luò)不再改變也就是出現(xiàn)了最大模塊度的時(shí)候停止迭代挣惰。

三、JAVA實(shí)現(xiàn)

BGLL算法JAVA實(shí)現(xiàn)

Qucik Start

example

    BGLL bgll = new BGLL()
    //inputPath is a origin network file
    //outPath is the result
    bgll.excuteBGLL(String inputPath, String outPath)
image.gif

input

a file like this: the first column is the id of nodeA,the second column is the id of nodeB,the last column is weight between nodeA and nodeB.The weight can be both integer and float.

1,2,14
2,3,10
1,4,9
2,3,6

image.gif

output

the output is the result of Hierarchical Clustering.there shows a faked result so that we can understand the output.

1,1,1
2,1,1
3,2,1
4,2,1
5,3,2
6,3,2
7,4,2
8,4,2

image.gif

As the output show,there are 8 nodes in the network.the first column is the id of nodes,the the second column is the community id of the first clustering,we get 4 community in the first step.The final column is the community id of the last step clustering,the 8 nodes final divided into 2 clusters.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市憎茂,隨后出現(xiàn)的幾起案子珍语,更是在濱河造成了極大的恐慌,老刑警劉巖竖幔,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件板乙,死亡現(xiàn)場離奇詭異,居然都是意外死亡拳氢,警方通過查閱死者的電腦和手機(jī)募逞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來馋评,“玉大人放接,你說我怎么就攤上這事×籼兀” “怎么了纠脾?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長蜕青。 經(jīng)常有香客問我乳乌,道長,這世上最難降的妖魔是什么市咆? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮再来,結(jié)果婚禮上蒙兰,老公的妹妹穿的比我還像新娘。我一直安慰自己芒篷,他們只是感情好搜变,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著针炉,像睡著了一般挠他。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上篡帕,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天殖侵,我揣著相機(jī)與錄音,去河邊找鬼镰烧。 笑死拢军,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的怔鳖。 我是一名探鬼主播茉唉,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了度陆?” 一聲冷哼從身側(cè)響起艾凯,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎懂傀,沒想到半個(gè)月后趾诗,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鸿竖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年沧竟,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片缚忧。...
    茶點(diǎn)故事閱讀 39,841評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡悟泵,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出闪水,到底是詐尸還是另有隱情糕非,我是刑警寧澤,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布球榆,位于F島的核電站朽肥,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏持钉。R本人自食惡果不足惜衡招,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望每强。 院中可真熱鬧始腾,春花似錦、人聲如沸空执。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽辨绊。三九已至奶栖,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間门坷,已是汗流浹背宣鄙。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留默蚌,地道東北人框冀。 一個(gè)月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像敏簿,于是被迫代替她去往敵國和親明也。 傳聞我的和親對象是個(gè)殘疾皇子宣虾,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評論 2 354

推薦閱讀更多精彩內(nèi)容