0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

發(fā)現(xiàn)一個(gè)寶藏Python庫,玩社區(qū)發(fā)現(xiàn)算法的不能錯(cuò)過!

Android編程精選 ? 來源:任識(shí)算法 ? 2023-02-08 11:11 ? 次閱讀
網(wǎng)絡(luò)是由一些緊密相連的節(jié)點(diǎn)組成的,并且根據(jù)不同節(jié)點(diǎn)之間連接的緊密程度,網(wǎng)絡(luò)也可視為由不同簇組成。簇內(nèi)的節(jié)點(diǎn)之間有著更為緊密的連接,不同簇之間的連接則相對(duì)稀疏。這種簇被稱為網(wǎng)絡(luò)中的社區(qū)結(jié)構(gòu)(community structure)。

由此衍生出來的社區(qū)發(fā)現(xiàn)(community detection)算法用來發(fā)現(xiàn)網(wǎng)絡(luò)中的社區(qū)結(jié)構(gòu),這類算法包括Louvain 算法、Girvan-Newman 算法以及 Bron-Kerbosch 算法等。

最近,在 GitHub 上發(fā)現(xiàn)了一個(gè)可以發(fā)現(xiàn)圖中社區(qū)結(jié)構(gòu)的 Python 庫 communities,該庫由軟件工程師 Jonathan Shobrook 創(chuàng)建。

6aa6c156-a736-11ed-bfe3-dac502259ad0.png

項(xiàng)目地址:https://github.com/shobrook/communities

首先,該庫可以實(shí)現(xiàn)以下幾種社區(qū)發(fā)現(xiàn)算法:

  • Louvain 算法
  • Girvan-Newman 算法
  • 層次聚類
  • 譜聚類
  • Bron-Kerbosch 算法

其次,用戶還可以使用 communities 庫來可視化上述幾種算法,下圖為空手道俱樂部(Zachary's karate club)網(wǎng)絡(luò)中 Louvain 算法的可視化結(jié)果:

6abd92c8-a736-11ed-bfe3-dac502259ad0.gif

該庫的安裝方法也非常簡單,可采用 pip 的方式安裝 communities,代碼如下:

importnumpyasnp

fromcommunities.algorithmsimportlouvain_method

adj_matrix=np.array([[0,1,1,0,0,0],
[1,0,1,0,0,0],
[1,1,0,1,0,0],
[0,0,1,0,1,1],
[0,0,0,1,0,1],
[0,0,0,1,1,0]])

communities,_=louvain_method(adj_matrix)

>>communities
[{0,1,2},{3,4,5}]

對(duì)于這個(gè) Python 庫,很多網(wǎng)友給予了高度評(píng)價(jià),表示會(huì)去嘗試。

6b316234-a736-11ed-bfe3-dac502259ad0.png

算法詳解

1、Louvain 算法

louvain_method(adj_matrix:numpy.ndarray,n:int=None)->list

該算法來源于文章《Fast unfolding of communities in large networks》,簡稱為 Louvian。

作為一種基于模塊度(Modularity)的社區(qū)發(fā)現(xiàn)算法,Louvain 算法在效率和效果上都表現(xiàn)比較好,并且能夠發(fā)現(xiàn)層次性的社區(qū)結(jié)構(gòu),其優(yōu)化的目標(biāo)是最大化整個(gè)圖屬性結(jié)構(gòu)(社區(qū)網(wǎng)絡(luò))的模塊度。

Louvain 算法對(duì)最大化圖模塊性的社區(qū)進(jìn)行貪婪搜索。如果一個(gè)圖具有高密度的群體內(nèi)邊緣和低密度的群體間邊緣,則稱之為模圖。

示例代碼如下:

fromcommunities.algorithmsimportlouvain_methodad

j_matrix=[...]

communities,_=louvain_method(adj_matrix)

2、Girvan-Newman 算法

girvan_newman(adj_matrix:numpy.ndarray,n:int=None)->list

該算法來源于文章《Community structure in social and biological networks》。

Girvan-Newman 算法迭代刪除邊以創(chuàng)建更多連接的組件。每個(gè)組件都被視為一個(gè) community,當(dāng)模塊度不能再增加時(shí),算法停止去除邊緣。

示例代碼如下:

fromcommunities.algorithmsimportgirvan_newman

adj_matrix=[...]

communities,_=girvan_newman(adj_matrix)

3、層次聚類

hierarchical_clustering(adj_matrix:numpy.ndarray,metric:str="cosine",linkage:str="single",n:int=None)->list

層次聚類實(shí)現(xiàn)了一種自底向上、分層的聚類算法。每個(gè)節(jié)點(diǎn)從自己 的社區(qū)開始,然后,隨著層次結(jié)構(gòu)的建立,最相似的社區(qū)被合并。社區(qū)會(huì)一直被合并,直到在模塊度方面沒有進(jìn)一步的進(jìn)展。

示例代碼如下:

fromcommunities.algorithmsimporthierarchical_clustering

adj_matrix=[...]

communities=hierarchical_clustering(adj_matrix,metric="euclidean",linkage="complete")

4、譜聚類

spectral_clustering(adj_matrix:numpy.ndarray,k:int)->list

這種類型的算法假定鄰接矩陣的特征值包含有關(guān)社區(qū)結(jié)構(gòu)的信息。

示例代碼如下:

fromcommunities.algorithmsimportspectral_clustering

adj_matrix=[...]

communities=spectral_clustering(adj_matrix,k=5)

5、Bron-Kerbosch 算法

bron_kerbosch(adj_matrix:numpy.ndarray,pivot:bool=False)->list
Bron-Kerbosch 算法實(shí)現(xiàn)用于最大團(tuán)檢測maximal clique detection)。圖中的最大團(tuán)是形成一個(gè)完整圖的節(jié)點(diǎn)子集,如果向該子集中添加其他節(jié)點(diǎn),則它將不再完整。將最大團(tuán)視為社區(qū)是合理的,因?yàn)閳F(tuán)是圖中連接最緊密的節(jié)點(diǎn)群。因?yàn)橐粋€(gè)節(jié)點(diǎn)可以是多個(gè)社區(qū)的成員,所以該算法有時(shí)會(huì)識(shí)別重疊的社區(qū)。示例代碼如下:
fromcommunities.algorithmsimportbron_kerbosch

adj_matrix=[...]

communities=bron_kerbosch(adj_matrix,pivot=True)

可視化

繪圖

draw_communities(adj_matrix:numpy.ndarray,communities:list,dark:bool=False,filename:str=None,seed:int=1)

可視化圖(graph),將節(jié)點(diǎn)分組至它們所屬的社區(qū)和顏色編碼中。返回代表繪圖的 matplotlib.axes.Axes。示例代碼如下:

fromcommunities.algorithmsimportlouvain_method

fromcommunities.visualizationimportdraw_communities

adj_matrix=[...]

communities,frames=louvain_method(adj_matrix)

draw_communities(adj_matrix,communities)

可視化圖如下:

6b4d0958-a736-11ed-bfe3-dac502259ad0.jpg

Louvain 算法的動(dòng)圖展示

louvain_animation(adj_matrix:numpy.ndarray,frames:list,dark:bool=False,duration:int=15,filename:str=None,dpi:int=None,seed:int=2)

Louvain 算法在圖中的應(yīng)用可以實(shí)現(xiàn)動(dòng)圖展示,其中每個(gè)節(jié)點(diǎn)的顏色代表其所屬的社區(qū),并且同一社區(qū)中的節(jié)點(diǎn)聚類結(jié)合在一起。

示例代碼如下:

fromcommunities.algorithmsimportlouvain_method

fromcommunities.visualizationimportlouvain_animation

adj_matrix=[...]

communities,frames=louvain_method(adj_matrix)

louvain_animation(adj_matrix,frames)

動(dòng)圖展示如下:

6b64fc8e-a736-11ed-bfe3-dac502259ad0.gif

參考鏈接:

https://www.codenong.com/cs105912940/

https://www.reddit.com/r/MachineLearning/comments/lozys9/p_i_made_communities_a_library_of_clustering/

審核編輯 :李倩


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 算法
    +關(guān)注

    關(guān)注

    23

    文章

    4552

    瀏覽量

    92023
  • 可視化
    +關(guān)注

    關(guān)注

    1

    文章

    1141

    瀏覽量

    20736
  • python
    +關(guān)注

    關(guān)注

    53

    文章

    4753

    瀏覽量

    84078

原文標(biāo)題:發(fā)現(xiàn)一個(gè)寶藏 Python 庫,玩社區(qū)發(fā)現(xiàn)算法的不能錯(cuò)過!

文章出處:【微信號(hào):AndroidPush,微信公眾號(hào):Android編程精選】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    基于復(fù)雜網(wǎng)絡(luò)社區(qū)結(jié)構(gòu)的論壇熱點(diǎn)主題發(fā)現(xiàn)

    社區(qū)結(jié)構(gòu)是復(fù)雜網(wǎng)絡(luò)的重要特征之,該文通過構(gòu)造基于興趣的論壇用戶網(wǎng)絡(luò),成功地將社區(qū)結(jié)構(gòu)發(fā)現(xiàn)的理論與方法應(yīng)用于論壇熱點(diǎn)主題的自動(dòng)發(fā)現(xiàn),提出了極
    發(fā)表于 04-22 08:45 ?12次下載

    基于鏈接分析和用戶興趣的微博社區(qū)發(fā)現(xiàn)算法

    微博網(wǎng)絡(luò)中的每一個(gè)節(jié)點(diǎn)代表個(gè)微博用戶,微博用戶之間除了存在定的社會(huì)關(guān)系外,用戶本身也具有定的特性。用戶之間明顯的鏈接關(guān)系可以為
    發(fā)表于 11-21 17:06 ?3次下載

    種基于聚集系數(shù)的社區(qū)發(fā)現(xiàn)算法

    ,社區(qū)發(fā)現(xiàn)變得更為復(fù)雜。提出了種局部社區(qū)發(fā)現(xiàn)算法,該算法
    發(fā)表于 12-05 16:03 ?2次下載
    <b class='flag-5'>一</b>種基于聚集系數(shù)的<b class='flag-5'>社區(qū)</b><b class='flag-5'>發(fā)現(xiàn)</b><b class='flag-5'>算法</b>

    基于標(biāo)簽影響力的半同步社區(qū)發(fā)現(xiàn)算法

    微博網(wǎng)絡(luò)與社交網(wǎng)絡(luò)等的交互式社會(huì)信息網(wǎng)絡(luò)規(guī)模的快速增長對(duì)社區(qū)發(fā)現(xiàn)提出巨大挑戰(zhàn)。標(biāo)簽傳播算法( LPA)雖然在時(shí)間復(fù)雜度上具有很大的優(yōu)勢,但是其內(nèi)在的多種隨機(jī)策略使得算法穩(wěn)定性不高。針對(duì)
    發(fā)表于 12-17 11:34 ?0次下載

    種加權(quán)稠密子圖社區(qū)發(fā)現(xiàn)算法

    目前,針對(duì)復(fù)雜網(wǎng)絡(luò)的社區(qū)發(fā)現(xiàn)算法大多僅根據(jù)網(wǎng)絡(luò)的拓?fù)浣Y(jié)構(gòu)來確定社區(qū),然而現(xiàn)實(shí)復(fù)雜網(wǎng)絡(luò)中的邊可能帶有表示連接緊密程度或者可信度意義的權(quán)重,這些先驗(yàn)信息對(duì)
    發(fā)表于 12-25 10:13 ?0次下載

    融合多維數(shù)據(jù)的微博社區(qū)發(fā)現(xiàn)算法

    隨著微博用戶的不斷增加,微博網(wǎng)絡(luò)已成為用戶進(jìn)行信息交流的平臺(tái),針對(duì)由于博文長度受限,傳統(tǒng)的社區(qū)發(fā)現(xiàn)算法無法有效解決微博網(wǎng)絡(luò)的稀疏性等問題,提出了DC-DTM(discovery community
    發(fā)表于 01-02 16:26 ?3次下載
    融合多維數(shù)據(jù)的微博<b class='flag-5'>社區(qū)</b><b class='flag-5'>發(fā)現(xiàn)</b><b class='flag-5'>算法</b>

    自動(dòng)編碼器的社區(qū)發(fā)現(xiàn)算法

    社區(qū)結(jié)構(gòu)是復(fù)雜網(wǎng)絡(luò)的重要特征之,社區(qū)發(fā)現(xiàn)對(duì)研究網(wǎng)絡(luò)結(jié)構(gòu)有重要的應(yīng)用價(jià)值.K均值等經(jīng)典聚類算法是解決社區(qū)
    發(fā)表于 01-02 18:32 ?0次下載
    自動(dòng)編碼器的<b class='flag-5'>社區(qū)</b><b class='flag-5'>發(fā)現(xiàn)</b><b class='flag-5'>算法</b>

    基于標(biāo)簽傳播的社交網(wǎng)絡(luò)的社區(qū)發(fā)現(xiàn)模型

    針對(duì)基于標(biāo)簽傳播的復(fù)雜網(wǎng)絡(luò)重疊社區(qū)發(fā)現(xiàn)算法中預(yù)先輸入?yún)?shù)在真實(shí)網(wǎng)絡(luò)中的局限性以及標(biāo)簽冗余等問題,提出種基于標(biāo)簽傳播的面向大規(guī)模學(xué)術(shù)社交網(wǎng)絡(luò)的社區(qū)
    發(fā)表于 01-04 16:49 ?0次下載
    基于標(biāo)簽傳播的社交網(wǎng)絡(luò)的<b class='flag-5'>社區(qū)</b><b class='flag-5'>發(fā)現(xiàn)</b>模型

    組合29個(gè)簡單Python代碼塊,自動(dòng)發(fā)現(xiàn)算法

    本文提出了種基于演化算法的搜索策略,將其AAD中實(shí)現(xiàn)。AAD可以基于Python的子集作為語法結(jié)構(gòu),組合成復(fù)雜度相對(duì)較高的程序(循環(huán),嵌套塊,嵌套函數(shù)調(diào)用等),并生成可執(zhí)行的Python
    的頭像 發(fā)表于 04-19 13:47 ?3393次閱讀

    多層網(wǎng)絡(luò)社區(qū)發(fā)現(xiàn)相關(guān)研究及對(duì)比

    社區(qū)發(fā)現(xiàn)是復(fù)雜網(wǎng)絡(luò)分析的重要任務(wù)」現(xiàn)有的社區(qū)發(fā)現(xiàn)方法大多面向單層網(wǎng)絡(luò),對(duì)現(xiàn)實(shí)世界中廣泛存在的多層網(wǎng)絡(luò)中的社區(qū)
    發(fā)表于 04-07 15:41 ?23次下載
    多層網(wǎng)絡(luò)<b class='flag-5'>社區(qū)</b><b class='flag-5'>發(fā)現(xiàn)</b>相關(guān)研究及對(duì)比

    結(jié)合改進(jìn)差分進(jìn)化和模塊密度的社區(qū)發(fā)現(xiàn)算法

    引入社區(qū)發(fā)現(xiàn)中,提出了種結(jié)合改進(jìn)差分進(jìn)化和模塊密度的社區(qū)發(fā)現(xiàn)算法。該
    發(fā)表于 04-12 14:54 ?4次下載
    結(jié)合改進(jìn)差分進(jìn)化和模塊密度的<b class='flag-5'>社區(qū)</b><b class='flag-5'>發(fā)現(xiàn)</b><b class='flag-5'>算法</b>

    復(fù)雜網(wǎng)絡(luò)社區(qū)發(fā)現(xiàn)下的多目標(biāo)五行環(huán)優(yōu)化算法

    社區(qū)結(jié)構(gòu)作為復(fù)雜網(wǎng)絡(luò)的重要特性,對(duì)理解網(wǎng)絡(luò)的功能和結(jié)構(gòu)具有重要意義。為了解決復(fù)雜網(wǎng)絡(luò)的社區(qū)發(fā)現(xiàn)問題,提出了種多目標(biāo)五行環(huán)優(yōu)化算法( Mul
    發(fā)表于 05-17 16:47 ?2次下載

    通用的動(dòng)態(tài)社區(qū)發(fā)現(xiàn)研究框架綜述

    隨著社交媒體多樣性的増加,實(shí)時(shí)分析社交網(wǎng)絡(luò)的需求不斷増大,動(dòng)態(tài)社區(qū)發(fā)現(xiàn)的硏究受到了廣泛的關(guān)注。已有的社區(qū)發(fā)現(xiàn)綜述多是側(cè)重靜態(tài)社區(qū)
    發(fā)表于 06-04 15:15 ?5次下載

    基于譜聚類的多目標(biāo)復(fù)雜網(wǎng)絡(luò)社區(qū)發(fā)現(xiàn)算法

    多目標(biāo)優(yōu)化算法在復(fù)雜網(wǎng)絡(luò)社區(qū)發(fā)現(xiàn)中具有很強(qiáng)的競爭力,然而,在處理社區(qū)結(jié)構(gòu)較為模糊、網(wǎng)絡(luò)數(shù)據(jù)規(guī)模大的問題時(shí)難以得到滿意的效果。為克服現(xiàn)有多目標(biāo)方法的不足,提岀
    發(fā)表于 06-17 15:02 ?11次下載

    ESN中基于貪婪派系擴(kuò)張的重疊社區(qū)發(fā)現(xiàn)算法

    傳統(tǒng)局部擴(kuò)張方法在對(duì)企業(yè)社會(huì)化網(wǎng)絡(luò)(ESN)中的重疊社區(qū)結(jié)構(gòu)進(jìn)行識(shí)別時(shí),存在計(jì)算冗余與社區(qū)挖掘不徹底的問題。為此,提出種基于貪婪派系擴(kuò)張的重疊社區(qū)
    發(fā)表于 06-24 11:16 ?16次下載